摘要:本文介绍了  Cursor 的安装配置、核心 AI 功能使用,以及规则配置与 @上下文引用等。

1 Cursor 介绍

Cursor 是一款 AI 优先的代码编辑器,核心通过三大能力协同提升开发效率:

AI 模型:并非简单接入 AI,而是将其作为编辑器的核心交互方式,且可自由切换不同 AI 模型;

强上下文感知:能自动识别项目文件等上下文,让 AI 给出的修改建议更精准、贴合开发场景;

对话式开发:仅需自然语言下达指令,Cursor 即可完成对应的开发任务,大幅降低操作门槛。

2 安装并配置 Cursor

2.1 安装与登录

访问 cursor.com 并单击 "下载" 按钮,即可安装成功。

点击 "注册" 或 "登录" 后,系统会提示您设置一个帐户。可以选择使用邮件。
 

2.2 Cursor 配置说明

在 Cursor 中,Cursor Settings 和 Editor Settings 是两个不同的配置入口,分别用于管理 AI 功能 和 编辑器基础设置。

对比项 Cursor Settings Editor Settings
功能定位 管理 AI 相关功能和 Cursor 特有设置 调整编辑器基础行为和外观
继承性 与 VS Code 差异较大(Cursor 独有功能) 大部分继承自 VS Code(如主题设置)
影响范围 影响 AI 代码生成、分析、对话的效果 影响代码编辑体验(如排版、颜色)
典型配置示例 调整 AI 模型参数、代码库索引路径 修改字体、启用自动保存、更改主题
2.3.1 Cursor AI 相关设置

Ctrl + Shift + J 开启光标设置,即可进行AI编程相关的定制配置:

以下是对 Cursor Settings 中各项配置的作用解释:

  • General:包含账户相关设置,可进行登录、注册操作,实现配置在不同设备间的同步 ;能进行 VS Code 配置导入,快速迁移主题、快捷键等设置;还隐私配置管理。

  • Features:可开关 AI 代码补全、对话模式(Edit、Agent)等核心功能;还能对这些功能的相关参数进行微调,比如调整代码补全的触发灵敏度、对话模式的快捷操作设置等 。

  • Models:允许用户选择不同的 AI 模型,添加模型和配置模型访问API Key等。

  • Rules:例如可以制定代码检查规则,像对代码格式、语法规范等进行约束;也能设置特定代码操作的规则,比如当进行代码重构、修改时遵循的逻辑和标准等 。

  • MCP:配置多MCP操作的相关行为,比如选择代码时的联动规则、批量编辑代码的方式等,帮助开发者更高效地对多处代码进行统一操作 。

  • Indexing:定义需要被索引的代码库路径,让 Cursor 的 AI 能理解代码上下文;设置排除规则,排除不需要索引的文件或文件夹,提高索引效率和 AI 分析的准确性。

  • Beta:可启用或禁用测试功能,提供反馈等。用户能通过这里尝试 Cursor 的新功能,并帮助开发团队测试和改进这些尚未正式发布的特性 。

2.3.2 Cursor 汉化配置

1. 打开扩展:启动 Cursor 后,按下Ctrl + Shift + X ,左侧边栏会出现扩展商店界面。

2. 搜索并安装插件:在搜索框输入 "Chinese" ,点击相关插件并进行安装。

3. 打开命令面板:按下Ctrl + Shift + P,输入 "Configure Display Language" 进入语言配置界面。

4. 选择中文并重启:在弹出的语言列表中选择 "中文(简体)",保存设置后重启 Cursor。

3 Cursor三大核心AI功能

3.1 Tab键:补全模式

Cursor 的 Tab 键具有强大的代码自动补全功能,基于 AI 模型,能根据代码上下文自动预测并生成代码补全建议和代码修复重构,还可用于导航代码。

Tab 键接受建议,也可以通过按 Esc 键拒绝建议。要逐字部分接受建议,请按 Ctrl/⌘ + →

3.1.1 行代码补全

已有代码片段:

<span style="background-color:#f8f8f8"><span style="color:#aa5500">//需求:写一个工具类计算数组平均值</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">ArrayUtils</span> {
   <span style="color:#aa5500">// 按tab会完成补全</span>
}</span>

