Vim Advent Calendar 2012 ujihisa 3
Posted at 2013/02/20ツイート
Vim Advent Calendar の 82 日目の記事です。 昨日はthincaさんによるLive Coding で painter.vim(仮) 作ったで、業界に衝撃が走りました。僕も勤務先の会社で「友達が作ったんだぜ、すごいだろ」とどや顔で披露しました。
本記事はpainter.vimとはまるで違う、地味なトピックです。
unite-file_rec
unite.vim標準のsourceであるfile_rec
は以下の正規表現にマッチする候補を無視します。
\%(^\|/\)\.$\|\~$\|\.\%(o\|exe\|dll\|bak\|sw[po]\|class\)$\|\%(^\|/\)\%(\.hg\|\.git\|\.bzr\|\.svn\|tags\%(-.*\)\?\)\%($\|/\)
たとえば.gitというディレクトリを見つけると、それ以下のファイル/ディレクトリを探索しないようになります。このおかげで探索、つまりキャッシュ作成がとても速くなります。
無視するパターンの変更
上記無視リストを別のパターンで上書きしたいときは、unite#custom_source()
を使います。
たとえば”target”という名前に完全一致するディレクトリがあるときはそれ以下のファイルをすべて無視したいときは、~/.vimrc
に以下のように記述します。
call unite#custom_source('file_rec', 'ignore_pattern', '\<target\>')
この場合、前述のデフォルトの無視リスト(.gitなど)は上書きされるため、:Unite file_rec
は.git以下の膨大量のファイルも探索します。
無視するパターンの追加
デフォルトのパターンを用いつつ、無視するパターンを新たに追加したい場合、以下のように一つの大きな別の正規表現を作ることで対処できます。
call unite#custom_source('file_rec', 'ignore_pattern', '\%(^\|/\)\.$\|\~$\|\.\%(o\|exe\|dll\|bak\|sw[po]\|class\)$\|\%(^\|/\)\%(\.hg\|\.git\|\.bzr\|\.svn\|tags\%(-.*\)\?\)\%($\|/\)\|\<target\>')
しかし
- 可読性に問題あり
- unite本家のデフォルトの
file_rec
のignore_pattern
が変更されたときにいちいち手動で追従しないといけないのが大変
などの問題点があります
解決
デフォルトのignore_pattern
を取得して、その後文字列として結合します。以下のように~/.vimrc
に記述します。
call unite#custom_source('file_rec', 'ignore_pattern', (unite#sources#file_rec#define()[0]['ignore_pattern']) . '\|\<target\>')
まず前提として、Vimが~/.vimrc
を読み込んで実行しているときには、まだuniteそのものも、file_rec
sourceも初期化されていません。なのでまずunite#sources#file_rec#define()
を用いて強制的に初期化させ、デフォルトのignore_pattern
を生成させます。次にその返り値をそのまま使います。
もどる
blog comments powered by Disqus