Chapter 07

多文件编辑与 Composer

Composer 让 AI 从单文件编辑进化为跨文件协作完成任务。掌握 Normal 模式与 Agent 模式的选择,以及 Checkpoint 快照机制,实现大规模重构的可控推进。

本章目录

  1. Composer 是什么
  2. Normal 模式 vs Agent 模式
  3. Composer 工作流实战
  4. Checkpoint 版本快照
  5. 高效使用技巧

Composer 是什么

Composer 是 Cursor 中专门用于多文件同时编辑的 AI 功能,快捷键 Cmd+I(Mac)/ Ctrl+I(Windows)。 与 Chat 的核心区别在于:Chat 以"对话"为中心,Composer 以"任务"为中心——你描述一个需要修改多个文件的任务, Composer 在一个统一视图中展示所有文件的 diff,你可以一次性审查和接受全部改动。

Chat 适合

  • 探索性问答,不确定要做什么
  • 解释代码、学习技术
  • 单文件的小范围修改
  • 需要多轮对话完善思路

Composer 适合

  • 明确的多文件修改任务
  • 功能开发(跨多个模块)
  • 重构(需要同步修改多处)
  • 代码生成(新建多个文件)

Normal 模式 vs Agent 模式

Composer 有两种工作模式,选择合适的模式很重要:

Composer 工作流实战

典型场景:为 Express 项目添加用户认证模块

// 打开 Composer(Cmd+I),输入任务描述:
"""
为这个 Express + TypeScript 项目添加完整的 JWT 认证系统:
1. 创建 src/auth/authController.ts(注册、登录接口)
2. 创建 src/auth/authMiddleware.ts(JWT 验证中间件)
3. 创建 src/auth/authService.ts(业务逻辑)
4. 修改 src/models/User.ts(添加 password 字段和 hashPassword 方法)
5. 修改 src/app.ts(注册认证路由)
6. 创建 src/auth/auth.test.ts(完整单元测试)

使用 bcrypt 加密密码,jsonwebtoken 签发 Token,
Token 有效期 7 天,遵循项目现有的代码风格。
"""

// Composer 会:
// 1. 扫描现有代码理解项目结构
// 2. 生成6个文件的内容(创建或修改)
// 3. 在左侧文件树中高亮所有受影响的文件
// 4. 每个文件都有 diff 视图,绿色=新增,红色=删除

审查与接受改动

Composer 展示所有文件改动后,你有以下操作选项:

操作快捷键/按钮说明
接受所有改动Accept All应用所有文件的所有 diff
拒绝所有改动Reject All回滚到 Composer 执行前的状态
逐文件审查点击文件名在编辑器中打开该文件的 diff 视图
接受单个文件文件旁的 ✓只应用该文件的改动
继续对话直接输入对当前结果提出修改要求

Checkpoint 版本快照

每次 Composer 执行前,Cursor 自动创建一个 Checkpoint(检查点),保存所有相关文件的当前状态。 这相当于一个临时的 Git 快照,让你可以随时回滚到 Composer 执行前的状态,而不影响你的 Git 历史。

# Checkpoint 与 Git 的协作方式(推荐流程):

# 1. 确保在干净的 Git 状态下启动 Composer
git status  # 确认没有未提交的修改
git commit -m "feat: before auth module"

# 2. 让 Composer 执行任务

# 3. 审查 Composer 的改动
#    - 如果满意:Accept All,然后 git commit
#    - 如果不满意:Reject All 或用 Checkpoint 回滚
#    - 如果部分满意:选择性 Accept,手动修改不满意的部分,再 git commit

# 4. 提交最终结果
git add .
git commit -m "feat: add JWT authentication module"

高效使用技巧

技巧 1:用 @符号指定相关文件

// 在 Composer 描述中用 @引用相关文件,帮助 AI 理解上下文:
"参考 @src/models/User.ts 的写法,为 Product 模型
添加 Elasticsearch 搜索功能,修改 @src/models/Product.ts
和 @src/services/productService.ts"

技巧 2:分步执行大型重构

// ❌ 一次性重构整个后端(太大,质量差)
"将整个项目从 JavaScript 迁移到 TypeScript"

// ✅ 分模块逐步迁移(可控,可审查)
// 第1次 Composer:
"将 src/models/ 目录中的所有 .js 文件迁移到 TypeScript,
添加完整类型注解,保持功能不变"
// 审查验证后,再做下一模块

技巧 3:描述中包含技术约束

// 好的 Composer 需求描述应包含:
"
添加图片上传功能,约束:
- 使用 multer 中间件(项目已安装)
- 图片存储到 AWS S3(使用现有 @src/config/aws.ts 配置)
- 图片格式限制:JPEG/PNG/WebP,最大 10MB
- 自动生成缩略图(300x300)
- 上传记录写入 uploads 表(参考 @src/models/Upload.ts 结构)
- 遵循项目中 @src/middleware/auth.ts 的鉴权方式
"
常见问题:Composer 修改了不该修改的文件
在任务描述中明确说明"只修改以下文件"或"不要修改 X 文件"。如果 Composer 还是动了不该动的文件,可以在审查时只接受需要的文件的改动,拒绝其他文件。

本章小结