按tab键 → Cursor 自动生成代码:

<span style="background-color:#f8f8f8"><span style="color:#aa5500">//需求:写一个工具类计算数组平均值</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">ArrayUtils</span> {
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#008855">int</span>[] <span style="color:#000000">nums</span> <span style="color:#981a1a">=</span> {<span style="color:#116644">1</span>,<span style="color:#116644">2</span>,<span style="color:#116644">3</span>,<span style="color:#116644">4</span>,<span style="color:#116644">5</span>,<span style="color:#116644">6</span>,<span style="color:#116644">7</span>,<span style="color:#116644">8</span>,<span style="color:#116644">9</span>,<span style="color:#116644">10</span>};
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">average</span>(<span style="color:#000000">nums</span>));
    }
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">double</span> <span style="color:#000000">average</span>(<span style="color:#008855">int</span>[] <span style="color:#000000">nums</span>) {
        <span style="color:#008855">int</span> <span style="color:#000000">sum</span> <span style="color:#981a1a">=</span> <span style="color:#116644">0</span>;
        <span style="color:#770088">for</span> (<span style="color:#008855">int</span> <span style="color:#000000">num</span> : <span style="color:#000000">nums</span>) {
            <span style="color:#000000">sum</span> <span style="color:#981a1a">+=</span> <span style="color:#000000">num</span>;
        }
        <span style="color:#770088">return</span> (<span style="color:#008855">double</span>) <span style="color:#000000">sum</span> <span style="color:#981a1a">/</span> <span style="color:#000000">nums</span>.<span style="color:#000000">length</span>;
    }
}</span>
3.1.2 智能代码重写

已有代码片段:

<span style="background-color:#f8f8f8"><span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">List</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">Arrays</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">ArrayList</span>;
​
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">ArrayUtils</span> {
​
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">arrayFor</span>() {    
        <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">numbers</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Arrays</span>.<span style="color:#000000">asList</span>(<span style="color:#116644">1</span>, <span style="color:#116644">2</span>, <span style="color:#116644">3</span>, <span style="color:#116644">4</span>, <span style="color:#116644">5</span>);
        <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">evenNumbers</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ArrayList</span><span style="color:#981a1a"><></span>();
        <span style="color:#770088">for</span> (<span style="color:#008855">int</span> <span style="color:#000000">num</span> : <span style="color:#000000">numbers</span>) {
            <span style="color:#770088">if</span> (<span style="color:#000000">num</span> <span style="color:#981a1a">%</span> <span style="color:#116644">2</span> <span style="color:#981a1a">==</span> <span style="color:#116644">0</span>) {
                <span style="color:#000000">evenNumbers</span>.<span style="color:#000000">add</span>(<span style="color:#000000">num</span>);
            }
        }
    }
}</span>

按Tab键 → 自动补全:

<span style="background-color:#f8f8f8"><span style="color:#aa5500">//在循环上方添加注释:// 使用 Stream 重构</span>
<span style="color:#aa5500">//光标放在循环代码块的任意位置,按 Tab 键</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">arrayFor</span>() {    
    <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">numbers</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Arrays</span>.<span style="color:#000000">asList</span>(<span style="color:#116644">1</span>, <span style="color:#116644">2</span>, <span style="color:#116644">3</span>, <span style="color:#116644">4</span>, <span style="color:#116644">5</span>);
    <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">evenNumbers</span> <span style="color:#981a1a">=</span> <span style="color:#000000">numbers</span>.<span style="color:#000000">stream</span>().<span style="color:#000000">filter</span>(<span style="color:#000000">num</span> <span style="color:#981a1a">-></span> <span style="color:#000000">num</span> <span style="color:#981a1a">%</span> <span style="color:#116644">2</span> <span style="color:#981a1a">==</span> <span style="color:#116644">0</span>).<span style="color:#000000">collect</span>(<span style="color:#000000">Collectors</span>.<span style="color:#000000">toList</span>());
}
​</span>
3.1.3 多行协同优化

