Asynchronous grep with denops.vim
相変わらず denops.vim たのしい!
ってことで、また作ってみました。 ripgrep や the_platinum_searcher や jvgrep で非同期に grep できるプラグイン。
Denops Asynchronous Grep -> dps-asyngrep
tsuyoshicho/vim-fg のパクr (じゃなくてインスパイア・・・)
インストール
インストールは dein.vim だとこんな感じ。
- dein.toml
[[plugins]] repo = 'vim-denops/denops.vim' [[plugins]] repo = 'yukimemi/dps-asyngrep' hook_add = ''' " let g:asyngrep_debug = v:true " let g:asyngrep_cfg_path = "~/.asyngrep.toml" nnoremap <space>ss <cmd>Agp<cr> nnoremap <space>sr <cmd>Agp --tool=ripgrep<cr> nnoremap <space>sp <cmd>Agp --tool=pt<cr> nnoremap <space>sj <cmd>Agp --tool=jvgrep<cr> '''
依存として、 denops.vim が必要。(もちろん Deno も。)
また、 grep に使用するツールとして、以下 3 つのどれかは必要。
設定は特に不要だが、上記コメントアウトしているように追加設定は可能。
g:asyngrep_debug
デバッグログ出力有無。デフォルト: v:false
調査で必要な時 v:true
にすると、ログが echomsg
される。
g:asyngrep_cfg_path
後述する grep tool の設定を自分で上書きしたい場合に設定ファイルパスを指定する。
デフォルト: ~/.asyngrep.toml
使い方
インストールすると、 Agp
コマンドが使えるようになる。 (Asynchronous GreP
)
以下の順番でインストールされているツールから、一番最初に見つかったものを使用して検索を行う。
検索は非同期で実行され、見つかったものから逐次 quickfix
に出力される。
(1 行ずつ setqflist
を実行しているので、これは Alisue さん曰く、めちゃめちゃ遅いらしい・・・。 バッファリングについて検討中。)
ツールを個別に指定する場合は、以下のように --tool
オプションで指定する。
:Agp --tool=jvgrep
設定
3 種類のツールは以下設定で定義されている。
[[tool]] name = "ripgrep" cmd = "rg" arg = ["-i", "--vimgrep", "--no-heading"] [[tool]] name = "jvgrep" cmd = "jvgrep" arg = ["-i", "--no-color", "-I", "-R", "-8"] [[tool]] name = "pt" cmd = "pt" arg = ["-i", "--nogroup", "--nocolor"]
なんとなく見てもらえればわかるかなと・・・。
上記の引数を上書きたい場合や別のツールを追加したい場合は自分で設定ファイルを記載する。
~/.asyngrep.toml
[[tool]] name = "ripgrep" cmd = "rg" arg = ["-i", "--vimgrep", "--no-heading", "--hidden", "--no-ignore", "--regexp"] [[tool]] name = "jvgrep" cmd = "jvgrep" arg = ["-i", "--no-color", "-I", "-R", "-8"] [[tool]] name = "default" cmd = "pt" arg = ["-i", "--nogroup", "--nocolor", "--smart-case", "--skip-vcs-ignores", "--hidden"]
name
に default
を指定すると、記載順序関係なく、そのツールがデフォルト (--tool
オプションなし) で使用されるツールになる。
上記の場合は引数なしの Agp
で the_platinum_searcher が使用されるようになる。
こんなツールも denops.vim を使えばサクッと作ることができてひじょーにべんり。
作るの自体は本当 1 日でサクッといけたんだけど、ちょっと Vim と Neovim で挙動が異なるところがあり、どうにも解決できずに vim-jp slack で質問したところ、 Alisue さんがサクッとプルリクくれて直りました。ほんとあざました!感謝。
まだ色々足りてない機能あるのでおいおい追加していきたい。