我想在异常情况下执行删除连续重复行步骤而不在VIM中进行排序
以下示例:
在Regex之前
a
b
c
d
00
f
b
00
c
e
00
运行正则表达式
之后a
b
c
d
00
f
00
e
00
我想删除重复的行而不删除“00”模式。
答案 0 :(得分:2)
以下内容应该有效:
function! s:HandleLine()
let line = getline('.')
if has_key(s:seen, line)
delete
else
let s:seen[line] = 1
endif
endfunction
command! -range=% -nargs=1 UnsortUniq let s:seen={}<bar><line1>,<line2>v/<args>/call s:HandleLine()
然后执行:%UnsorUniq ^00$
答案 1 :(得分:2)
Vim是一个非常强大的编辑器,但是对于这个问题,我会转向外部实用程序以获得简单的解决方案。
如果您有awk可用(大多数Linux发行版都默认安装),您可以在vim中执行此操作:
:%!awk '/^00$/||\!a[$0]++'
答案 2 :(得分:0)
我的PatternsOnText plugin提供(以及其他)此命令:
:%DeleteDuplicateLinesIgnoring /00/