下のファイルを例にして、いくつかの書いてみます。
すべてノーマルVimで利用できます。
変更前
1.英単語の先頭に _
(アンダースコア) をつけたいとき
変更後
このケースでは 最初の正規表現にマッチした部分 = キャプチャしたい部分なので、検索部分で ()
を利用しなくても \0
でマッチ全体を参照できます。
:%s/[a-zA-Z]\+/_\0/g
[a-zA-Z]
は文字クラス \a
を利用できるので以下のようにも書けます。 (※ 文字クラスについては :h /character-classes
で詳しい情報を参照できます。)
:%s/\a\+\/_\0/g
また、\0
は &
でもよいです。
:%s/\a\+/_&/g
上記の3つの方法はすべて同じ結果を得ることができます。
2.各単語の先頭の文字を大文字にしたいとき
上記と同じファイルで各単語の先頭の文字だけ大文字にしたい場合。
1で利用したもの(\v
, \a
, &
) に加えて \u
を使います。
※ \u
はその次にくる文字を大文字に変更する特殊文字です。\l
だとその逆(小文字)ができます。
:%s/\v\a+/\u&/g
動作
3.各単語の先頭の文字だけ大文字にして、後に続く文字は小文字にしたいとき
:%s/\v\a+/\u\L&/g
動作 (POSIX
の文字に注目してください)
2,3で書いた \u
や \L
の説明や他にも利用できる物などは:h sub-replace-special
を見てみてください。
あとがき
今回はパターンマッチが簡単なものでしたが、
複雑なパターンマッチ書くときはエスケープのバックスラッシュだらけになってややこしくなってくるので、\v
でパターンスイッチ してしまう事も多いです。
Vimは便利な上に楽しいですね。