unite-anzu つくった
この記事は Vim Advent Calendar 2012 336日目の記事になります。
Vim Advent Calendar 2013 の募集も開始しました。
興味のある方はぜひご参加下さい。
また、2012 の参加者もまだまだ募集中ですよ!
- 元ネタ
unite-line でおk、という気がしたんですが確かに 60万行近いバッファだと確かにレスポンスが悪かったのでつくってみました。
つくるにあたって anzu.vim の処理が流用できそうだったのでそのまま unite-anzu にしました。
[使い方]
" 起動した {pattern} にマッチする行を unite.vim に出力する Unite anzu:{pattern} " 引数がない場合は @/ を参照する Unite anzu " 行を短縮表示ではなくて、折り返し表示する場合は -wrap を追加 Unite -wrap anzu
[anzu.vim のパフォーマンス]
と、いうお達しがあったのでちょっと測ってみました。
あくまでも目安として参考にして下さい。
- / で検索後に n で移動した時の処理時間
行数 | 1回目 | 2回目以降 | マッチ数 |
---|---|---|---|
10万行 | 0.1596ms | 0.0020ms | 798 |
50万行 | 0.9787ms | 0.0072ms | 3990 |
50万行 | 0.3089ms | 0.0153ms | 30 |
100万行 | 3.3217ms | 1.2757ms | 7980 |
100万行 | 0.6381ms | 0.0156ms | 60 |
150万行 | 5.1963ms | 1.8096ms | 11970 |
150万行 | 0.9269ms | 0.0155ms | 90 |
" Vim の設定 " anzu.vim のマッチ数の上限 let g:anzu_search_limit = 1000000 " 古い正規表現エンジンを使用 set re=1 nmap n <Plug>(anzu-n)
anzu.vim のレスポンスは1回目は行数に、2回目以降はマッチ数に比例します。
anzu.vim は結果をキャッシュしているので、バッファの内容に変更がなければ2回目以降は処理が早いです。
行数が多くてもマッチ数が少なければそこまで重くは感じないと思います。
ちなみに unite-anzu も同様に2回目以降であればすぐに起動します。