ripgrepのVIM連携まわり(Unite/qfixhowm/fzf/Ctrlp)

ripgrepを導入してVIM周りも固めたい

  • Windowsでも使えるripgrep
  • はやい

わからない

Unite Grepのバックエンドをripgrepにする方法がわからなかった。
そこで、ripgrep+vim周りの情報を集約しておきます。

ripgrepの導入

ripgrepをデフォルトに

if executable('rg')
    set grepprg=rg\ --vimgrep\ --no-heading
    set grepformat=%f:%l:%c:%m,%f:%l:%m
endif

ripgrep + vim

ripgrep + Unite

if executable('rg')
  let g:unite_source_grep_command = 'rg'
  let g:unite_source_grep_default_opts = '-n --no-heading --color never'
  let g:unite_source_grep_recursive_opt = ''
  " Hit件数制御したいなら以下
  let g:unite_source_grep_max_candidates = 200
  " Windowsなら
  let g:unite_source_grep_encoding='utf-8'
endif

ripgrep + qfixhowm

" ripgrepを使う(PATHは通してある前提)
let mygrepprg = 'rg'
let myjpgrepprg = 'rg'
" マルチエンコーディングgrepを使用する
let MyGrep_MultiEncoding = 1
" マルチエンコーディングgrepで使用するエンコーディングリスト
let MyGrep_MultiEncodingList = ['utf-8', 'cp932']
" 外部grep(shell)のエンコーディング(Windows)
let MyGrep_ShellEncoding = 'utf-8'
" 以下、上記URL参考
" 実行時のオプションをripgrep用に変更(GNU Grepと同じ出力になるように)
let MyGrepcmd_useropt='-nH --no-heading --color never'
let MyGrepcmd_regexp=''
let MyGrepcmd_regexp_ignore='-i'
let MyGrepcmd_fix='-F'
let MyGrepcmd_fix_ignore='-F -i'
let MyGrepcmd_recursive=''
" gipgrepにファイルパターンとして「*」「*.*」を渡したらエラーになったのでその対策
let MyGrep_GrepFilePattern='.'

ripgrep + CtrlP

"ctrlP"{{{
if executable('rg')
  let g:ctrlp_user_command = 'rg --files %s'
  let g:ctrlp_use_caching = 0
  let g:ctrlp_working_path_mode = 'ra'
  let g:ctrlp_switch_buffer = 'et'
endif

or

if executable('rg')
  let g:ctrlp_use_caching = 0
  "let g:ctrlp_user_command = 'cd %s && rg "" -i -r --no-color -l ./**/*'
  let g:ctrlp_user_command = 'rg %s --files --color=never --glob ""'
endif

ripgrep + fzf

" Similarly, we can apply it to fzf#vim#grep. To use ripgrep instead of ag:
command! -bang -nargs=* Rg
  \ call fzf#vim#grep(
  \   'rg --column --line-number --no-heading --color=always '.shellescape(<q-args>), 1,
  \   <bang>0 ? fzf#vim#with_preview('up:60%')
  \           : fzf#vim#with_preview('right:50%:hidden', '?'),
  \   <bang>0)

ripgrep + denite