Tip #648: Uniq - Removing duplicate lines
tip karma |
Rating 11/5, Viewed by 573
|
created: |
|
February 1, 2004 20:45 |
|
complexity: |
|
intermediate |
author: |
|
Michael Geddes |
|
as of Vim: |
|
6.0 |
There are two versions, the first leaves only the last line, the second leaves only the first line.
g/^\(.*\)$\n\1$/d
g/\%(^\1$\n\)\@<=\(.*\)$/d
Breakdown of the second version:
g//d <-- Delete the lines matching the regexp
\@<= <-- If the bit following matches, make sure the bit preceding this symbol directly precedes the match
\(.*\)$ <-- Match the line into subst register 1
\%( ) <--- Group without placing in a subst register.
^\1$\n <--- Match subst register 1 followed by end of line and the new line between the 2 lines
In this simple format (matching the whole line), it's not going to make much difference, but it will start to matter if you want to do stuff like match the first word only
This does a uniq on the first word in the line, and deletes all but the first line:
g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d
<<Single letter insert |
expand existing abbreviation >>
Additional Notes
|