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

我可以使用...

:g/match/-1d

...多次删除比赛开始前多于一行...

...并将其与对...的一些调用组合在一起。

:g/match/+1d

...要在匹配项后删除多行...

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

#1 楼

你快到了;您还可以指定行的范围,形式为[line1],[line2][command],而不只是[line][command](就像您现在使用的那样)。

您可以使用.引用当前行。 br />

当前行和下一行::g/match/.,+1d

当前行和上一行::g/match/-1,.d

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


有关更多信息,请参见:help [range]。在此答案中,还有更多示例。

评论


sed中的语法是否相同?

–leeand00
15年5月27日在14:27

@ leeand00不。:g所做的全部工作就是在与模式匹配的行上运行一个ex命令。因此,键入:g / match /.,+ 1d与访问所有具有match的行完全相同,然后键入:。,+ 1d

–马丁·图尔诺伊(Martin Tournoij)
15年5月27日在14:29

这是我一段时间以来在vim上学到的最酷的东西。感谢分享!

–lps
18年8月30日在22:18