第02章:Cursor实战——超越代码补全的工作方式
第02章:Cursor实战——超越代码补全的工作方式
第一次打开Cursor的人,很多人的第一反应是:这不就是带AI的VSCode吗?
没错。但"带AI的VSCode"这件事,如果真的用对了,会改变你整个的写代码方式——而不只是让你打字更快。
这章会讲Cursor真正有价值的几个功能,以及你应该如何把它整合进你的日常开发里。
Cursor的核心功能层次
Cursor的功能可以分成三层,价值从低到高:
第一层:代码补全
跟GitHub Copilot差不多,根据上下文预测你要写什么。这是大多数人用到的层次,价值有限。
第二层:Chat(聊代码)
打开侧边的Chat窗口,直接和AI讨论你的代码问题。可以引用当前文件(@文件名)、选中的代码段,或者整个代码库(@codebase)。这是Cursor真正开始有差异化的地方。
第三层:Composer(多文件生成)
这是Cursor Pro最有价值的功能。你描述要做什么,AI可以同时修改多个文件,生成完整的功能模块。不只是帮你写一个函数,而是帮你同时创建模型、路由、测试文件,改配置文件。
大多数人停留在第一层,这章帮你进入第二层和第三层。
功能一:@codebase——让AI理解你的整个项目
这是Cursor让很多人第一次感到震撼的功能。
普通的AI问答是无状态的:你把代码贴进去,问完这次忘了上次。Cursor的@codebase让AI能索引你整个项目的代码,在回答时考虑你所有文件的上下文。
典型使用场景:
场景1:理解陌生代码库
你接手了一个别人写的项目,第一件事:
"@codebase 解释一下这个项目的整体架构,数据流是怎么流的,
主要有哪些模块,它们之间的关系是什么?"
AI会给你一个架构概览,通常比你自己看代码理解得快3-5倍。
场景2:在整个项目里找相关代码
"@codebase 这个项目里,用户权限验证是在哪里处理的?
相关的代码涉及哪些文件?"
你省去了全局搜索+手动跳文件的时间。
场景3:评估影响范围
"@codebase 如果我要修改User模型,增加一个email字段,
会影响哪些地方?给我列一个修改清单。"
这个任务本来需要你花时间全局搜索,AI几秒钟给你答案。
功能二:Chat引用——精准的上下文控制
和AI对话时,上下文控制得越好,回答越准确。Cursor的@引用系统让你能精确控制AI看到什么。
常用引用方式:
@文件名— 引用某个具体文件@代码选择— 选中一段代码,右键选"Add to Chat"@codebase— 引用整个项目@docs— 引用特定的文档(需要提前配置)@web— 让AI搜索最新信息(适合问某个库的最新API)
实际对话示例:
用户:@auth.py @user.model.py
我想在用户登录时增加一个"最后登录时间"的记录,
应该改哪里?
Cursor AI:基于你的代码,建议在auth.py的login_user函数里,
在验证通过后,调用user.last_login_at = datetime.now(),
然后db.session.commit()。同时在user.model.py的User类里
增加last_login_at字段:
last_login_at = Column(DateTime, nullable=True)
注意用法:先引用相关文件,再说要做什么——这比直接问"怎么记录登录时间"获得的回答更贴合你的代码。
功能三:Composer——多文件生成
这是Cursor Pro真正的杀手级功能。
一个例子:你要给项目增加一个"用户收藏文章"的功能。你需要:
- 数据库模型(Bookmark表)
- API路由(/bookmarks的增删查接口)
- 测试文件
手写需要30-60分钟。用Composer:
提示词:
给这个Flask项目增加用户收藏文章功能,需要:
1. 在models.py里增加Bookmark模型(user_id, article_id, created_at)
2. 创建新的路由文件bookmarks.py,包含:
- POST /bookmarks:添加收藏
- DELETE /bookmarks/<id>:取消收藏
- GET /bookmarks:获取用户的所有收藏(分页)
3. 在blueprints的__init__.py里注册新路由
4. 创建test_bookmarks.py,覆盖上面三个接口的基本测试
用这个项目现有的代码风格(@models.py @routes/user.py参考)。
Composer会同时修改或创建多个文件,你看着变更的diff,决定接受哪些、拒绝哪些。
重要的使用原则:
Composer不是一键生成,而是一个协作过程。你需要:
- 描述清楚(上面的提示词是个好例子)
- 审查AI生成的代码(别直接Accept All,检查逻辑)
- 发现问题就在Chat里继续调整
功能四:.cursorrules——给AI设定项目规则
这个功能被大多数人忽略,但它是Cursor里对长期使用价值最大的功能之一。
.cursorrules是一个你放在项目根目录的配置文件,里面写的是"AI在这个项目里应该遵守的规则"。你只需要写一次,之后每次和AI的对话都会自动遵守这些规则。
一个实际的.cursorrules例子:
# 项目规则
## 技术栈
- Python 3.12,Flask 3.0,SQLAlchemy 2.0
- 数据库:PostgreSQL
- 测试框架:pytest
## 代码风格
- 使用类型注解(type hints)
- 函数和方法必须有docstring
- 变量名使用snake_case
- 不使用全局变量
## 架构规范
- 路由只做参数校验和调用service,业务逻辑放在services/
- 数据库操作只在repositories/里进行
- 用Flask Blueprint,每个功能模块一个Blueprint
## 错误处理
- API返回统一用{success: bool, data: ..., error: str}格式
- 所有异常必须被捕获,不允许让异常直接暴露给用户
## 安全
- 所有用户输入必须通过marshmallow schema验证
- 敏感操作需要权限检查装饰器@login_required
有了这个文件,你之后再让AI生成代码,它会自动遵守这些规范。你不需要每次都说"记得加类型注解"、“记得写docstring”。
高效使用Cursor的几个原则
原则1:别让AI一次做太多事
Cursor生成300行代码的时候,你也需要审查300行。拆成小任务,每次让AI做一件事,审查更容易,错误更少。
原则2:让AI生成,你来审查
最有价值的模式:你描述需求 → AI生成 → 你审查 → 发现问题 → 你改或者让AI改。你是决策者,AI是执行者。
原则3:失败了就换角度
AI第一次的输出不满意,不要一直问"这不对,重新生成"。给它更多上下文,或者换一种描述方式。
原则4:高复杂度任务先讨论设计
对于复杂功能,先用Chat讨论"应该怎么设计",确认设计对了,再让Composer生成代码。不要让AI在错误的设计上生成一大堆代码。
一个真实的Cursor工作流
下面是我用Cursor开发一个新功能的完整流程:
步骤1:理解现有代码(5分钟)
@codebase 我要给这个项目加用户通知功能,
现有代码里有没有类似的功能实现可以参考?
订阅/通知相关的代码在哪里?
步骤2:设计讨论(10分钟)
我要实现这样的通知功能:
[描述需求]
基于现有的代码架构,你觉得最合适的实现方式是什么?
列出几个选项,以及每个选项的优缺点。
步骤3:分模块实现(每个模块10-20分钟)
[切换到Composer]
先实现数据库层:
- 创建Notification模型(参考@models/user.py的风格)
- 在@repositories/里创建notification_repository.py
- 增加必要的数据库迁移
步骤4:测试生成
@notification_repository.py @test/test_user.py(参考风格)
给notification_repository.py里的所有公共方法写测试
步骤5:代码审查
最后过一遍所有改动的diff,确认每处改动都是自己理解的。
整个过程,AI承担了大部分的"写"的工作,我承担了"思考"和"决策"。
如果今天只记一件事:Cursor最有价值的用法不是代码补全,而是让AI理解你的整个项目(@codebase)、帮你跨文件生成功能(Composer)——把这两个功能用起来,效率才会有质的提升。