回答:
私は使うだろう \zs
:%s/.*\zspattern/replacement/
ちょっとした説明:
.
任意の単一の文字を表します*
貪欲なマッチング(可能な限り)を表しますVimのでは、ゼロ幅のアンカーを使用することができます\zs
し、\ze
スタートとあなたが一致したい検索パターンの終了を定義します。パターン内の前後は\zs
、\ze
置換による影響を受けません。
わかりやすくするために、wikiaのSearch and replaceのこの例を使用します。
パターンの開始と終了を設定するためにとを使用して
\zs
、入力を保存します\ze
。たとえば、次の代わりに::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
使用する:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
詳細については、
完全を期すために、私は代替案を投稿すると思いました。Vimには複数のアイテムがあり、そのいくつかは、より標準的な正規表現の先読みアサーション(ネガティブ/ポジティブルックアヘッド/ルックビハインド)に似ています。/programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
この場合、負の先読みが\@!
必要です。つまり、アイテムの前にあるアトムがpatternの後に出現しないことをアサートすることを意味します。この場合、アトムは他の何かが先行するパターン自体です。
:%s/pattern\(.*pattern\)\@!/replacement/
括弧内の部分は幅がゼロであり、一致に含まれないため、置換によって置き換えられません。
:h \@!
詳細または:h pattern-multi-items
その他のルックアラウンドバリエーションを含むセクション全体について。
\zs
あなたの答えには何の基本的な説明がありますか?