created 2006 · complexity basic · author Robert Stovall · version 7.0
Vim has a very powerful built-in sort utility, or it can interface with an external one. In order to keep only unique lines in Vim, you would:
Yes, it's that simple.
You could create a range in advance, such as
'a,. (from mark 'a' to the current line) or you could create one on-the-fly using visual selection by pressing ':' in visual mode, after selecting the text you wish to sort, to get a range of
'<,'> on the command line.
If you like using an external sort utility instead, you can do it just as easily. For example, Unix sort, removing duplicate lines:
Many other systems also have an external sort utility, but the options and capabilities will differ. It is probably better to use the built-in Vim sort unless you are looking for a specific feature of the external sort (or using an old Vim without the
Sort in reverseEdit
Sort, removing duplicate linesEdit
Sort using the external Unix sort utility, respecting month-name orderEdit
("respecting month-name order" means January < February < ... < December)
(this way, 100 doesn't precede 20 in the sort)
Sort subsections independently, in this example sort numbers between "start" and "end" markersEdit
:g/start/+1,/end/-1 sort n
Sort only specific lines using ranges Edit
sort lines 296 to 349, inclusive
- 374 Use filter commands to process text
- 588 How to sort using visual blocks
- 758 Search and sort by selection
- 800 Sorting lines in a file based on the number of words in each line
- 923 Sort lines by a specified word number
- 667 Working with CSV files sort by CSV field
- 128 Use Unix command-line tools in Windows links to download GNU sort for Windows
- 648 Uniq - Removing duplicate lines techniques to remove duplicate lines
- Probably need some general
- Give examples of numeric sort and using regex sort.
- Clean up my "see also" list. It's useful now for a comprehensive list of related tips, some of which need work. At least should add a note on point of tip.
- If we're going to mention an external sort tool, we may as well include the following with a brief explanation. Vim could do this, but only with a complex regex. Or perhaps better, mention it in VimTip374 or VimTip923 in "see also".
-k2sorts on the second field (word by default).
This misguided snippet was added recently:
- delimit the column using some char here I have | symbol as delimiter, once did with that you can use below command to sort specific column use -n if u want to sort numeric and its working on some version of vi and not on ubuntu vi :(
/|.*|/ | sort
- used to match a patern |.*| used to match words delimited between || and | as piping commend and sort to sort
This is wrong and should never work. Here's what it is actually doing:
/|.*|/: jump to the next line that has two '|' characters in it, anywhere
|: command separator, this lets you start a new command on the current line
sort: do a default sort of the entire buffer
Basically this is the equivalent of typing
Now, what you CAN do, is provide a pattern that the
:sort command will skip over and ignore at the start of every line while sorting. For example, to sort based only on text after the last '|' character on the line (what I think was intended by the example), you'd do this: