sort rows in 'VI' editor

36,652

Solution 1

This answer is coming 2 years late, but might still be relevant, in visual mode select the block you want to sort and run:

:!sort

Solution 2

Try:

:%!sort

It will sort according the whole line alphabetically. If you want to sort numerically (i.e. the number in the first column can have different widt), then try:

:%!sort -n

Don't worry about the =, it will not modify any line, it will just change their order.

Solution 3

You can do the following to see the sorted output:

:!sort %

Explanation:

  • : : to enter ex mode.
  • ! : allows you to run a shell command.
  • % : the name of the file currently open.

To sort the file by changing it you can redirect its output to a temp file and then copy its content back to the original file:

:!(sort %>/tmp/tmp;cp -f /tmp/tmp %)

Solution 4

I'm not sure exactly when in the last eight years vi built this in, but you can now run:

:sort n

to sort numerical entries instead of using :! to run the sort command. See :help sort

Share:
36,652
ErAB
Author by

ErAB

Updated on August 14, 2022

Comments

  • ErAB
    ErAB over 1 year

    If i have to sort following rows on the basis of values on left of '='. But the sorting should expand the selection to column after '=' simultaneously. Thtz is we dnt have to sort column after '=' ::

    50599=1000000  
    50454=00000054  
    50080=00005464  
    50098=00000875  
    50661=00000665  
    50788=10000035  
    50988=10000006  
    50994=10000656  
    57009=00000005  
    57022=10000008  
    57040=10000005  
    57000=10000005  
    57060=10000089  
    57067=10005640  
    57102=00000765  
    57190=00000867  
    

    This needs to be done in 'VI' editing the file.

    RESULT should be ::

    50080=00005464    
    50098=00000875  ...etc.
    
  • ErAB
    ErAB over 13 years
    Hmm, the file got corrupted. I forgot to tell you sthin : this is a xml file which has some attributes in it like ::