Vim のグローバル変数の一覧を unite.vim で表示させる
この記事は Vim Advent Calendar 2012 199日目の記事になります。
2.g: を使用する
上記のように let を使用するのでもいいのですがちょっと見づらいです。
g: を使用してもうちょっと見栄えをよくしてみました。
:Unite output:echo\ join(map(keys(g\:),"'g\:'.v\:val"),"\\n")
3.alias する
毎回 output に引数を渡すのは手間です。
そういう場合は g:unite_source_alias_aliases で予め設定しておく事が出来ます。
let g:unite_source_alias_aliases = { \ "gvalue" : { \ "source" : "output", \ "args" : 'echo join(map(keys(g:),"''g:''.v:val"),"\n")' \ } \}
このように設定しておくことで
:Unite gvalue
のような使い方が出来ます。
4.変数の値を出力する
さて、これでグローバル変数名で絞り込みを行うことが出来たのですが変数の値も出力したいです。
と、いう事で変数の値を出力する unite-action を定義します。
let s:action = { \ "description" : "output value", \ "is_quit" : 0 \} function! s:action.func(candidate) " vim-prettyprint が使用出来る場合はそちらを使用する if exists("*PP") && 1 execute printf("echo PP(%s)", a:candidate.word) else execute printf("echo string(%s)", a:candidate.word) endif endfunction " とりあえず kind-common に追加 call unite#custom#action('common', 'output_value', s:action)
これで action から output_value を選択すればその変数の値を出力する事が出来ます。
5.変数の値を preview する
unite.vim には preview を行う action があります。
(ユナイトビューティフルアタックでよく使われているアレ。
unite-gvalue を使用する場合、preview 時に output_value を使用するように設定してみましょう。
let s:action = { \ "description" : "output value", \ "is_quit" : 0 \} function! s:action.func(candidate) " vim-prettyprint が使用出来る場合はそちらを使用する if exists("*PP") && 1 execute printf("echo PP(%s)", a:candidate.word) else execute printf("echo string(%s)", a:candidate.word) endif endfunction " unite-gvalue の preview に対して設定を行う call unite#custom_action('source/gvalue/*', 'preview', s:action)
これで
:Unite gvalue -auto-preview
すれば変数の値をプレビューしながら選択することが出来ます。
便利。
6.editvar.vim を使用する
さて、今まで unite.vim を駆使して自力でコードを書いてきたのですが、実は同等の機能を持った editvar.vim というプラグインが既に存在します。
このプラグインを導入すれば、
:Unite variable -auto-preview
で、変数の値を自動プレビューし、更に変数の値をその場で書き換える事も出来ます。
今までの苦労はなんだったのか_(:3 」∠)_
教訓
- Vim でわからないことがあったら Lingr の Vim部屋で発言すると誰かが教えてくれる
- 欲しいと思った機能は既にプラグイン化されている可能性が高い