在vi中删除连续的重复行而不进行排序

duk*_*ave 13 regex vi vim duplicate-data

此问题已经解决了如何删除重复行,但强制首先对列表进行排序.

我想执行删除连续的重复行步骤(即uniq)而不首先对它们进行排序.

以前的例子:

Foo
Foo
Bar
Bar
Run Code Online (Sandbox Code Playgroud)

示例之后:

Foo
Bar
Run Code Online (Sandbox Code Playgroud)

duk*_*ave 25

只要找到了解决办法在这里.以下正则表达式正常:

g/^\(.*\)$\n\1$/d
Run Code Online (Sandbox Code Playgroud)


Joh*_*don 16

:%!uniq
Run Code Online (Sandbox Code Playgroud)

如果您使用的是unix系统或具有该uniq程序的系统


ram*_*ion 13

如果要删除可以使用的非连续重复项

:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d
Run Code Online (Sandbox Code Playgroud)

(除去最后一行副本之外的所有内容)

哪个会改变

Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux
Run Code Online (Sandbox Code Playgroud)

Bar
Baz
Foo
Quux
Run Code Online (Sandbox Code Playgroud)

如果要删除除第一个副本以外的所有副本,请尝试

:g/^/m0
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d
:g/^/m0
Run Code Online (Sandbox Code Playgroud)

哪个会改变

Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux
Run Code Online (Sandbox Code Playgroud)

Foo
Bar
Baz
Quux
Run Code Online (Sandbox Code Playgroud)