私はこれをしたい:
_%s/shop_(*)/shop_\1 wp_\1/
_
shop_(*)
が何にも一致しないのはなぜですか?
ここにはいくつかの問題があります。
vim regexenの括弧はキャプチャ用ではありません。キャプチャには\( \)
を使用する必要があります。
_*
_はあなたが思うことを意味しません。これは「前の0個以上」を意味するため、正規表現は「_shop_
_の後に0+ _(
_とリテラル__)
_が続く文字列」を意味します。
探しているのは_.
_です。正規表現では「任意の文字」を意味します。 _.*
_のように星と組み合わせると、「任意の文字が0個以上」という意味になります。おそらく少なくとも1文字が必要なので、_.\+
_を使用します(_+
_は「前の1つ以上」を意味します)
これを使用してください:%s/shop_\(.\+\)/shop_\1 wp_\1/
。
オプションで、最後のスラッシュの後にg
で終了して、最初の行だけでなく1行のすべてのインスタンスを置き換えます。