はじめのはじめに
この記事は denite.nvim + ag
と銘打ってありますが、おそらく他のファイル列挙ツール(ripgrep
など)とも連携できると思います。
はじめに
vim 使ってますか?
僕は IntelliJ を試したりをしたけど、やっぱり vim になりました。
PHP を書く時だけは未だに PHPStorm ですが。。。
今回はすでに高速な denite.nvim の file/rec を爆速にする設定を紹介します。
対象読者
- 頭の悪いファイル数なプロジェクトで file/rec が遅くて困っている
- denite.nvim を使っている
- denite.nvim の matcher/ignore_globs を設定している
- してないならしましょう!
設定
普通はこう設定していると思います。(ドキュメントにも書いてあるし!)
" file/rec に ag を設定call denite#custom#var('file/rec','command',['ag','--follow','--nocolor','--nogroup','-g',''])" 特定ディレクトリをリスティングしないcall denite#custom#filter('matcher/ignore_globs','ignore_globs',['.git','.svn','node_modules'])
この設定では「一度 ag で列挙してからフィルタで非表示にする」という状態です。
メンタルモデルとしてはわかりやすいのですが、端的にいうとエコじゃないです。
下記の設定に変えたところ爆速になりました。
lets:ignore_globs=['.git','.svn','node_modules']" そもそも ag のレベルで検索対象からはずすcall denite#custom#var('file/rec','command',[ \'ag', \'--follow', \]+ map(deepcopy(s:ignore_globs),{k,v->'--ignore='.v})+[ \'--nocolor', \'--nogroup', \'-g', \'' \])" matcher/ignore_globs 以外のお好みの matcher を指定するcall denite#custom#source('file/rec','matchers',['matcher/substring'])" 他のソース向けに ignore_globs 自体は初期化call denite#custom#filter('matcher/ignore_globs','ignore_globs',s:ignore_globs)
終わりに
こういう tips を定期的に投げていこう運動やってます。