我在 VIM 中寻找一种方法来删除所有重复的行,只保留文件中存在的唯一行。我更喜欢宏,但命令或函数也很好。
假设我有一个包含重复行和一些唯一行的文件:
1Apple
1Apple
2Peach
2Peach
2Peach
3Beer
4Banana
4Banana
4Banana
我想删除所有行,以便只剩下:
3Beer
我真正想要的那条独特的线。
我总是使用 sort u 来通过删除重复项来获取唯一列表,但有时我只需要文件中的唯一行。
有什么想法如何在 VIM 中处理这种情况?
答案1
您可以使用替代命令和反向引用来执行此操作:
s/^\(.*\)\(\n\1\)\+//
请注意,这仅在行已排序时才有效。这通过在下一行中匹配并删除第一组一次或多次来实现。
答案2
您可以使用“uniq”命令来执行此操作 -
uniq -u 要检查的文件名.txt
答案3
您可以uniq
直接从 Vim 调用该工具作为过滤器:
:!%uniq -u
答案4
选择所有想要过滤的行。
这样做
:'<,'>!uniq -u<CR>
,'<,'>
范围会自动为您添加。
如果您想要过滤整个缓冲区,请不要选择任何内容,只需执行:%!uniq -u<CR>
。
您可以阅读有关过滤器的信息:h filter
。