读文件
Claude 会自动用 Read 工具读取它需要的文件。一般你不需要手动指定:
> 看一下 src/server.ts,它是怎么处理 401 的?Claude 会:
- 调
Read src/server.ts - 解析关键代码段
- 回你一段自然语言总结,并在引用位置给出
file:line链接
如果文件很大,Claude 会按 offset/limit 分段读,你不需要操心。
提示:直接把绝对路径或相对路径丢给 Claude 也行,它会照单全收。比
cat给它再粘贴高效得多。
改文件
最简单的请求:
> 把 src/utils.ts 里的 formatDate 改成接收 Date 对象,而不是字符串Claude 的执行步骤:
[1] Read src/utils.ts
[2] Edit src/utils.ts
- old_string: "export function formatDate(iso: string) {"
- new_string: "export function formatDate(d: Date) {"
[3] 显示 diff 给你确认你会看到一个清晰的 diff:
-export function formatDate(iso: string) {
- const d = new Date(iso);
- if (Number.isNaN(d.getTime())) return iso;
+export function formatDate(d: Date) {
+ if (Number.isNaN(d.getTime())) return d.toString();
return d.toLocaleDateString();
}按 Enter 接受、n 拒绝、e 进入编辑修改后再接受。
关键点:Edit 工具用的是精确字符串替换,不是基于行号的 diff。Claude 会尽量传足够多的上下文让 old_string 唯一。如果你想看到它的工具调用细节,启动时加 --verbose。
新建文件
> 在 scripts/ 下新建一个 deploy.sh,内容是 build → rsync → 重启服务Claude 会:
- 用
Write scripts/deploy.sh写入完整内容 - 提示是否
chmod +x
省事写法:让 Claude 自己决定文件名和位置 —— 它会按项目惯例放到合适的目录。
跨文件改动
需要在多个文件里做一致改动时,Claude 会并行处理:
> 把所有 console.log 改成用 logger.info,涉及的文件全部修改执行流程:
[1] Grep "console.log" → 找到 12 个文件
[2] 并行 Read 每个文件
[3] 并行 Edit 每个文件
[4] 汇总改动,统一展示 diff如果改动量大,Claude 会先列计划让你确认再下手。
实用技巧
1. 用 CLAUDE.md 把规范告诉 Claude
在项目根目录建一个 CLAUDE.md:
# 项目约定
- 所有日志走 `lib/logger.ts`,不要直接用 console
- 新文件不写 README/JSDoc,函数名要自解释
- 测试用 vitest,放在 `__tests__/` 下,文件名 `*.test.ts`下次会话 Claude 会自动读这个文件,改动符合规范的概率大大提升。
2. 用 /init 自动生成 CLAUDE.md
> /initClaude 会扫描项目结构、识别框架/约定,生成一份初版 CLAUDE.md,你再增删调整就行。
3. 大文件 Edit 失败的解决办法
如果 old_string 不唯一会失败。两种解决:
- 让 Claude 多取一些上下文(多读几行前后)再 Edit
- 用
replace_all: true一次替换所有匹配
4. 拒绝改动后给反馈
> 不要这样改,我想保留原来的字段名,只加新方法Claude 会回滚思路,重新出方案。直接说"不行"也行,它会问你具体不满意哪里。
下一篇:子代理 Agent →