Claude Code 学习站

文件编辑

文件读写是最高频的能力。理解 Claude 的 diff 审批流程,可以放心地把改动权交给它。

读文件

Claude 会自动用 Read 工具读取它需要的文件。一般你不需要手动指定:

> 看一下 src/server.ts,它是怎么处理 401 的?

Claude 会:

  1. Read src/server.ts
  2. 解析关键代码段
  3. 回你一段自然语言总结,并在引用位置给出 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 会:

  1. Write scripts/deploy.sh 写入完整内容
  2. 提示是否 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

> /init

Claude 会扫描项目结构、识别框架/约定,生成一份初版 CLAUDE.md,你再增删调整就行。

3. 大文件 Edit 失败的解决办法

如果 old_string 不唯一会失败。两种解决:

  • 让 Claude 多取一些上下文(多读几行前后)再 Edit
  • replace_all: true 一次替换所有匹配

4. 拒绝改动后给反馈

> 不要这样改,我想保留原来的字段名,只加新方法

Claude 会回滚思路,重新出方案。直接说"不行"也行,它会问你具体不满意哪里。


下一篇:子代理 Agent →