2010-04-29 60 views

回答

24

剛剛發現的系統解決方案here。下面的正則表達式正常工作:

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

,如果你是在UNIX系統上,或具有uniq程序

+0

很好的建議,我應該提到在這個問題上,我在Windows上(也沒有Cygwin)。 – dukedave 2010-04-29 16:05:48

2

如果你只是想刪除連續重複的線路,只需使用的uniq不排序任何東西。

:%!uniq 
9

如果要刪除不連續的重複,你可以使用

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

(這將刪除所有,但一個行的最後一個副本)

這將改變

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 

Bar 
Baz 
Foo 
Quux 

如果要刪除所有,但第一個副本,嘗試

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

這將改變

Foo 
Bar 
Foo 
Bar 
Foo 
Baz 
Foo 
Quux 

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

這是我對你的答案

0

我知道這是舊的,但值得一提的下面,如果你不介意的排序,以及也可以(我知道OP想避免它):

:sort u 
相關問題