unite.vimでテキトーにファイルやディレクトリを開く
Vimでunite.vimを使ってファイルを開いたり、ディレクトリに移動したりするのを楽にしたいと思って書いた設定について。
ファイル
ctrlp.vimというのが似たようなことをやってくれるプラグインらしいが、unite.vimで出来そうだったのでだいぶ前に書いたやつ。
" yankroundが有効な場合は前の候補へ、yankroundが有効でない場合はUniteを実行する
nmap <expr><C-p> yankround#is_active() ? "\<Plug>(yankround-prev)" : ":<C-u>execute
\ 'Unite'
\ '-start-insert'
\ 'buffer file_mru'
\ 'file:'.fnameescape(expand('%:p:h'))
\ (isdirectory(getcwd().'/.git') ?
\ 'file_rec/git:--cached:--others:--exclude-standard' :
\ 'file_rec/async')
\ <CR>"
yankroundを使っているのでそれの処理が入っている。
カレントディレクトリによってfile_rec/git
かfile_rec/async
かを切り替えるのはfile_rec/asyncとfile_rec/gitを自動的に切り換えるを参考にした。
これで<C-p>
を押すとバッファ、ファイル履歴、カレントディレクトリのファイル、カレントディレクトリ以下のファイルをテキトーに絞り込んで開ける。
ちなみに30,000ファイル近くあるリポジトリではunite.vimのウィンドウを表示するのにそれなりに良いスペックのMacBook Proでも数秒かかるので、検索しなくて良いディレクトリやVimで開くことはないであろうファイルは除外しておくとかなり早く開けるようになる。
let s:unite_ignore_file_rec_patterns=
\ ''
\ .'vendor/bundle\|.bundle/\|\.sass-cache/\|'
\ .'node_modules/\|bower_components/\|'
\ .'\.\(bmp\|gif\|jpe\?g\|png\|webp\|ai\|psd\)"\?$'
call unite#custom#source(
\ 'file_rec/async,file_rec/git',
\ 'ignore_pattern',
\ s:unite_ignore_file_rec_patterns)
ディレクトリ
<C-p>
でテキトーにファイルを開けるようになったのだけど、ディレクトリもテキトーに移動したいと思い最近追加した設定。<C-p>
がファイルなのでとりあえず隣の<C-@>
にしておいた。
nnoremap <C-@> :<C-u>Unite
\ -start-insert -default-action=vimfiler
\ directory directory_mru directory_rec/async
\ <CR>
テキトーに絞り込んだディレクトリをVimFilerで開ける。
これもファイルと同じく表示する必要のないディレクトリは除外しておくとかなり早く開けるようになる。
let s:unite_ignore_directory_patterns=
\ ''
\ .'vendor/bundle\|.bundle/\|\.sass-cache/\|'
\ .'node_modules/\|bower_components/'
call unite#custom#source(
\ 'directory_mru,directory_rec/async',
\ 'ignore_pattern',
\ s:unite_ignore_directory_patterns)
ちなみにunite.vimのヘルプにもあるg:unite_source_rec_async_command
にpt
コマンドを指定すると、二度目以降ディレクトリの他にファイルが混ざる。
@sasaplus1 oh
ptの動作は最近確認できてないですが、妙な動作をしていました。asyncには使わないことを勧めます
— 暗黒美夢王(暗黒美夢女王募集中) (@ShougoMatsu) 2015, 3月 27
具体的には以下のような設定。
let g:unite_source_rec_async_command='pt --nocolor --nogroup -g .'
ファイルやディレクトリの列挙だけなら標準のfind
の方が速いので、g:unite_source_grep_command
だけにpt
を指定するようにした。
最近はVimを全然いじっていなかったのだけど、またこれで少し快適になる気がする。一方でカスタマイズしすぎたVimにどんどん依存していっていることになるのだけど……