2010-04-29 3 views

Antwort

24

gerade gefunden hat die Lösung here. Die folgende Regex korrekt funktioniert:

g/^\(.*\)$\n\1$/d 
15
:%!uniq 

wenn Sie auf einem Unix-System sind, oder ein System, das das uniq Programm

+0

Guter Vorschlag, ich sollte erwähnt haben in der Frage, dass ich auf Windows bin (und kein Cygwin). – dukedave

2

Wenn Sie nur zusammenhängenden doppelte Zeilen entfernen möchten, verwenden Sie einfach uniq, ohne etwas zu sortieren.

:%!uniq 
9

Wenn Sie nicht zusammenhängende Duplikate entfernen möchten können Sie

:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d 

verwenden

(was alle, aber die letzte Kopie einer Zeile entfernen), die

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 
ändern würde

bis

Bar 
Baz 
Foo 
Quux 

Wenn Sie alle, aber die erste Kopie entfernen möchten, versuchen

:g/^/m0 
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d 
:g/^/m0 

die

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 

zu

Foo 
Bar 
Baz 
Quux 
0
:%s/^\(.*\)\(\n\1\)\+$/\1/ge 

dies für Sie ändern würde meine Antwort

0

Ich weiß, das ist alt, aber es ist erwähnenswert, auch die folgende funktioniert, wenn Sie nichts dagegen haben auch Sortierung (ich weiß, das OP es vermeiden wollte):

:sort u