はじめに
ゲームWikiを作成するにあたり、以下の様な置換をしたい場面があった。
- QuickTinking -> Quick_Thinking
要は、英字の小文字と大文字の間に半角スペースを入れたいんだが、これが意外と検索し辛くてこづった。
同じ轍を踏まない様に、以下に記しておく。
結論
今回のケースでは、以下のコマンドを打てば良い。
:%s/\v(\l)(\u)/\1_\2/gc
-
\v
の Very Magic により正規表現をエスケープ不要で記載できる。 - 小文字を
\l
, 大文字を\u
で指定する。 - 小文字と大文字の間に半角ススペースで挟むため、
()
で囲んだ箇所を\1
,\2
で割り振る。
以下、段階的に解説していく。
解説
\v (Very Magic)
vim で正規表現を書くと、 \(abc|)\+
の様に、都度エスケープ文字が必要で可読性が大きく損なわれる問題がある。
vimでは、正規表現の頭に \v
を追記することで (abc)+
の様に従来の正規表現の書き方ができる。
常に適用したい場合は、 .vimrc に nmap / /\v
を記載すると常に / 検索で \v
が適用される。
大文字と小文字の区別
小文字は \l
, 大文字は \u
で指定できる。
部分置換の方法
一部分だけを置換したい場合、 ()
(ホールドバッファ)を指定した上で、 \1
- \9
で呼び出すことができる。