如何删除Vim中所有非重复的行? 有很多解决方案可以删除重复行。我想倒退。我想只留下那些至少有重复的行。
有谁知道怎么做?
答案 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
命令执行此操作。