【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><span>//需求:写一个工具类计算数组平均值</span> <span>public</span> <span>class</span> <span>ArrayUtils</span> { <span>// 按tab会完成补全</span> }</span>按tab键 → Cursor 自动生成代码:
<span><span>//需求:写一个工具类计算数组平均值</span> <span>public</span> <span>class</span> <span>ArrayUtils</span> { <span>public</span> <span>static</span> <span>void</span> <span>main</span>(<span>String</span>[] <span>args</span>) { <span>int</span>[] <span>nums</span> <span>=</span> {<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>,<span>5</span>,<span>6</span>,<span>7</span>,<span>8</span>,<span>9</span>,<span>10</span>}; <span>System</span>.<span>out</span>.<span>println</span>(<span>average</span>(<span>nums</span>)); } <span>public</span> <span>static</span> <span>double</span> <span>average</span>(<span>int</span>[] <span>nums</span>) { <span>int</span> <span>sum</span> <span>=</span> <span>0</span>; <span>for</span> (<span>int</span> <span>num</span> : <span>nums</span>) { <span>sum</span> <span>+=</span> <span>num</span>; } <span>return</span> (<span>double</span>) <span>sum</span> <span>/</span> <span>nums</span>.<span>length</span>; } }</span>3.1.2 智能代码重写
已有代码片段:
<span><span>import</span> <span>java</span>.<span>util</span>.<span>List</span>; <span>import</span> <span>java</span>.<span>util</span>.<span>Arrays</span>; <span>import</span> <span>java</span>.<span>util</span>.<span>ArrayList</span>; <span>public</span> <span>class</span> <span>ArrayUtils</span> { <span>public</span> <span>void</span> <span>arrayFor</span>() { <span>List</span><span><</span><span>Integer</span><span>></span> <span>numbers</span> <span>=</span> <span>Arrays</span>.<span>asList</span>(<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>); <span>List</span><span><</span><span>Integer</span><span>></span> <span>evenNumbers</span> <span>=</span> <span>new</span> <span>ArrayList</span><span><></span>(); <span>for</span> (<span>int</span> <span>num</span> : <span>numbers</span>) { <span>if</span> (<span>num</span> <span>%</span> <span>2</span> <span>==</span> <span>0</span>) { <span>evenNumbers</span>.<span>add</span>(<span>num</span>); } } } }</span>按Tab键 → 自动补全:
<span><span>//在循环上方添加注释:// 使用 Stream 重构</span> <span>//光标放在循环代码块的任意位置,按 Tab 键</span> <span>public</span> <span>void</span> <span>arrayFor</span>() { <span>List</span><span><</span><span>Integer</span><span>></span> <span>numbers</span> <span>=</span> <span>Arrays</span>.<span>asList</span>(<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>); <span>List</span><span><</span><span>Integer</span><span>></span> <span>evenNumbers</span> <span>=</span> <span>numbers</span>.<span>stream</span>().<span>filter</span>(<span>num</span> <span>-></span> <span>num</span> <span>%</span> <span>2</span> <span>==</span> <span>0</span>).<span>collect</span>(<span>Collectors</span>.<span>toList</span>()); } </span>3.1.3 多行协同优化
Cursor 的多行协同优化核心能力:多行代码,一次性完成语法升级、结构重组、安全修复。
多行数据联想,修改
<span><span>int</span> <span>count</span>; <span>// 普通变量</span> <span>String</span> <span>name</span>; <span>// 姓名</span> <span>boolean</span> <span>isValid</span>; <span>// 是否有效</span> <span>double</span> <span>price</span>; <span>// 价格</span> <span>//tab 会继续联想变量类型</span></span><span><span>public</span> <span>static</span> <span>int</span> <span>add</span>(<span>int</span> <span>a</span>, <span>int</span> <span>b</span>) { <span>//代码添加注释</span> <span>//</span> <span>System</span>.<span>out</span>.<span>println</span>(<span>"第一次输出"</span>); <span>//</span> <span>System</span>.<span>out</span>.<span>println</span>(<span>"第二次输出"</span>); <span>//</span> <span>System</span>.<span>out</span>.<span>println</span>(<span>"第三次输出"</span>); <span>//</span> <span>System</span>.<span>out</span>.<span>println</span>(<span>"第四次输出"</span>); <span>return</span> <span>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><span># 工具链配置 1. ESLint 规则必须符合 @file .eslintrc.js 2. 测试用例必须遵循 Jest 框架规范 </span></span>4.5 @ 符号
在 Cursor 的聊天交互中,@ 符号是精准指定上下文范围的核心指令,本质是给 AI 划定分析 / 操作的边界,让 AI 只聚焦你指定的代码 / 文件 / 文件夹,大幅提升回复的精准度和效率。
@Files-:需分析 / 修改完整单个文件,且无需跨文件上下文时使用
@Folders-:指定「文件夹路径」,让 Cursor 覆盖该目录下所有相关文件
@Code-:仅需聚焦某函数、类、变量、代码块时使用,避免无关代码干扰
感谢你的阅读!✿