Hi Jürgen!

On Do, 26 Aug 2010, Jürgen Krämer wrote:

> Christian Brabandt wrote:
> > Hi Tom!
> > 
> > On Di, 24 Aug 2010, Tom wrote:
> > 
> >> On Tue, Aug 24, 2010 at 09:51:56PM +0200, Christian Brabandt wrote:
> >>> Hi Tom!
> >>>
> >>> On Di, 24 Aug 2010, Tom wrote:
> >>>
> >>>> How does one sort words with a line ? As example I have these numbers in 
> >>>> a
> >>>> line:
> >>>>
> >>>> 400, 250, 125, 600
> >>>>
> >>>> I want to sort them so they will be 125, 250, 400, 600
> >>>>
> >>>> I have tried the visual command then !sort but that doesnt do it.
> >>>
> >>> :call setline(line('.'),join(sort(split(getline('.'))), ' '))
> >>>
> >>> regards,
> >>> Christian
> >>
> >> Amazing amazing that works also.  Seems there is always more than one way 
> >> to
> >> skin a cat.
> > 
> > There is still room for improvement. For example if you consider this 
> > line:
> > 400, 250, 125, 600, 100
> > this would be sorted to:
> > 100 125, 250, 400, 600,
> > (which looks not right if you look at the commas). 
> > 
> > So here is a slightly changed version:
> > :call setline('.',join(sort(split(substitute(getline('.'), ',', '', 'g'))), 
> > ', '))
> > 
> > (one line)
> > 
> > Basically, this replaces the comma and adds it later back.
> 
> you can take advantage of the second, optional argument to split() and
> save the call to substitute():
> 
>   :call setline(line('.'),join(sort(split(getline('.'), ',\s*')), ', '))
> 
> This splits the line on every comma optionally followed by white-space.
> If there is a trailing comma, split() automatically removes it. Like in
> your second version the comma has to be added back later.

True, I didn't think of that version.

regards,
Christian

-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to