在VIM异常条件中删除连续的重复行而不进行排序

时间:2016-08-30 09:00:08

标签: regex vim vi

我想在异常情况下执行删除连续重复行步骤而不在VIM中进行排序

以下示例:

在Regex之前

a
b
c
d
00
f
b
00
c
e
00

运行正则表达式

之后
a
b
c
d
00
f
00
e
00

我想删除重复的行而不删除“00”模式。

3 个答案:

答案 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/