2010年12月3日金曜日

Unite.vim は anything.el の夢を見るか。

Unite.vim を本格的に導入してみたのではまった点などをメモ。

Unite.vim は Shougo さんのプロダクトで、Emacs の anything.el に近い哲学で開発されている Vim のプラグインです。
開発は GitHub で行われており、誰でも最新のコードに触れることが出来ます。
https://github.com/Shougo/unite.vim

最初にはまったのは、AutoComplPop との相性で、インサートモードで補完しようとして、まともに入力出来なくなったり、パスが補完されてしまい、インサートモードを抜けないと、リストの更新がされなかったりと、まともに使えるような状況じゃありませんでした。

そこで、以下のようにしてラッパコマンドを作って呼ぶことで回避しています。
function! UniteWrapper(command, sources)
  silent execute 'AutoComplPopDisable'
  silent execute a:command . ' -prompt=:)\ -buffer-name=files ' . a:sources
endfunction
command! -nargs=* UniteWrapper call UniteWrapper(<f-args>)

ついでなのでいくつかオプションを指定しています。
'-prompt=:)\ ' とすることで、プロンプトをかわいらしい顔文字に出来ます。
ただし、i_>plug<(unite_move_head) が動作しなくなるという問題があった結構致命的です。
'-buffer-name=files' では、Unite バッファ名を指定しています。
これをすると良いことがあるので、後程触れます。
以下のように使います。
nnoremap   :UniteWrapper Unite file\ file_mru  

これで、>c-n< をタイプすると、file, file_mru ソースを使用して Unite を起動出来ます。
ただ現状は、neocomplcache に乗り換えたため、これは無意味になりました。

次に嵌ったのが、~/ とか ../ と入力してもシェルみたく展開してくれない点です。
これは、実は Unite バッファ名毎に展開の設定を持っており、そこで設定する必要があったのです。
とりあえず、 '-buffer-name=files' しておくと最低限の展開をしてくれるようになります。
これひとつで使い勝手がだいぶ変りますのでマストな設定です。

僕は追加で after/ftplugin/unite.vim で以下のように設定しています。
call unite#set_substitute_pattern('files', '^@@', '\=fnamemodify(expand("#"), ":p:h")."/*"', 2)
call unite#set_substitute_pattern('files', '^@', '\=getcwd()."/*"', 1)
call unite#set_substitute_pattern('files', '^\\', '~/*')

call unite#set_substitute_pattern('files', '^v:', '~/.vim/*')
call unite#set_substitute_pattern('files', '^p:', '~/projects/*')

このあたりは thinca さんの http://d.hatena.ne.jp/thinca/20101027/1288190498 が、わかりやすくておすすめです。

さらに深く使うための情報源についてですが、これは Unite.vim のドキュメントが神クオリティなため、とりあえず、:help unite すると良いと思います。
(~/.vim/doc に unite.jax を置いて、 :helptags ~/.vim/doc)

また、プラグイン情報は https://github.com/Shougo/unite.vim/wiki/unite-plugins にまとまっていますので、こちらがお勧めです。
拙作の unite-grep も掲載していただいています。unite-neco が神なので入れるべきです。
ちなみに、プラグインは ~/.vim/autoload/unite/sources に配置すると自動的に読み込まれます。

Lingr の vim-users.jp には、SHougo さんをはじめ vim 界の神たちがたむろしているので、のぞいているといろいろ情報が入ると思います。

0 件のコメント:

コメントを投稿