vim:不同行的多个条件

问题描述 投票:0回答:2

仅在服务器条件匹配时,有什么方法可以在线路上采取行动。例如,我的文字为

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”的条件下,打印“下面的行和下面的三行”。

我希望我已经说清楚了。

vim global criteria multiple
2个回答
1
投票

[如果我理解正确,您想在每条匹配的第一行的末尾附加文本,但不要使用: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

0
投票

我将使用\v表示“非常神奇的搜索”,因此您可以使用如下正则表达式组:

/\v(red|blue|purple)

然后您的正则表达式与您想要的上述每个选项匹配。向我们展示所需的输出会更好,因此我们可以更好地了解您想要的结果。

© www.soinside.com 2019 - 2024. All rights reserved.