Cursor 的多行协同优化核心能力:多行代码,一次性完成语法升级、结构重组、安全修复。

多行数据联想,修改

<span style="background-color:#f8f8f8"><span style="color:#008855">int</span> <span style="color:#000000">count</span>; <span style="color:#aa5500">// 普通变量</span>
<span style="color:#008855">String</span> <span style="color:#000000">name</span>; <span style="color:#aa5500">// 姓名</span>
<span style="color:#008855">boolean</span> <span style="color:#000000">isValid</span>; <span style="color:#aa5500">// 是否有效</span>
<span style="color:#008855">double</span> <span style="color:#000000">price</span>; <span style="color:#aa5500">// 价格</span>
<span style="color:#aa5500">//tab 会继续联想变量类型</span></span>
<span style="background-color:#f8f8f8"><span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">int</span> <span style="color:#0000ff">add</span>(<span style="color:#008855">int</span> <span style="color:#000000">a</span>, <span style="color:#008855">int</span> <span style="color:#000000">b</span>) {
    <span style="color:#aa5500">//代码添加注释</span>
    <span style="color:#aa5500">//</span>
    <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"第一次输出"</span>);
    <span style="color:#aa5500">//</span>
    <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"第二次输出"</span>);
    <span style="color:#aa5500">//</span>
    <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"第三次输出"</span>);
    <span style="color:#aa5500">//</span>
    <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"第四次输出"</span>);
    <span style="color:#770088">return</span> <span style="color:#116644">0</span>;
}</span>

3.2 Chat:对话模式

Chat 是 Cursor 的 AI 助手,位于的侧边栏中,可让您通过自然语言与代码库进行交互。您可以提出问题、请求代码编辑、获取终端命令建议等,所有这些都无需切换上下文。

代码库管理与修改:可深度理解代码库结构及组件关联,能按需求直接修改代码;

代码重构:基于对代码库整体逻辑的掌握,辅助完成代码库的重构优化,保障重构合理性;

项目初始化:可根据需求从零搭建项目,涵盖创建项目结构、安装依赖、编写初始代码等全流程;

故障排查与修复:能基于项目错误信息定位问题,并直接调整错误代码完成修复。

3.2.1 快速开始

使用 Ctrl+L  访问侧边栏中的聊天,用自然语言输入我们的请求,AI 将做出相应的响应。

对话时,建议采用清晰具体的语言格式,最好包含任务类型、上下文描述和具体要求。

1. 代码生成类

[任务类型]:请生成一个 {功能描述} 的 {编程语言/框架} 实现
​
[具体要求]:
1. 使用 {特定技术/库}
2. 包含 {特定功能点}
3. 符合 {编码规范/设计模式}
请生成一个学习计划页面,使用 HTML+CSS+JavaScript 实现
​
[具体要求]:
1. 使用Tailwind CSS v3和Font Awesome
2. 包含任务添加、编辑、删除功能
3. 包含日历视图展示学习计划
4. 包含学习进度可视化图表
5. 符合现代UI设计原则和响应式设计
6. 具有平滑的动画和交互效果

2. 代码修改类

[任务类型]:请帮我修改 {上下文:具体文件/代码片段},实现 {预期功能}
​
[当前问题]:{现有的错误/不足描述}
​
[具体要求]:
1. 保持 {现有功能/结构} 不变
2. 使用 {特定方法/技术} 改进
3. 修复 {具体错误/警告}
请帮我修改当前的 React 组件,优化列表渲染性能。

当前问题:滚动时列表卡顿,存在明显性能问题。

要求:
1. 保持现有 UI 不变
2. 使用 React.memo 和虚拟列表技术优化
3. 添加性能监控日志

3. 代码解释类

[任务类型]:请解释 {代码片段/功能模块} 的 {具体方面}
​
[上下文信息]:{相关业务背景/技术栈}
​
[具体问题]:
1. {不理解的语法/逻辑}
2. {特定设计选择的原因}
3. {潜在的问题/优化点}
请解释这段 TypeScript 代码的泛型约束和类型推导逻辑。

上下文:这是一个用于数据验证的工具函数。

