删除不行(包含图案和图案上方的2行)

时间:2015-07-09 08:30:40

标签: vim

在Vim中,我尝试删除文件中的所有行(包含模式和模式上方的2行)。我试试:

:g!/pattern/.-2 d

但它说:无效范围...... 怎么办?

2 个答案:

答案 0 :(得分:4)

下面的命令会查找与pattern不匹配的行并删除它们以及上面的两行:

:g!/pattern/-2,.d

下面的命令会查找与pattern不匹配的行,并删除位于上面两行的行:

:g!/pattern/-2d

范围总是向下,所以我们先使用高位地址 - -2 - 然后用低一秒 - . - 。

那就是说,如果匹配的行上面没有两行,你很可能会收到错误。

答案 1 :(得分:1)

  

然后我应该如何删除所有行中的第4行,第5行和第6行:行1行2行3行4行5行包含模式行7?

像这样:

:v/\v(.*\n){,2}.*pattern.*/d

匹配如果:

  • 该行包含模式,或
  • 下一行包含模式,或
  • 第二行包含模式。

保留这些线条。所有其他行(:v)都将被删除。

示例:

"Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim
id est laborum."

执行命令

:v/\v(.*\n){,2}.*labor.*/d

结果:

consectetur adipiscing elit,                -2
sed do eiusmod tempor incididunt            -1
ut labore et dolore magna aliqua.          <-0 labor(e)
Ut enim ad minim veniam, quis nostrud       -1
exercitation ullamco laboris nisi ut       <-0 labor(is)
occaecat cupidatat non proident, sunt in    -2
culpa qui officia deserunt mollit anim      -1
id est laborum."                           <-0 labor(um)