VS Codeでもtelescope.nvimのlive_grepみたいなことがしたい
はじめに
VS Code, telescope.nvimのgrepの紹介
VS Codeのgrep
皆さん、VS Codeのgrep(全文検索)は使ってますか?
サイドバーで手軽に検索!
メインパネルでじっくり検索!
いずれも、正規表現や置換にも対応していて便利です。
内部的にはrg(rip grep)が使われているそうで、動作も軽快!
telescope.nvimのlive_grepとは
vim自身や、そのプラグインにも検索機能はいろいろあります。
特に、telescope.nvimはneovim界隈でデファクトスタンダードと言えるぐらい人気なファインダーです。
このtelescope.nvimで、全文検索はlive_grepとして提供されており、動きはこんな感じ
grepが爆速にリアルタイムに反映されて、プレビューも見られる。
そして何よりカッコ良い
これに比べると山岡さんのgrepはカスや......
本題: VS Codeでもlive_grepしたい
方針は以下
- CLIで動作するlive_grep的なものを用意する
- VS Codeのターミナルから1.を使う
CLIなlive_grepを用意する
欲しいやつ
先述のtelescope.nvimはその名の通りneovim拡張なので、CLIで呼び出せるものが欲しいです。
rgでgrepして、fzfで検索、batでプレビューをしたいだけなので、ざっくり言えば↓。
fzf --preview "bat <filename>" --bind "change:reload:rg <query>"
できたやつ
Roo Code, Claude 3.5 Sonnetが一晩でやってくれました。しかも立派なドキュメント付き。
良い感じにオプションなどを解釈しながら、上述のrg→fzf→batを連携するコマンドを実行してくれます。
※ 現状は正規表現に対応してないので、grepと言うのは実は嘘です
VS Codeで叩けるようにする
あとはショートカットキーを設定するだけ!と思ってたのですが、ここからわりと手間でした。
設定の方針
やりたいことはショートカットキーが押された際に以下を実行するだけなのですが、VS Code標準の機能では無理でした。
- ターミナルを最大化して開く
-
code --reuse-window $(live-grep)
を実行する
なので以下の拡張機能を使いました
-
multi-command
ショートカットキーでコマンド実行できるようになります -
Command Runner
一つのショートカットキーで複数アクションできるようになります
いずれにも圧倒的感謝しつつ、以下のような設定ファイルを作成。
Ctrl+Shift+F
でターミナルが最大化された状態で開き、live-grepが始まります。
{
"key": "ctrl+shift+f",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"workbench.action.terminal.focus",
"workbench.action.toggleMaximizedPanel",
"workbench.action.terminal.clear",
{
"command": "command-runner.run",
"args": {
"command": "clear && code --reuse-window -g $(live-grep -n)",
"terminal": "runCommand"
}
}
]
}
}
完成!!
動きはこんな感じ
欲しかったやつ!!!
導入手順まとめ
正直これから実際に使ってメンテしていくような段階なので、人に勧められるような状態ではないです。
1. 依存ツール群のインストール
以下三つ
live-grep-cliをインストール
2.mkdir -p "${XDG_BIN_HOME:-$HOME/.local/bin}" && curl -fsSL https://raw.githubusercontent.com/ymat19/live-grep-cli/main/live-grep -o "${XDG_BIN_HOME:-$HOME/.local/bin}/live-grep" && chmod +x "${XDG_BIN_HOME:-$HOME/.local/bin}/live-grep"
# PATHを通す(XDG準拠のパスらしいが、通ってない人の方が多いと思う)
export PATH="${XDG_BIN_HOME:-$HOME/.local/bin}:$PATH"
3. 必要なVS Code拡張機能のインストール
以下二つ
4. keybindings.jsonに設定追加
{
"key": "ctrl+shift+f",
"command": "extension.multiCommand.execute",
"args": {
"sequence": [
"workbench.action.terminal.focus",
"workbench.action.toggleMaximizedPanel",
"workbench.action.terminal.clear",
{
"command": "command-runner.run",
"args": {
"command": "clear && code --reuse-window -g $(live-grep -n)",
"terminal": "runCommand"
}
}
]
}
}
感想
ここまで読んでいただきありがとうございました!
知り合いに勧められて、Roo Code初めて使ったんですが凄いですね。
今回のようなちょっとしたものを作るハードルが下がって嬉しい反面、職を奪われそうで怖いです。
今回はCLIツールを組み合わせるだけという、簡易なスクリプトを書いてもらいましたが、多分Rustでrgのライブラリを使うような実装ももRoo Codeでいけそう?
もしそうならパフォーマンスはもっと上がるはずで、残る問題は私がRustを読めないことだけになってしまいます。
参考
Discussion