On 08/24/10 14:10, 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.

Generally one uses a "decorate-sort-undecorate" pattern to do this sort of thing. There are a couple edge-cases that you'll want to take note of:

1) all your example numbers are 3 digits. Do you want them to sort numerically or lexicographically (should "111" come before "12"?)

2) you have commas between them and happen to end with the largest. Do you expect "5, 4, 3, 2, 1" to sort to "1, 2, 3, 4, 5" or "1 2, 3, 4, 5,"?


The DSU pattern would look something like

  :y             " yank the current line
  :new           " create a junk buffer
  :0put          " dump the line
  :$d            " delete the extra blank line
  :s/,\s*/\r/g   " put each on its own line
  :sort          " sort them lex. or
  :sort n        " sort them numerically
  :1,$-s/$,      " put the commas back in
  :%j            " rejoin into one line
  :d             " cut the line
  :q!            " quit the scratch buffer
  :put           " put it below the target line
  :-d            " delete the previous unsorted line

which could all be rolled up into a mapping or function. Note that it does tromp your scratch register, but a little care can prevent that by saving & restoring it.

-tim





--
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