在 Vim 中,如何删除某处重复的所有行

Tem*_*ora 6 vim ex

我有一个包含以下行的文件:

one one
one one
two two two
one one
three three
one one
three three
four
Run Code Online (Sandbox Code Playgroud)

我想从文件中删除所有出现的重复行,只保留非重复行。因此,在上面的示例中,结果应该是:

two two two
four
Run Code Online (Sandbox Code Playgroud)

我看到了这个类似问题的答案。我尝试修改前一行,如下所示:

:syn clear Repeat | g/^\(.*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline ('.'), '".\^$*[]') . '$"' | d
Run Code Online (Sandbox Code Playgroud)

但它不会删除所有出现的重复行,它仅删除一些出现的重复行。

我怎样才能在 vim 中做到这一点?或者具体来说我怎样才能在 vim 中使用 ex 做到这一点?

澄清一下,我不是在寻找sort u.

Don*_*ank 6

如果您有权访问 UNIX 风格的命令,您可以执行以下操作:

:%!sort | uniq -u
Run Code Online (Sandbox Code Playgroud)

该命令-u的选项uniq执行您需要的任务。从uniq命令的帮助文本中:

   -u, --unique
          only print unique lines
Run Code Online (Sandbox Code Playgroud)

但我应该注意,这个答案假设您不介意输出与输入文件可能已经具有的任何排序顺序不匹配。


Ing*_*kat 1

我的PatternsOnText 插件版本 1.30 现在有一个

:DeleteAllDuplicateLinesIgnoring
Run Code Online (Sandbox Code Playgroud)

命令。没有任何参数,它将按照您的问题中概述的方式工作。