这个问题已经解决了如何删除重复行,但强制列表首先排序。
我想在uniq
不先对它们进行排序的情况下执行删除连续重复行的步骤(即)。
之前的例子:
Foo
Foo
Bar
Bar
之后的示例:
Foo
Bar
这个问题已经解决了如何删除重复行,但强制列表首先排序。
我想在uniq
不先对它们进行排序的情况下执行删除连续重复行的步骤(即)。
之前的例子:
Foo
Foo
Bar
Bar
之后的示例:
Foo
Bar
刚刚在这里找到了解决方案。以下正则表达式可以正常工作:
g/^\(.*\)$\n\1$/d
:%!uniq
如果您使用的是 unix 系统,或具有该uniq
程序的系统
如果要删除不连续的重复项,可以使用
: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
如果您只想删除连续的重复行,只需使用 uniq 而不对任何内容进行排序。
:%!uniq
:%s/^\(.*\)\(\n\1\)\+$/\1/ge
这是我给你的答案
我知道这很旧,但值得一提的是,如果您也不介意排序(我知道 OP 想要避免它),以下内容也适用:
:sort u