Zenn
🔍

VS Codeでもtelescope.nvimのlive_grepみたいなことがしたい

2025/03/18に公開

はじめに

VS Code, telescope.nvimのgrepの紹介

VS Codeのgrep

皆さん、VS Codeのgrep(全文検索)は使ってますか?

vscode-grep-side

サイドバーで手軽に検索!

vscode-grep-main

メインパネルでじっくり検索!

いずれも、正規表現や置換にも対応していて便利です。
内部的にはrg(rip grep)が使われているそうで、動作も軽快!

telescope.nvimのlive_grepとは

vim自身や、そのプラグインにも検索機能はいろいろあります。
特に、telescope.nvimはneovim界隈でデファクトスタンダードと言えるぐらい人気なファインダーです。

このtelescope.nvimで、全文検索はlive_grepとして提供されており、動きはこんな感じ

live-grep-telescope

grepが爆速にリアルタイムに反映されて、プレビューも見られる。

そして何よりカッコ良い

これに比べると山岡さんのgrepはカスや......

本題: VS Codeでもlive_grepしたい

方針は以下

  1. CLIで動作するlive_grep的なものを用意する
  2. 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が一晩でやってくれました。しかも立派なドキュメント付き。
https://github.com/ymat19/live-grep-cli/tree/main

良い感じにオプションなどを解釈しながら、上述のrg→fzf→batを連携するコマンドを実行してくれます。

live-grep-cli

※ 現状は正規表現に対応してないので、grepと言うのは実は嘘です

VS Codeで叩けるようにする

あとはショートカットキーを設定するだけ!と思ってたのですが、ここからわりと手間でした。

設定の方針

やりたいことはショートカットキーが押された際に以下を実行するだけなのですが、VS Code標準の機能では無理でした。

  1. ターミナルを最大化して開く
  2. 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"
        }
      }
    ]
  }
}

完成!!

動きはこんな感じ

vscode-live-grep

欲しかったやつ!!!

導入手順まとめ

正直これから実際に使ってメンテしていくような段階なので、人に勧められるような状態ではないです。

1. 依存ツール群のインストール

以下三つ

2. live-grep-cliをインストール

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拡張機能のインストール

以下二つ
https://marketplace.visualstudio.com/items?itemName=ryuta46.multi-command
https://marketplace.visualstudio.com/items?itemName=edonet.vscode-command-runner

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を読めないことだけになってしまいます。

参考

https://zenn.dev/nekoya/articles/8e9d107fb261f0

GitHubで編集を提案

Discussion

ログインするとコメントできます