この資料は Rust 製のコマンドラインツール ripgrep-all について紹介するものです。
Rustの環境構築やツールのインストール方法については以下を参照してください
ripgrep-allはzip, tar.gz, pdf, sqlite3などもripgrepで検索できるツールです。コマンドは rga
となります。
rga は指定したディレクトリ以下を再起的に探索してサポートしているファイルタイプに対して rg を実行した結果を表示してくれます。
これには pandoc などのツールを使用するため、追加でインストールする必要があります。
% sudo apt install pandoc poppler-utils ffmpeg
例えば、次のようなディレクトリ demo があるとします。(実際のディレクトリはリポジトリを参照)
demo
├── greeting.mkv
├── hello.odt
├── hello.sqlite3
└── somearchive.zip
├── dir
│ ├── greeting.docx
│ └── inner.tar.gz
│ └── greeting.pdf
└── greeting.epub
macOSでは内部で呼び出すpandoc でワーニングが出力されます。この問題は Issue に上がっていますが、pandoc側の問題であるためかまだ解決されていません。
rgaはfzfを介して対話的に使用することができます。以下を ~/.{bash,zsh}rc
に追加してください。
rga-fzf() {
RG_PREFIX="rga --files-with-matches"
local file
file="$(
FZF_DEFAULT_COMMAND="$RG_PREFIX '$1'" \\
fzf --sort --preview="[[ ! -z {} ]] && rga --pretty --context 5 {q} {}" \\
--phony -q "$1" \\
--bind "change:reload:$RG_PREFIX {q}" \\
--preview-window="70%:wrap"
)" &&
echo "opening $file" &&
xdg-open "$file"
}