LoginSignup
105
92

More than 5 years have passed since last update.

検索・置換を便利にするvim-abolish

Last updated at Posted at 2014-12-11

これは Vim Advent Calendar 2014 11日目 の記事です。


日頃Railsを書いている。その際vim-abolishが便利なんだけど、日本語記事で紹介されている場面をあまり見ないので紹介したい。

インストール

インストールはいつものとおりVundleやNeoBundleで。

NeoBundle 'tpope/vim-abolish'

3つ機能

ところでvim-abolishは大きく分けてAbbreviationSubstitutionCoercionの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"

おわりに

便利なので使ってみて欲しい。

105
92
2

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
105
92