これは Vim Advent Calendar 2014 11日目 の記事です。
日頃Railsを書いている。その際vim-abolishが便利なんだけど、日本語記事で紹介されている場面をあまり見ないので紹介したい。
インストール
インストールはいつものとおりVundleやNeoBundleで。
NeoBundle 'tpope/vim-abolish'
3つ機能
ところでvim-abolishは大きく分けてAbbreviation、Substitution、Coercionの3つに分類されるが、Abbreviationは使っていないので、SubstitutionとCoercionだけを取り上げる。
Substitution
Vimで :substitute
と言えば置換処理に使うコマンドだが、Substitutionはこの置換処理に加えて検索を便利にしてくれる機能だ。
賢い検索
個人的にvim-abolishいれてから普通の検索はあまり使わなくなった。便利機能を紹介する。
気が利く大文字・小文字マッチ
Vimの検索はデフォルトで大文字・小文字を区別する。/box
は "box" にはマッチするが "Box" にはマッチしない。ignorecase
オプションをつけると大文字・小文字の区別が無くなるので /box
は "box" と "Box" にマッチするが "bOX" にもマッチする。
:Subvert
コマンドはこの挙動をいい感じにしてくれる。:Subvert/box
は "Box" "box" "BOX" にマッチする。:S/box
でもOK。
スネークケース、キャメルケースにも対応
大文字・小文字だけだと「 ignorecase
して /box
でいいじゃないか」と思うかも知れない。
:Subvert
コマンドはスネークケース、キャメルケースなどの区別もしてくれる。例えば :S/hello_world
は "HelloWorld" "HELLO_WORLD" "hello_world" にマッチする。 /hello_world
では "HelloWorld" にはマッチしない。
Railsの場合、モジュール名やクラス名は "ModuleName" 形式で、ファイル名は "module_name" で書かれる。 :Subvert
ならこの2つを一緒に検索できる。
組み合わせることができる
当然だが /mouse
は "mouse" にはマッチするが "mice" にはマッチしない。
:S/m{ouse,ice}
は "mouse" "Mouse" "MOUSE" "mice" "Mice" "MICE" にマッチする。
他の使い方としては :S/{foo,bar}_concern
で "FooConcern" "FOO_CONCERN" "foo_concern" "BarConcern" "BAR_CONCERN" "bar_concern" にマッチする。
ファイルを指定する
今まではカレントバッファを対象にしていたが、検索対象のファイルを指定できる。
:S/{foo,bar}_concern/ app/models/**/*.rb
とするとapp/modelsディレクトリ以下のrubyファイルの中から "FooConcern" "FOO_CONCERN" "foo_concern" "BarConcern" "BAR_CONCERN" "bar_concern" にマッチした箇所がQuickfixに入る。(ここでは _concern
のあとに /
が必要なことに注意)
関連記事: vimgrepとQuickfix知らないVimmerはちょっとこっち来い - Qiita
賢い置換
:S/{pattern}/{string}/[flags]
で置換ができる。使い方は :substitute
とほぼ同じだが、もちろん :substitute
より痒いところに手が届いている。
入れ替え
:S/{vim,emacs}/{emacs,vim}/gc
を実行すると "vim" と "emacs" を入れ替えることができる。
Coercion
これは通常モード時に、カーソルの下にある文字列のキャメルケース、スネークケースなどを入れ替える。プラグインをインストールすると勝手にいくつかのキーバインドが登録される。
コマンド | 動作 |
---|---|
crs |
"SnakeCase" → "snake_case" |
crm |
"mixed_case" → "MixedCase" |
crc |
"camel_case" → "camelCase" |
cru |
"upper_case" → "UPPER_CASE" |
おわりに
便利なので使ってみて欲しい。