VIM は、1 行の特定の単語の後に表示されるパターンを置き換えます。

VIM は、1 行の特定の単語の後に表示されるパターンを置き換えます。

私の文にこんなセリフがある。

パターンの前のテキスト=ゴミ**パターンの後のテキストはパターンです

VIMでこれを行うと、その後に発生するイベントのみを%s/pattern/saturn/交換しpatternたいと思います=。その行の前にあるすべての内容を無視する必要があります=。どうすればいいですか?

答え1

patternbeforeが一度だけ表示されると仮定すると、次の=2つの手順でこれを実行できます。

:%s/pattern/saturn/g
:%s/saturn\(.\{-}=\)/pattern\1/

怠惰な一致(非欲望的な一致とも呼ばれる)を示します\{-}.

説明する

最初のステップでは、すべての項目を次のステップpatternに置き換えてから、前の単語を見つけてに置き換えます。saturnsaturn=pattern

警告する

=これは、各行が一度だけ現れると仮定する。

=より良い方法(行ごとに1つずつ仮定)

再帰マクロを使用してこれを実行できます。

qaqqa:%s/\(=.\{-}\)pattern/\1saturn/@aq@a

これは単一の発生pattern=に置き換えられますsaturn。マクロとして保存され、再帰的に呼び出されると、置き換える項目が残らなくなるまでファイル処理を続けます。かなりハッキーですが動作します。

また、見ることができます

答え2

特殊原子を使用して\@<=一致を主張することができます。今後=.*作りましょうどこかにその行の前):

:%s/\(=.*\)\@<=pattern/saturn/g

関連情報