読者です 読者をやめる 読者になる 読者になる

vimでちょっと複雑な置換

あるパターンに従って様々な単語を置換して入力していきたい場合、レジスタを使うことでうまく処理を軽減できる。例えば以下のようにするとhogeをfugaに置換できる。

:let @i = "fuga"
:s/hoge/\=@i/

\=の後に書いたものはvimscriptとして実行される。また、コマンドモード中でレジスタは@iのように書ける。

これだけだと置換する意味は特にないが、キャメルケースの単語をスネークケースに置換して入力したいとかだと役に立つ。
ex. getHogeという単語を大量にコピーしておいて単語を変えつつ順に入力していく場合

:s/getHoge/\=substitute(@i, "[A-Z][a-z]\\+", "-\l\0", "g")/

上記のコマンドを実行すればレジスタiに登録したキャメルケースの単語をスネークケースにした上でgetHogeと置き換えることができる。