回答:
このコマンドを使用して、次を含む行と含まThisない行を印刷できますred。
:g/\(.*This\)\&\(.*red\)\@!
\&AND2つの条件(分岐)を満たす行が必要なため、分岐を論理的に分離します。\(.*This\)最初のブランチであり、単純に可能性Thisがありますが、より一般的です、\(.*red\)\@!は、2番目のブランチで\@!、論理のように「先行するアトムが一致しない場合、幅がゼロに一致する」ことを意味しますNOT。言い換えると:
\(.*This\) \& \(.*red\)\@!
°°°°°°°°°° °° °°°°°°°°°°°°
'This' AND NOT 'red'
この投稿をご覧ください。
@romainlの回答と組み合わせると、何でも好きなことができます。
例:const持っていない関数にa を追加したいとしましょう。
handleChange = value => {
VIMスクリプト:
%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc
出力:
const handleChange = value => {
説明:
\([ ]*\)\(\w* = .*$\)
-すべての行を取得します word =
\&
-ルールを組み合わせる
^\(\&\(.*const.*\)\@!.\)*$
-行にはを含めないでくださいconst。