【AI 编程】Cursor 实用教程:从核心功能到上下文控制
摘要:本文介绍了 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-:仅需聚焦某函数、类、变量、代码块时使用,避免无关代码干扰
感谢你的阅读!✿
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)