Claude Code 的内置工具各司其职。最常见的错误是搞混哪个工具负责代码库的哪个维度。把这个搞清楚,你就理解了标准的代码探索流程。
核心三件套:Grep、Glob、Read
Grep — 按模式搜索文件内容。“哪些文件包含 processPayment()?“这就该用 Grep。它接收一个正则表达式,跨文件扫描,返回匹配的行和文件路径。这是你找函数在哪被调用、变量在哪被使用、模式在代码中出现位置的工具。
Glob — 按模式搜索文件路径。“所有测试文件在哪?“这就该用 Glob。它接收一个 glob 模式比如 **/*.test.tsx,返回匹配的文件路径。它告诉你有哪些文件、在哪里——但从不看里面的内容。
Read — 加载指定文件的内容。你知道需要哪个文件后(通过 Grep 或 Glob 找到的),Read 给你看里面有什么。它接收精确的文件路径,不是模式。它不搜索也不匹配——只是加载。
工作流:Grep 找到东西在哪 → Read 看细节。或者 Glob 按命名模式找文件 → Read 看内容。
修改工具对:Edit 和 Write
Edit — 在已有文件中做精确的文本替换。你指定要找的文本和替换成什么。目标文本在文件中必须唯一——如果出现多次,Edit 会失败(你需要更多上下文让匹配唯一)。
Write — 创建新文件或完全覆写已有文件。它替换一切。用 Write 在大文件里做小改动是浪费——Edit 就是为定向修改而生的。
这两个不能互换。Edit 是外科手术式的(对唯一匹配做查找替换)。Write 是批量式的(整个文件内容替换)。用哪个取决于你是在做定向修改还是从零创建。
Bash:兜底方案
Bash — 执行 shell 命令。专门对付那些专用工具搞不定的事:跑测试、装包、git 操作、构建命令、系统管理。能用专用工具的时候应该优先用——Grep 优于 grep,Glob 优于 find,Read 优于 cat,Edit 优于 sed。Bash 是兜底的,不是默认的。
Grep/Glob 之惑
这是考得最多的区分点。记住:Grep = 内容(文件里面有什么),Glob = 路径(有哪些文件)。如果有人说”用 Glob 搜索文件内容里的文本模式”,那就错了。如果有人说”用 Grep 找匹配命名模式的文件”,也是错的。每个工具只有一个清晰的职责。
一句话总结: Grep 搜文件内容,Glob 搜文件路径,Read 加载指定文件,Edit 做定向替换,Write 创建/覆写整个文件——优先用专用工具而不是 Bash。