私の文にこんなセリフがある。
パターンの前のテキスト=ゴミ**パターンの後のテキストはパターンです
VIMでこれを行うと、その後に発生するイベントのみを%s/pattern/saturn/
交換しpattern
たいと思います=
。その行の前にあるすべての内容を無視する必要があります=
。どうすればいいですか?
答え1
pattern
beforeが一度だけ表示されると仮定すると、次の=
2つの手順でこれを実行できます。
:%s/pattern/saturn/g
:%s/saturn\(.\{-}=\)/pattern\1/
怠惰な一致(非欲望的な一致とも呼ばれる)を示します\{-}
。.
説明する
最初のステップでは、すべての項目を次のステップpattern
に置き換えてから、前の単語を見つけてに置き換えます。saturn
saturn
=
pattern
警告する
=
これは、各行が一度だけ現れると仮定する。
=
より良い方法(行ごとに1つずつ仮定)
再帰マクロを使用してこれを実行できます。
qaqqa:%s/\(=.\{-}\)pattern/\1saturn/@aq@a
これは単一の発生pattern
後=
に置き換えられますsaturn
。マクロとして保存され、再帰的に呼び出されると、置き換える項目が残らなくなるまでファイル処理を続けます。かなりハッキーですが動作します。
また、見ることができます
答え2
特殊原子を使用して\@<=
一致を主張することができます。今後(=.*
作りましょうどこかにその行の前):
:%s/\(=.*\)\@<=pattern/saturn/g