LoginSignup
17
15

More than 5 years have passed since last update.

Vimでキャプチャを利用して置換をする例など

Posted at

下のファイルを例にして、いくつかの書いてみます。
すべてノーマルVimで利用できます。

変更前
スクリーンショット 2015-01-26 1.37.08.png

1.英単語の先頭に _ (アンダースコア) をつけたいとき

変更後
スクリーンショット 2015-01-26 1.40.10.png

このケースでは 最初の正規表現にマッチした部分 = キャプチャしたい部分 なので、検索部分で () を利用しなくても \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

動作
1

3.各単語の先頭の文字だけ大文字にして、後に続く文字は小文字にしたいとき

:%s/\v\a+/\u\L&/g

動作 (POSIXの文字に注目してください)
2

2,3で書いた \u\L の説明や他にも利用できる物などは
:h sub-replace-special を見てみてください。

あとがき

今回はパターンマッチが簡単なものでしたが、
複雑なパターンマッチ書くときはエスケープのバックスラッシュだらけになってややこしくなってくるので、
\v でパターンスイッチ してしまう事も多いです。

Vimは便利な上に楽しいですね。

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15