具体问题:
1. <T extends object> 这里为什么要加 extends object?
2. 类型推导是如何工作的?
3. 是否存在类型安全隐患?

4. 流程自动化类

[任务类型]:请创建一个自动化流程,实现 {目标描述}
​
[操作步骤]:
1. 从 {数据源} 获取 {数据类型}
2. 执行 {数据处理/转换操作}
3. 将结果保存到 {目标位置}
4. 触发 {后续操作/通知}
​
[具体要求]:
1. 使用 {特定工具/API}
2. 添加 {错误处理/重试机制}
3. 生成 {日志/报告}
请创建一个自动化流程,每天凌晨从 GitHub API 获取仓库星标数,保存到 Google Sheets 并生成趋势图。

要求:
1. 使用 GitHub REST API v3
2. 添加异常处理和邮件通知
3. 生成周/月增长趋势图表

5. 命令行辅助类

[任务类型]:请提供 {操作场景} 的 {操作系统} 命令
​
[具体需求]:
1. {执行的具体操作}
2. 包含 {特定参数/选项}
3. 处理 {特殊情况/错误}
请提供在 macOS 上批量压缩图片的命令行方案。
需求:
1. 将当前目录下所有 PNG/JPG 图片压缩 50%
2. 保留原始文件并添加 "-compressed" 后缀
3. 显示每个文件的压缩前后大小对比

3.2.2 Chat 三种模式

Cursor Chat 提供三种针对不同任务优化的模式:

Agent 代理模式:可学习并理解项目代码结构,能直接修改项目代码;

Ask 对话模式:基于项目代码结构解答问题、解释代码,不修改代码;

Manual 手动模式:需手动指定修改范围等上下文,不识别项目结构,仅按指令编辑。

3.2.2.1 Agent 模式体验

Agent 是 Cursor 中的默认且最自主的模式,旨在以最少的指导处理复杂的编码任务。它启用了所有 "工具",可自主探索您的代码库、阅读文档、编辑文件和运行终端命令以高效完成任务。

Agent的能力总结:

  • 全面了解项目结构和依赖关系

  • 独立探索您的代码库,识别相关文件,并进行必要的更改

  • 使用所有可用工具搜索、编辑、创建文件和运行终端命令

  • 将复杂任务分解为可管理的步骤并按顺序执行


Agent的配置选项:

  • Model:为代理模式预先选择大模型

  • Edit Keybindings: 为agent模式设置快速开启快捷键(默认 ctrl + i)

  • Auto-run :当你让 Agent 修改代码后,自动执行相关命令,验证修改的正确性。

  • Auto-fix errors:当自动运行过程中出现错误,Agent 会尝试分析错误信息并自动修复。

3.2.2.2 Ask模式体验

Ask 是 Chat 的 "只读" 模式,用于提出问题、探索和了解代码库。

Ask的配置选项:

  • Model (模型) : 预先选择应作为 Ask (Ask ) 的默认模型

  • Keybinding : 设置键绑定以切换到 Ask 模式

  • 搜索代码库 : 允许 Cursor 搜索它自己的上下文,而非手动 @ 文件 作为上下文

3.2.2.3 Manual 模式体验

与 Ask 模式不同,它不探索代码库或运行终端命令;它完全取决于您的具体说明和您提供的上下文(例如,通过 @文件名),AI 生成修改建议后,还要用户手动点击 "应用" 才会改动代码,且通常是单文件 / 局部代码调整。

4 Cursor 精准指定上下文

在 Cursor 工具里,"上下文(Context)" 可理解为 让 AI 准确理解需求、辅助编码的 "信息参考范围" ,是 AI 读懂代码、精准响应的关键。

4.1 Rules 规则

Rules是给Cursor AI功能生成结果添加规则和限制,让 AI 生成的代码贴合团队规范,减少人工二次修改成本,主要的作用如下:

  • 可约束代码风格(如强制用驼峰命名、要求函数必须写注释 )

  • 能限定技术选型(如禁止使用某老旧库、优先用项目指定工具类 )

  • 提前指定核心参数(如提前设置连接数据库的地址和账号密码等)

Rule主要的配置方案有两种:

