Vim のグローバル変数の一覧を unite.vim で表示させる

この記事は Vim Advent Calendar 2012 199日目の記事になります。

1.:Unite output:let

Shougo さんが速攻で返信しました。
unite-output 便利過ぎる。

2.g: を使用する

上記のように let を使用するのでもいいのですがちょっと見づらいです。
g: を使用してもうちょっと見栄えをよくしてみました。

:Unite output:echo\ join(map(keys(g\:),"'g\:'.v\:val"),"\\n")


これでグローバル変数名"は" unite.vim で出力する事が出来ました。

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部屋で発言すると誰かが教えてくれる
  • 欲しいと思った機能は既にプラグイン化されている可能性が高い