回答:
このコマンドを使用して、次を含む行と含まThis
ない行を印刷できますred
。
:g/\(.*This\)\&\(.*red\)\@!
\&
AND
2つの条件(分岐)を満たす行が必要なため、分岐を論理的に分離します。\(.*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
。