在不排序的情况下删除 VIM 异常条件中的连续重复行
Removing contiguous duplicate lines in VIM exception condition without sorting
我想在 VIM
中执行删除连续重复行的步骤,但有异常条件且不进行排序
示例如下:
正则表达式之前
a
b
c
d
00
f
b
00
c
e
00
在 运行 正则表达式之后
a
b
c
d
00
f
00
e
00
我想删除重复行而不删除“00”模式。
有了以下内容,它应该可以工作:
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$
Vim 是一个非常强大的编辑器,但是对于这个问题,我会求助于外部实用程序来获得一个简单的解决方案。
如果您有可用的 awk(大多数 linux 发行版默认安装),您可以在 vim:
中执行此操作
:%!awk '/^00$/||\!a[[=10=]]++'
我的 PatternsOnText plugin 提供(除其他外)这个命令:
:%DeleteDuplicateLinesIgnoring /00/
我想在 VIM
中执行删除连续重复行的步骤,但有异常条件且不进行排序示例如下:
正则表达式之前
a
b
c
d
00
f
b
00
c
e
00
在 运行 正则表达式之后
a
b
c
d
00
f
00
e
00
我想删除重复行而不删除“00”模式。
有了以下内容,它应该可以工作:
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$
Vim 是一个非常强大的编辑器,但是对于这个问题,我会求助于外部实用程序来获得一个简单的解决方案。
如果您有可用的 awk(大多数 linux 发行版默认安装),您可以在 vim:
中执行此操作:%!awk '/^00$/||\!a[[=10=]]++'
我的 PatternsOnText plugin 提供(除其他外)这个命令:
:%DeleteDuplicateLinesIgnoring /00/