Cursor 上手教程:安装、核心功能与适用边界(附完整示例)
目录
-
背景与定位
-
安装
-
核心功能
-
3.1 Tab 补全
-
3.2 Cmd+K 自然语言改代码
-
3.3 Cmd+L 对话
-
3.4 Composer 跨文件改动
-
-
适用边界
-
进阶配置
-
一点观察
背景与定位
Cursor 是一个基于 VS Code 改造的编辑器,把 AI 能力做进了编辑器的底层交互,而不是作为外挂插件。UI、设置、快捷键和 VS Code 基本通用,可以无缝迁移。
和 Copilot 插件相比,主要差别在两点:
-
Copilot 主要做当前文件光标后的补全;Cursor 会把同一工作区里其他打开的文件也纳入参考。
-
Cursor 支持用自然语言让 AI 改代码(Cmd+K)、跨文件改动(Composer),Copilot 不具备。
下面提到的准确率、额度、行为表现,是我自己的使用记录,不同场景会有差异。
安装
整个过程大约 3 分钟。
-
从官网
cursor.com下载对应系统的安装包(Windows / macOS / Linux)。 -
安装流程和 VS Code 一致。
-
第一次打开会提示「是否导入 VS Code 配置」。建议导入,插件和设置会一并迁移。
-
登录用邮箱注册即可。免费版每月有 2000 次补全和 50 次高级请求(Cmd+K、对话这类)。补全始终可用,高级请求用完后限流。
核心功能
3.1 Tab 补全
写代码写到一半停顿,它用灰色字给出预测,按 Tab 接受。
它参考的上下文范围比 Copilot 大:在 A 文件里定义的类型,在 B 文件里写到这里,它能补出对应的方法名。Copilot 在同样位置经常补不出来。
准确率分场景:
-
模板代码(CRUD、DTO 转换、数据映射)准确率较高,体感在 80% 以上
-
复杂业务逻辑会给出看起来合理但跑不通的预测
我的做法是逻辑代码每次都扫一眼再 Tab。
3.2 Cmd+K 自然语言改代码
选中一段代码,按 Cmd+K(Windows 是 Ctrl+K),弹出输入框,用自然语言描述要做的改动。它会直接改并给出 diff 供确认。
一个完整的示例。原始代码:
public Order getOrder(Long id) {
return orderMapper.selectById(id);
}
在 Cmd+K 输入框里写:
加参数校验,id 为空时抛 IllegalArgumentException;数据库调用失败时捕获并记录日志,不要向上抛原始异常。
它给出的结果大致是:
public Order getOrder(Long id) {
if (id == null) {
throw new IllegalArgumentException("id 不能为空");
}
try {
return orderMapper.selectById(id);
} catch (Exception e) {
log.error("查询订单失败, id={}", id, e);
return null;
}
}
需要注意两点:
-
它补了
log字段,前提是类上已有@Slf4j注解(Lombok)。如果没有,需要手动加注解或改成显式声明的 Logger。 -
返回
null不一定符合调用方预期。如果上层用Optional或抛业务异常,需要人工再调整返回值。
一个让重构更可控的 Python 示例。原始代码:
def find_active(users, name): result = None for u in users: if u["name"] == name and u["active"]: result = u return result
Cmd+K 指令:
把 O(n) 的线性查找改成用字典预建索引,name 作为 key;如果找不到返回 None。
预期改写:
def build_index(users):
return {u["name"]: u for u in users if u["active"]}
def find_active(index, name):
return index.get(name)
指令的指向越具体,结果越可用。「优化一下」这种宽泛指令给出的改动往往不可控。
3.3 Cmd+L 对话
按 Cmd+L 打开右侧对话面板。和独立用 ChatGPT 的差别是:它能看到当前打开的文件、光标位置,甚至整个项目结构。
主要用在两类场景:
-
报错排查。控制台报错时,它结合当前代码上下文给出定位。
-
解释代码。接手陌生模块时,让它解释某段函数在做什么、调用了哪些依赖。
对话面板里输入 @ 可以手动指定参考的文件,例如 @UserService.java。项目越大这个越有用。
一个排查报错的对话示例:
@OrderService.java 这一行报 NullPointerException:return orderMapper.selectById(id).getItems(); 帮我定位可能的原因。
它会结合上下文指出 selectById 返回 null 时调用 .getItems() 会触发 NPE,并建议加空值判断。
3.4 Composer 跨文件改动
按 Cmd+I 打开 Composer(部分版本叫 Agent)。给它一个跨文件任务,它会同时改动多个文件。
一个跨文件任务的指令示例:
给这个项目加一个用户登录功能: 1. User 实体加 password 字段(BCrypt 加密) 2. 新增 POST /api/login 接口,校验账号密码后返回 JWT 3. 加一个 JwtUtil 工具类做签发和解析 4. 前端 login.vue 加登录表单,调接口存 token
它会依次改动这 4 个文件并给出每个文件的 diff。
能力较强,但需要更强的判断力去 review。我的用法是:小范围、单文件的改动直接用 Cmd+K;只有明确要搭一个功能骨架时,才用 Composer,并且逐个文件看 diff。
适用边界
这几个点不算「坑」,更像是使用前需要知道的前提。
补全准确率分场景。 模板代码可以放心 Tab,复杂业务逻辑一定要检查。它会错,而且错的时候表现得很自信。
免费版数据会上传云端。 Cmd+K、对话这类高级请求走的是云端模型,代码会发送到服务器处理。个人项目、学习代码问题不大;涉及公司机密、生产密钥的代码,不建议丢进对话框。公司有安全策略的,先确认是否允许使用。
免费额度会限流。 50 次高级请求高强度用大概一周用完。用完后补全仍然可用,Cmd+K 和对话会受限。
长期依赖的隐含成本。 用惯之后,偶尔回到没有 AI 辅助的编辑器会有明显效率落差。应对方式是把核心算法和设计思路留给自己想,AI 只承担模板代码和中等规模重构。
进阶配置
.cursorrules 文件
在项目根目录建一个 .cursorrules 文件,写清楚技术栈、代码规范、命名风格。Cursor 在改代码时会参考这个文件,输出风格会逐步贴近项目既有代码。
一个针对 Spring Boot 项目的完整示例:
- 这是一个 Java 17 + Spring Boot 3 项目,构建工具 Maven - 代码风格遵循 Google Java Style - 所有接口返回统一的 Result<T> 包装类,不要直接返回实体 - Controller 只做参数校验和转发,业务逻辑放 Service - 命名用驼峰,常量用全大写下划线 - 注释写中文,方法注释用 Javadoc 格式 - 日志用 Lombok 的 @Slf4j,不要手动 new Logger
@ 引用
对话时用 @文件名、@文档、@代码库,精确控制 AI 参考的范围。项目越大越重要——不指定时它可能参考到无关文件。
一点观察
把上面几个功能放在一起看,可以归纳出 Cursor 当前比较稳定的边界:
-
模板代码、中等规模重构、报错排查,它处理得比较稳
-
跨文件的复杂改动,它能搭出骨架,但需要人工逐段确认
-
涉及业务约束、安全敏感的部分,仍然需要人来做判断
我半年用下来,模板代码的工作量大约减少了七成,省下的精力主要给了真正需要设计的逻辑。这部分提升是实打实的,但它替代不了设计和判断的部分。
以上是我个人工作流里的记录,不同人的场景和习惯会有差异,仅供参考。
如果对你有帮助,欢迎 点赞收藏 + 关注专栏。下一期会写 Copilot 与 Cursor 的对比实测。
更多推荐

所有评论(0)