在不排序的情况下删除 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/