VimFiler で NERDTree のような Explorer を快適に実現する方法

導入

vim を使い始めた最初の頃、 NERDTree というプラグインを知った。
NERDTree を導入してから vim にのめり込んでいった気がする。

NERDTree というのは、いわゆるファイラーの機能を実現するプラグインで、Windows のエクスプローラに非常に近い直感的な使い勝手ですごく気に入っていた。


今は VimShell や Unite を使い始めて、それらとの親和性が非常に高く(もはや融合してる)、機能も豊富な VimFiler に乗り換えてる。


ただ、NERDTree の「エクスプローラ感」はかなり自然だったので、VimFiler の設定がよくわからない間は結構違和感を感じていた。

本題

VimFiler でも超快適なエクスプローラとして使えるし、機能の豊富さや更新の速さなどを考えると VimFiler がおすすめということで、
NERDTree から VimFiler に移行する人向けに設定とかを残す。

インストール

まずはインストールしないとはじまらないので、VimFiler をインストールする。
VimFiler は同じ作者のプラグインである Unite に依存しているので、そちらも導入する。


※ 「とりあえず必要だから Unite も入れよう」っぽく見えますが、Unite も本当に便利なのでガンガン使いましょう。


導入後、vim で :VimFiler コマンドを試して、ファイラが起動すれば OK。

エクスプローラとして使う為の設定

次に、VimFiler をエクスプローラとして使う為の設定を .vimrc に記述する。

nnoremap <F2> :VimFiler -buffer-name=explorer -split -winwidth=45 -toggle -no-quit<Cr>
autocmd! FileType vimfiler call g:my_vimfiler_settings()
function! g:my_vimfiler_settings()
  nmap     <buffer><expr><Cr> vimfiler#smart_cursor_map("\<Plug>(vimfiler_expand_tree)", "\<Plug>(vimfiler_edit_file)")
  nnoremap <buffer>s          :call vimfiler#mappings#do_action('my_split')<Cr>
  nnoremap <buffer>v          :call vimfiler#mappings#do_action('my_vsplit')<Cr>
endfunction

let s:my_action = { 'is_selectable' : 1 }
function! s:my_action.func(candidates)
  wincmd p
  exec 'split '. a:candidates[0].action__path
endfunction
call unite#custom_action('file', 'my_split', s:my_action)

let s:my_action = { 'is_selectable' : 1 }                     
function! s:my_action.func(candidates)
  wincmd p
  exec 'vsplit '. a:candidates[0].action__path
endfunction
call unite#custom_action('file', 'my_vsplit', s:my_action)

※ nmap や nnoremap は好きなキーに読み替えてください。

使い方

上記のキーマッピングの場合、

  • VimFiler の起動
    • ノーマルモードで を打鍵
  • ファイルを開く
    • VimFiler 上で開きたいファイルを選択してエンターを打鍵
  • ファイルを縦分割で開く
    • VimFiler 上で開きたいファイルを選択して v を打鍵
  • ファイルを横分割で開く
    • VimFiler 上で開きたいファイルを選択して s を打鍵
終わりに

上の設定で NERDTree から VimFiler への移行がスムーズにできる気がする。

自分の場合は他にもカオスなハックを加えたりして自分好みの挙動に変えたりしています。
(例えば vimshell バッファはファイルを開く際に上書きせず残すなど)

低 vimscript 力でこんな記事を書いてしまったけど、
なにか間違いとかあったら指摘してもらえるとキャンキャン喜びます。
(そもそも誰も見てない感あるけど)