删除匹配行之前和之后的n行范围?


12

我有一个重复的配置文件,我想匹配一个正则表达式,并在匹配之前和之后删除一系列行。我也想在一个命令中删除匹配项。

我可以用...

:g/match/-1d

...多次从比赛前删除多行...

...并将其与以下几个呼叫组合...

:g/match/+1d

...在比赛结束后删除多行...

但是,有没有办法删除一条命令匹配之前,之后和包括的行范围?

Answers:


21

你快到了; 您还可以指定一系列行,形式为[line1],[line2][command],而不仅仅是[line][command](如您现在使用的那样)。

您可以.用来引用当前行。

  • 对于当前和下一行: :g/match/.,+1d
  • 对于当前行和上一行: :g/match/-1,.d
  • 对于上一行,当前行和下一行: :g/match/-1,+1d

请参阅:help [range]以获取更多信息,并且在此答案中还有更多示例


sed中的语法是否相同?
leeand00

3
@ leeand00否。所有:g操作都是在与模式匹配的行上运行ex命令。所以打字:g/match/.,+1d是完全一样要去的所有生产线match,和打字:.,+1d
马丁Tournoij

这是我一段时间以来在vim上学到的最酷的东西。感谢分享!
LP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.