Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

これは 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"

おわりに

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles