仅在服务器条件匹配时,有什么方法可以在线路上采取行动。例如,我的文字为
This is a blue coat
This is a red coat
This is a purple coat
That is a coat
(注:此文本是从另一个类似的问题中借用的。)如果当前行匹配^This
,下一行匹配red
,然后执行常规命令A some text to be appended{Esc}
。
有一个简单的方法可以实现,例如:
:%s/^This.*\ze\n.*red/&some text to be appended/e
但是,当条件增加时,正则表达式就会繁荣起来。此外,此解决方案并不像我预期的那样优雅。:gloabl
命令有什么要完成的吗?
给出了一些答案之后,我发现我的问题还不够清楚,因此我附加了以下伪命令以显示我要查找的内容。对我来说,达到此目的的优雅方法是这样的(但以下代码将不起作用):
:g/^This\C/;.+1g/red/norm Asome text to be appended
问题是,第一个:g
命令不会通过行但不会阻塞(我不确定我是否正确),因此不太可能过滤有偏见的条件(red
,后一行) 。
如果有解决方案,那么我可以轻松地执行以下操作:在“该行包含This
,以后100行包含red
”的条件下,打印“下面的行和下面的三行”。
我希望我已经说清楚了。
[如果我理解正确,您想在每条匹配的第一行的末尾附加文本,但不要使用:subst
命令。
[:global
和:normal
将帮助您实现:
:g/^This.*\ze\n.*red/normal Asome text to be appended
如果要追加到第二行,只需像这样添加“ j”:
:g/^This.*\ze\n.*red/normal jAsome text to be appended
我将使用\v
表示“非常神奇的搜索”,因此您可以使用如下正则表达式组:
/\v(red|blue|purple)
然后您的正则表达式与您想要的上述每个选项匹配。向我们展示所需的输出会更好,因此我们可以更好地了解您想要的结果。