DEV Community

Cover image for Claude Code 實戰守則:把「看起來對」換成「可以查證」
Yang Goufang
Yang Goufang

Posted on

Claude Code 實戰守則:把「看起來對」換成「可以查證」

一句話摘要: 在 Claude Code 裡,ripgrep 的價值不是快幾毫秒,而是讓 agent 少讀錯幾個檔案。

1. rg 就是 ripgrep,用哪個 rg 決定搜尋是否真的在跑

rg 是 ripgrep 的執行檔名稱。Claude Code 預設走捆綁的 Node wrapper;要讓 Grep 工具走你本機的 rg,設 USE_BUILTIN_RIPGREP=0

rg --version           # 看真正生效的是哪個
which -a rg            # 比對 PATH 順序
Enter fullscreen mode Exit fullscreen mode

這次環境:系統 rg 13.0.0 → 升級到 15.2.0 置於 ~/.local/bin/rg~/.local/bin 在 PATH 首位)。Claude Code 的 settings.json~/.zshrc 兩處皆設 USE_BUILTIN_RIPGREP=0;重開 Claude Code 後生效(已知有忽略設定檔的舊回報,實測以 which rg 為準)。

文件陷阱:官方有寫在 env-vars 頁(Set to 0 to use system-installed rg),但 settings 頁沒有——只查一處就會誤判為「未文件化」。

2. README 上的「更快」不是證據

一份主張 ripgrep 已不是最快的清單,七個替代品逐一查(2026-08-25,crates.io + GitHub API):

清單上的宣稱 查證結果
frg「每種模式都比 rg 快」 qhkm/fastripgrep 約 ★14,建立與最後推送同一天(2026-03-24),之後五個月沒動。crates.io 上叫 frg 的是另一專案
xerg「比 grep 快 34 倍」 crates.io xerg v0.2.1,下載約 142 次;描述裡沒有該倍數
shim「結構查詢改送 ast-grep」 PKM-M84/shim 約 ★2,機制被清單講反了——實為「先跑 rg,再用 ast-grep 去噪」
xgrep「重複搜尋快 46 倍」 momokun7/xgrep 約 ★14,crates.io 同名為另一套件
seek「把 zoekt 包成單一 binary」 查無此物
fastgrep「某編輯器官方部落格背書」 ,原文無此工具亦無 Claude Code

對照:ripgrep 約 ★67.6k,ast-grep 約 ★15.6k。

七個宣稱逐一查證:ripgrep 約 6.7 萬星、ast-grep 約 1.6 萬星,四個替代品 14 星以下,兩個查無此物

可複製的查核指令:

curl -s -A "your-ua" https://crates.io/api/v1/crates/<name> \
  | jq -r '.crate | .max_version, .downloads, .description'
gh api repos/<owner>/<repo> \
  --jq '"★\(.stargazers_count) created=\(.created_at[0:10]) pushed=\(.pushed_at[0:10])"'
Enter fullscreen mode Exit fullscreen mode

3. 要換就換「能省 token」的,不是「能快幾毫秒」的

Agent 的成本是它塞回上下文的內容量。更準的搜尋比更快的搜尋更省。

// demo.rs
/// 這個函式取代了舊的 load_config,不要再呼叫 load_config。
fn load_config() -> String {
    let hint = "usage: load_config <path>";
    println!("{hint}"); String::new()
}
fn main() {
    // TODO: load_config 之後要改成非同步
    let _ = load_config();
}
Enter fullscreen mode Exit fullscreen mode
$ rg -w -c 'load_config' demo.rs
5   # 註解、定義、字串、TODO、真正的呼叫
$ ast-grep run -p 'load_config()' -l rust demo.rs
demo.rs:10:    let _ = load_config();   # 只有真正的呼叫
Enter fullscreen mode Exit fullscreen mode

陷阱:ast-grep -p 'unwrap()' 在上千處呼叫的專案上回 0;正確是 $X.unwrap()。每個新 pattern 先在已知有命中的地方跑一次。小專案建索引永遠回不了本,先量再換。

4. 從可信到可查的最小清單

  • 切系統 rg~/.local/bin/rg 15.2.0 + USE_BUILTIN_RIPGREP=0 兩處設定,which -a rg 驗證。
  • 精準搜尋:ast-grep run -p 'load_config()' -l rust <path>;pattern 錯是靜默失敗,先驗。
  • 效能宣稱:先看 gh api 的最後推送與下載量,再看第三方測量——沒有就當待驗證。

本文 7 宣稱查核與 demo.rs 範例皆可按上列指令自行複驗。

Top comments (0)