维度 项目规则(Project Rules) 用户规则(User Rules)
作用范围 仅对当前项目生效,团队成员共享相同规则 对所有项目生效,个人专属配置
存储位置 项目根目录下的 .cursor/rules/随意.mdc 文件 用户配置目录(如 ~/.cursor/rules
同步方式 随项目代码提交到版本库(如 Git),团队共享 仅本地生效,不随项目同步
适用场景 统一团队编码规范(如函数注释格式、依赖版本) 个人习惯(如快捷键、AI 响应风格)

注意: 项目规则和用户规则同时存在并且规则冲突,项目规则优先级更高

4.2 项目规则配置

1. 项目下创建规则文件

创建文件夹自定义文件:项目/.cursor/rules/随意命名.mdc

快捷命令方式创建:Ctrl + Shift + P >  "New Cursor Rule"

2. 编写项目规则文件

---
description: "团队前端项目规范"
priority: 1000
---
​
# 代码风格
1. 函数必须包含 JSDoc 注释
2. 禁止使用 `var`,统一用 `const`/`let`
3. 函数命名必须添加 zwf_前缀, 例如:zwf_login
​
# 依赖管理
- 优先使用项目内已有的工具函数(如 `utils/request`)
- 禁止引入低版本的 lodash(<4.0.0)

4.3 用户规则配置

用户规则在cursor settings > rules 中定义,用户规则不支持 MDC,它们只是纯文本。

4.4 MDC语法

Cursor 的 MDC(Markdown with Cursor)语法是专门为编写项目规则设计的轻量级格式,它结合了 Markdown 的可读性和元数据配置能力。

MDC 文件组成部分

1. 前置元数据:用 --- 包裹的 YAML 格式配置,定义规则的基本属性(如作用范围、优先级)

2. 规则内容:用 Markdown 语法写具体规则

 前置元数据

---
# 官方约定字段
description: "前端项目规则"
globs: "src/**/*.tsx"
priority: 1000
​
# 自定义字段
author: "技术团队"
review_date: "2025-06-04"
special_rule: "仅周一至周五生效"
---

常用元数据字段

字段 作用 示例
description 描述规则用途,指导 AI 如何应用规则 "前端组件编码规范"
globs 指定规则生效的文件范围(支持 glob 语法) "src/**/*.{js,ts,jsx}"
priority 规则优先级(数值越大越优先),解决规则冲突 1000
version 规则版本号(可选) "1.0.0"

规则内容(Markdown 正文)

用 Markdown 的标题、列表、代码块等语法写具体规则,常见结构:

# 一、代码风格
1. 函数必须包含 JSDoc 注释  
   - 至少包含 `@param` 和 `@return` 描述  
2. 变量命名必须使用驼峰命名法(camelCase)  
3. 每行代码长度不超过 120 个字符  
​
# 二、技术选型
- 禁止直接使用原生 fetch,必须通过项目封装的 request 工具  
- 优先使用 React Hooks 而非 Class 组件

安全约束规则

# 安全规范
1. 禁止使用 eval() 函数  
2. SQL 查询必须使用参数化查询,防止注入攻击  
3. 敏感信息(如 API 密钥)必须从环境变量读取

特殊语法:引用项目文件

@file 引用项目内的配置文件,让 AI 参考:

<span style="background-color:#f8f8f8"><span style="color:#333333"># 工具链配置
1. ESLint 规则必须符合 @file .eslintrc.js  
2. 测试用例必须遵循 Jest 框架规范  </span></span>
4.5 @ 符号

在 Cursor 的聊天交互中,@ 符号是精准指定上下文范围的核心指令,本质是给 AI 划定分析 / 操作的边界,让 AI 只聚焦你指定的代码 / 文件 / 文件夹,大幅提升回复的精准度和效率。

@Files-:需分析 / 修改完整单个文件,且无需跨文件上下文时使用

@Folders-:指定「文件夹路径」,让 Cursor 覆盖该目录下所有相关文件

@Code-:仅需聚焦某函数、类、变量、代码块时使用,避免无关代码干扰


感谢你的阅读!✿

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