Answers:
您可以使用此命令来打印包含This
和不包含的行red
:
:g/\(.*This\)\&\(.*red\)\@!
\&
将分支像逻辑上一样分开,AND
因为我们希望满足两个条件的线(分支),\(.*This\)
是第一个分支,可能只是一个分支,This
但是这样更通用\(.*red\)\@!
是第二个分支,\@!
表示“如果前面的原子不匹配,则零宽度匹配”,如逻辑NOT
。换一种说法:
\(.*This\) \& \(.*red\)\@!
°°°°°°°°°° °° °°°°°°°°°°°°
'This' AND NOT 'red'
看一下这篇文章。
将其与@romainl答案结合使用,您可以做任何您想做的事情。
示例:假设我要向const
不包含a 的函数中添加a 。
handleChange = value => {
VIM脚本:
%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc
输出:
const handleChange = value => {
说明:
\([ ]*\)\(\w* = .*$\)
-给我所有的行 word =
\&
-结合规则
^\(\&\(.*const.*\)\@!.\)*$
-该行不应包含const
。