ripgrepを導入する

  • shell

動機

  • 速い
    • README にも書いてあるけど、ベンチマーク見る限りエグいぐらい速い
    • 正直 grep にそこまで不満があるわけでもないが、そこまで言われると体感してみたい

作業

この勢いに乗って、そのまま zplug で導入していく。

# ripgrep
zplug "BurntSushi/ripgrep", \
  from:gh-r, \
  as:command, \
  rename-to:rg

導入自体はこれで終わりなんだけど、ついでに fzf + ripgrep で爆速検索できるようにしてみる。これは fzf の README に載っているので、素直にやっていく。

# interactive ripgrep
fzgrep() {
  INITIAL_QUERY=""
  RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case "
  FZF_DEFAULT_COMMAND="$RG_PREFIX '$INITIAL_QUERY'" \
    fzf --bind "change:reload:$RG_PREFIX {q} || true" \
        --ansi --phony --query "$INITIAL_QUERY" \
        --preview 'cat `echo {} | cut -f 1 --delim ":"`'
}

基本的にコピペだけど、 bat はとりあえずいいやと思ったので cat で代用している。シンタックスハイライトが欲しくなったら考えよう。

爆速である。一切インデックスを使わずファイルを全文検索してこの速度がでるのか。すげー。

さっそく Vim と連携していく。init.vim に以下を追記した。

" :grep で ripgrep つかうやつ
if executable("rg")
    let &grepprg = 'rg --vimgrep --hidden > /dev/null'
    set grepformat=%f:%l:%c:%m
endif

これで Vim 内部から :grep [pattern] で ripgrep を利用したファイル検索を行うことができるようになる。

爆速である。はやすぎワロタである。これで記憶力に頼ることなく気軽に全文検索をかけまくって作業ができるようになった。ヨシ!