はじめに
ゲーム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 で呼び出すことができる。