単語/パターンの n 番目の出現を見つけることを扱う他の質問を見ましたが、vim で n 番目のパターンの出現を実際に置き換える方法を見つけることができませんでした。次のようなすべての出現をハードコーディングする明白な方法があります
:s/.*\(word\).*\(word\).*\(word\).*/.*\1.*\2.*newWord.*/g
これを行うより良い方法はありますか?
単語/パターンの n 番目の出現を見つけることを扱う他の質問を見ましたが、vim で n 番目のパターンの出現を実際に置き換える方法を見つけることができませんでした。次のようなすべての出現をハードコーディングする明白な方法があります
:s/.*\(word\).*\(word\).*\(word\).*/.*\1.*\2.*newWord.*/g
これを行うより良い方法はありますか?
詳細については、
s/\%(\(pattern\).\{-}\)\{41}\zs\1/2/
42 番目のオカレンスを置き換えるためにも機能します。ただし、現在の行に限定されない場合でも、John Kugelman が提供するより単純な解決策を好みます。
複数の検索を使用すると、これをもう少し簡単に行うことができます。コマンドの空のパターンは、:s/pattern/repl/
最新の検索結果を置き換えることを意味します。
:/word//word//word/ s//newWord/
or
:/word//word/ s/word/newWord/
その後、 を実行してこれを複数回繰り返す@:
か10@:
、コマンドをさらに 10 回繰り返すこともできます。
または、これをインタラクティブに行う場合は、次のようにします。
3/word
:s//newWord/r
これは、カーソル位置から3 番目に出現する単語を見つけて、置換を実行します。
そうであれば/gc
、確認を求める回数を数えて、n番目に到達したら交換を進めることができます:D