パターンを含むが、2番目のパターンを含まない行を検索する


15

ある単語を含むが、2番目の単語を含まない行を検索する必要があります。

たとえば、「This」という単語を含むが「red」という単語を含まない行を検索します

これらの行を含むファイルの場合

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

検索では、1行目と3行目のみが検索されます。

アドバイスをありがとう!


あなたは、新しいVIMSと一緒に配布されたLogiPatプラグインを使用することができます
クリスチャンBrabandt

回答:


23

このコマンドを使用して、次を含む行と含まThisない行を印刷できますred

:g/\(.*This\)\&\(.*red\)\@!
  • \&AND2つの条件(分岐)を満たす行が必要なため、分岐を論理的に分離します。
  • \(.*This\)最初のブランチであり、単純に可能性Thisがありますが、より一般的です、
  • \(.*red\)\@!は、2番目のブランチで\@!、論理のように「先行するアトムが一致しない場合、幅がゼロに一致する」ことを意味しますNOT

言い換えると:

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

ありがたいことに、これは書式設定されたテキストによるクエリに非常によく似ています。これを使用して、docstringが欠落している関数を見つけることができました。
ジョシュアデトワイラー

1

この投稿をご覧ください。

@romainlの回答と組み合わせると、何でも好きなことができます。

例:const持っていない関数にa を追加したいとしましょう。

    handleChange = value => {

VIMスクリプト:

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

出力:

    const handleChange = value => {

説明:

\([ ]*\)\(\w* = .*$\)

-すべての行を取得します word =

\&

-ルールを組み合わせる

^\(\&\(.*const.*\)\@!.\)*$

-行にはを含めないでくださいconst

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.