unite.vim の action について理解する
この記事は Vim Advent Calendar 2012 308日目の記事になります。
今回は unite.vim の action について簡単に説明してみようかと思います。
[unite.vim の action とは]
action とは、unite.vim で出力される候補に対して処理を行う為の機能です。
候補を選んで、
通常、unite.vim は選択した候補に対して action を実行する事でその候補に処理を行います。
この action は様々な場所で使用されています。
例えば、デフォルトの action(候補を選択して
" 候補を選択して <CR> すると新しいタブページでファイルを開く :Unite file -default-action=tabopen
のように action を指定して挙動を制御する事ができます。
上記の場合は "tabopen" が action に当たります。
unite.vim がデフォルトで用意している action は
:help unite-actions
で確認する事ができます。
[unite-kind について]
action は大きく分けて unite-source と unite-kind に属します。
unite-source はその名の通り unite-source に属する action になります。
unite-source を作成する場合にその unite-source 固有の操作を行うときに定義する事が多いです。
一方、unite-kind は、複数の action を種類ごとに1つにまとめたものになります。
例えば kind-file はファイル操作に関する action(rename や copy)があり、kind-buffer であればバッファに関する action(delete や open)があります。
この unite-kind は unite-source を作成する場合に利用でき、候補に対して kind を設定することでその kind の action を使用する事ができます。
例えば、候補がファイルであれば kind-file を設定することで rename や copy などのファイル関連の action を行うことができるようになります。
[action を定義する]
action はユーザからでも定義して使用する事ができます。
と、いう事で上記のサイトにも書かれている :verbose を unite-mapping から呼び出す action を定義してみたいと思います。
let s:action = { \ 'description' : 'verbose', \ 'is_selectable' : 1, \} function! s:action.func(candidates) for candidate in a:candidates execute "verbose map" substitute(candidate.action__mapping, '\\\(<.*>\)', '\1', "g") endfor endfunction " kind ではなくて source の mapping に対して action を設定する call unite#custom#action('source/mapping/*', 'verbose', s:action) " preview(pキー)で action を実行したい場合は " call unite#custom#action('source/mapping/*', 'preview', s:action)
こんな感じで unite-mapping に action を設定出来ました。
unite.vim は action の使い方や設定方法、拡張方法などを覚えると応用範囲がグッと広がるので活用してみるとよいと思います。