【vim】正規表現のマッチする範囲を指定して文字列置換をもっと簡単にする

\zs\zeを使えば、正規表現のマッチする範囲を指定できて、置換がとても楽になる。

例えば、

<div>ABCDEF</div>
<p>123456</p>
<div class="sample">abcdef</div>

という文字列があって、divタグの中身だけ変えたい時。

普通にやると、ちょっとめんどくさい正規表現を書かないと置換できません。

%s/\(<div.*>\).\+\(<\/div>\)/\1REPLACE\2/

だいぶごちゃごちゃしてます。

でもこれを、\zs\zeを使えば、こうなります。

%s/<div.*>\zs.\+\ze<\/div>/REPLACE/

マッチする部分が、\zsから\zeで囲んだ部分だけになるので、()でグループ化して後方参照させる必要がなくなります。

便利すぎる。

参考記事

僕が一番 Vim の正規表現をうまく使えるんだ(\zs \ze 編) - TIM Labs

Vimの正規表現 “\v”, “\zs”, “\ze” | blog.remora.cx