目录

  1. 背景与定位

  2. 安装

  3. 核心功能

    • 3.1 Tab 补全

    • 3.2 Cmd+K 自然语言改代码

    • 3.3 Cmd+L 对话

    • 3.4 Composer 跨文件改动

  4. 适用边界

  5. 进阶配置

  6. 一点观察


背景与定位

Cursor 是一个基于 VS Code 改造的编辑器,把 AI 能力做进了编辑器的底层交互,而不是作为外挂插件。UI、设置、快捷键和 VS Code 基本通用,可以无缝迁移。

和 Copilot 插件相比,主要差别在两点:

  1. Copilot 主要做当前文件光标后的补全;Cursor 会把同一工作区里其他打开的文件也纳入参考。

  2. Cursor 支持用自然语言让 AI 改代码(Cmd+K)、跨文件改动(Composer),Copilot 不具备。

下面提到的准确率、额度、行为表现,是我自己的使用记录,不同场景会有差异。


安装

整个过程大约 3 分钟。

  1. 从官网 cursor.com 下载对应系统的安装包(Windows / macOS / Linux)。

  2. 安装流程和 VS Code 一致。

  3. 第一次打开会提示「是否导入 VS Code 配置」。建议导入,插件和设置会一并迁移。

  4. 登录用邮箱注册即可。免费版每月有 2000 次补全和 50 次高级请求(Cmd+K、对话这类)。补全始终可用,高级请求用完后限流。


核心功能

3.1 Tab 补全

写代码写到一半停顿,它用灰色字给出预测,按 Tab 接受。

它参考的上下文范围比 Copilot 大:在 A 文件里定义的类型,在 B 文件里写到这里,它能补出对应的方法名。Copilot 在同样位置经常补不出来。

准确率分场景:

  1. 模板代码(CRUD、DTO 转换、数据映射)准确率较高,体感在 80% 以上

  2. 复杂业务逻辑会给出看起来合理但跑不通的预测

我的做法是逻辑代码每次都扫一眼再 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;
    }
}

需要注意两点:

  1. 它补了 log 字段,前提是类上已有 @Slf4j 注解(Lombok)。如果没有,需要手动加注解或改成显式声明的 Logger。

  2. 返回 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 的差别是:它能看到当前打开的文件、光标位置,甚至整个项目结构。

主要用在两类场景:

  1. 报错排查。控制台报错时,它结合当前代码上下文给出定位。

  2. 解释代码。接手陌生模块时,让它解释某段函数在做什么、调用了哪些依赖。

对话面板里输入 @ 可以手动指定参考的文件,例如 @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 当前比较稳定的边界:

  1. 模板代码、中等规模重构、报错排查,它处理得比较稳

  2. 跨文件的复杂改动,它能搭出骨架,但需要人工逐段确认

  3. 涉及业务约束、安全敏感的部分,仍然需要人来做判断

我半年用下来,模板代码的工作量大约减少了七成,省下的精力主要给了真正需要设计的逻辑。这部分提升是实打实的,但它替代不了设计和判断的部分。

以上是我个人工作流里的记录,不同人的场景和习惯会有差异,仅供参考。


如果对你有帮助,欢迎 点赞收藏 + 关注专栏。下一期会写 Copilot 与 Cursor 的对比实测。


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