如何在Vim中删除非重复行?

时间:2014-11-17 20:18:23

标签: vim

如何删除Vim中所有非重复的行? 有很多解决方案可以删除重复行。我想倒退。我想只留下那些至少有重复的行。

有谁知道怎么做?

3 个答案:

答案 0 :(得分:5)

如果你在Linux机器上,请尝试在vim中使用这行:

:%!awk 'a[$0]++'

如果您正在寻找纯vim / vimscript解决方案,您可以在vim中构建字典,key是行文本,value是行在缓冲区中出现的次数,最后过滤掉那些value ==1条目。

阅读:h dict :h filter(

的文档

答案 1 :(得分:2)

:%y               yank the whole buffer
:vnew             create a new vertical window
Vp                paste in place of line 1
:sort             sort the buffer
:%!uniq -u        remove duplicates
:%s/.*/g\/&\/d    turn every line into a :global command that deletes the matching line
:%y               yank the whole buffer
:bw!              delete that buffer 
                  (and close the window and move back to the original window)
:@"               execute the :global commands contained in the unnamed register

诚然,肯定的答案比肯特的答案要多得多,但希望能证明Vim的多功能性。

答案 2 :(得分:2)

我的PatternsOnText plugin现在有:DeleteUniqueLinesIgnoring命令执行此操作。