新年度から使いたい Vim プラグイン:textobj プラグイン編

前回

はじめに : Vim プラグインを管理するプラグイン

プラグインを導入する前にプラグインを管理するプラグインを入れましょう。

使い方などはドキュメントやここら辺を参考にするとよいでしょう。 また、他のプラグイン管理プラグインには以下のようなものもあります。

neobundle.vim があわないと感じたらこの2つも試してみるとよいと思います。
特に vim-pathogen は単純な管理システムで git に依存しないので git を使いたくない方は vim-pathogen を使うとよいでしょう。

あと今回は紹介するプラグインのほとんどが以下のプラグインに依存しているので、予め導入しておくとよいでしょう。

NeoBundle 'kana/vim-textobj-user'

osyo-manga/vim-textobj-multiblock

textobj-multiblock は i(i"i[ などを統一の textobj として扱う事ができる textobj です。
デフォルトでは isbasb にキーマッピングが割り当てられています。

Vim の textobj で括弧内を指定する場合、() 内なら i("" 内なら i" と使い分ける必要があります。
しかし、textobj-multiblock を利用すると isb でカーソル位置から一番近い ("[ などが対象となり、i(i" などを使い分ける必要がなくなります。
ハマるとかなり便利な textobj なので、ぜひ 1度試してみるとよと思います。
その他、設定方法などは以下のサイトを参照してください。

参照

osyo-manga/vim-textobj-from_regexp

NeoBundle 'osyo-manga/vim-textobj-from_regexp'

vim-textobj-from_regexp は任意の正規表現パターンにマッチする範囲を対象とする textobj です。
どういうことかというと、例えば yin でカーソル下の数値をヤンクできるようにしたい場合に、

omap <expr> in textobj#from_regexp#mapexpr('\d\+')

と設定するとカーソル下の数値(\d\+ にマッチするテキスト)を対象とした textobj となります。
これを設定しておけば operator + in でカーソル下の数値を対象とした操作を行う事ができます。

こんな感じに正規表現で手軽に textobj を定義することができます。
わたしは以下のようなマッピングを行ない iw と差別化を行っています。

" 設定例
" 英数字 + _ を対象とした textobj
omap <expr> i<C-w> textobj#from_regexp#mapexpr('\w\+')
xmap <expr> i<C-w> textobj#from_regexp#mapexpr('\w\+')

" 英数字のみを対象とした textobj
omap <expr> i<A-w> textobj#from_regexp#mapexpr('[A-Za-z0-9]\+')
xmap <expr> i<A-w> textobj#from_regexp#mapexpr('[A-Za-z0-9]\+')
参照

sgur/vim-textobj-parameter

NeoBundle 'sgur/vim-textobj-parameter'

textobj-parameter は関数の引数を対象とした textobj です。
デフォルトでは i,a, にキーマッピングが割り当てられています。
現在位置の関数引数を削除したいと思うことが結構あるので割と重宝しています。

参照

glts/vim-textobj-comment

NeoBundle 'glts/vim-textobj-comment'

その名の通りコードのコメント部分を対象とした textobj です。
デフォルトでは i,a, にキーマッピングが割り当てられています。
コメントを操作するプラグインはいくつか合ったと思うんですが、わたしはこれを(これも)使っています。
コメントアウトを一括で削除したい時とかに便利。

osyo-manga/vim-textobj-blockwise

NeoBundle 'osyo-manga/vim-textobj-blockwise'

textobj-blockwise は矩形を対象とするための textobj です。
矩形というのは、例えば、

" 連続してる複数行の 'textobj' という単語を削除したい
omap ab <Plug>(textobj-multiblock-a)
omap ib <Plug>(textobj-multiblock-i)
vmap ab <Plug>(textobj-multiblock-a)
vmap ib <Plug>(textobj-multiblock-i)

と、いう場合に textobj という単語を矩形オブジェクトとして一括で操作することができます。
上記の例では一番上の textobj にカーソルを合わせて dIwiI にする)を入力すると textobj という単語が一括で削除できます。
デフォルトのキーマッピングでは、組み込みの textobj の ia を大文字の IA にすると矩形の範囲になります。
詳しくは以下の記事を参照してください。

参照

まとめ

書いてみたら半分以上自分でつくったプラグインだった。
冒頭でも書きましたが Vim の textobj は強力な機能の一つです。
まだ textobj に慣れてない方はぜひ、この機会に少し調べてみるとよいでしょう。
今回は少ししか紹介しませんでしたが、textobj 系のプラグインはまだまだたくさんあるので、気になる方は以下のページを見てみるとよいと思います。 次回は operator のプラグインを紹介します。

参照