おかゆ++

IT業界の片隅で生き残るブログ

Vim上でDeniteでagでQuickfixぽくgrepしたい

とても頭の悪そうなタイトルですが、やりたいことは書いてあるとおりです。

※注意:Vimと書いてますが基本NeoVimでしか確認してないです。

参考にした記事

ほぼ書いてあるまんまです。

qiita.com

vimgrep hoge **/*.* | cw のときみたいに、Quickfixっぽい感じで表示したり、 grepにマッチした箇所を順番に巡ったりしたい。

agにする

grep じゃなくて ag を使うように設定します。ag 使ったこと無いけど……

call denite#custom#var('file_rec', 'command', ['ag', '--follow', '--nocolor', '--nogroup', '-g', ''])
call denite#custom#var('grep', 'command', ['ag'])
call denite#custom#var('grep', 'recursive_opts', [])
call denite#custom#var('grep', 'pattern_opt', [])
call denite#custom#var('grep', 'default_opts', ['--follow', '--no-group', '--no-color'])

:Denite grep と :Denite -resume のショートカットを作る

  • :Denite grep -buffer-name=hogegrep結果のバッファに名前をつける
  • :Denite -resume -buffer-name=hoge:対応する名前のバッファを開き直す
  • :Denite -resume -buffer-name=hoge -select=+1 -immediately:次のマッチ位置へジャンプ
  • :Denite -resume -buffer-name=hoge -select=-1 -immediately:前のマッチ位置へジャンプ

ということで、これらを簡単に呼び出せるようにしておけば良いみたいです。

参考記事では <C-u>g などに割り当てていますが、個人的にはコマンドを作る方が好きです。

" grepする
command! Dgrep execute(":Denite grep -buffer-name=grep-buffer-denite")
" Denite grep結果を再表示する
command! Dresume execute(":Denite -resume -buffer-name=grep-buffer-denite")
" resumeしたgrep結果の次の行の結果へ飛ぶ
command! Dnext execute(":Denite -resume -buffer-name=grep-buffer-denite -select=+1 -immediately")
" resumeしたgrep結果の前の行の結果へ飛ぶ
command! Dprev execute(":Denite -resume -buffer-name=grep-buffer-denite -select=-1 -immediately")
  • :Dgrep:grepする
  • :Dresume:grep結果を再度開く
  • :Dnext:次のgrep結果
  • :Dprev:前のgrep結果