1. 概述
Cursor是一款基于VS Code的AI驱动代码编辑器,专为开发者设计,通过集成强大的AI功能来加速编码过程。它利用大型语言模型帮助开发者编写、理解和调试代码,显著提升开发效率。
2. 应用场景
Cursor编辑器适用于以下场景:
- 快速开发原型:通过AI辅助快速实现概念验证
- 学习新编程语言或框架:AI可以生成示例代码并解释概念
- 代码重构:AI协助识别优化点并提供重构建议
- Bug修复:帮助分析错误并提供解决方案
- 文档生成:自动为代码生成注释和文档
- 代码审查:AI辅助发现潜在问题和提供改进建议
3. 核心功能与使用方式
3.1 Tab – 智能代码补全
Tab是Cursor的智能代码补全功能,它会学习你的编码风格,提供多行编辑建议,修复可能的错误,并预测你的下一步操作。
使用方式:
– 开始编写代码时,Tab功能会自动提供智能补全建议
– 按Tab
键接受建议,或按Esc
取消
– 按Ctrl/⌘ + →
接受下一个单词
– 按Alt/Option + →
接受整行
– 系统会根据你的编码习惯不断优化建议
案例:
// 开始输入一个函数定义
function calc
// Tab可能会建议补全为:
function calculateTotal(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}
3.2 Agent – AI配对编程
Agent是你的AI配对程序员,可以处理复杂的代码修改,进行大规模编辑,并提供自动修复。它具有强大的推理能力,能够执行多个连续操作而无需频繁干预。
可用工具:
– 读取和编写代码
– 搜索代码库
– 运行终端命令
– 自动网络搜索获取最新信息和文档
使用方式:
– 在Composer中使用Ctrl/⌘ + .
切换到Agent模式
– 或者通过侧边栏AI面板中的Agent图标访问
– 描述你想要实现的代码变更
– Agent会理解整个代码库上下文并实施相应更改
Yolo模式:
– 启用后,Agent可以自行执行终端命令
– 特别适合运行测试套件
– 可以在设置中定义命令的安全防护措施和允许/拒绝列表
支持的模型:
– 目前支持claude-3.5-sonnet
、gpt-4o
和o3-mini
案例:
用户: 将所有使用Promise.then的代码重构为使用async/await语法
Agent会扫描项目文件,识别使用Promise.then的地方,并将它们重构为async/await形式。
3.3 Cmd-K (⌘K) – 快速内联代码编辑
Cmd-K是Cursor中用于快速内联代码编辑和生成的功能,非常适合在不打断工作流程的情况下进行精确修改。
使用方式:
– 使用Ctrl+K
(Windows)或Cmd+K
(Mac)打开内联编辑
– 描述你想要实现的代码变更
– AI会根据当前上下文生成或修改代码
– 按Tab
键接受生成的代码,或按Esc
取消
– 按Alt + Enter
将生成的代码插入到下一行
案例:
// 在代码中使用Ctrl+K并输入:
// "创建一个函数,计算购物车商品总价并应用折扣"
function calculateCartTotal(items, discountRate = 0) {
// 验证输入
if (!Array.isArray(items)) {
throw new Error('Items must be an array');
}
// 计算总价
const subtotal = items.reduce((total, item) => {
return total + (item.price * item.quantity || 0);
}, 0);
// 应用折扣
const discount = subtotal * discountRate;
const total = subtotal - discount;
return {
subtotal,
discount,
total
};
}
3.4 Ask – 上下文感知的AI助手
Ask是Cursor中的上下文感知AI助手(原Chat功能已更名为Ask),它能理解你的代码库,回答问题并直接在编辑器中应用代码变更。
使用方式:
– 使用快捷键 Ctrl+L
(Windows)或 ⌘+L
(Mac)打开AI面板中的Ask功能
– 直接提问关于当前代码的问题
– 可以要求AI解释代码、查找bug或提供优化建议
– 使用@
符号引用特定文件或代码片段添加更多上下文
– 使用Ctrl/⌘ + Shift + E
快速修复编辑器中高亮的错误(AI Fix功能)
默认上下文:
– Ask默认会将当前打开的文件作为上下文包含在查询中
– 可以在输入框上方的”pills”(标签)中看到将被包含的上下文
聊天历史:
– 使用 Ctrl/⌘ + Alt/Option + L
或点击AI面板右上角的”Previous Chats”按钮查看历史对话
– 可以编辑或删除历史对话记录
案例:
用户: 这段代码有什么问题?为什么会报错?
function fetchData() {
return fetch('/api/data')
.then(res => res.json);
}
AI: 你的代码有一个常见错误。`res.json`是一个方法,但你没有调用它。
应该改为:
function fetchData() {
return fetch('/api/data')
.then(res => res.json());
}
注意添加了括号来调用json()方法。
3.5 代码解释功能
使用方式:
– 选中需要解释的代码,然后使用快捷键Ctrl/⌘ + L
打开AI面板中的Ask功能
– 在聊天窗口中询问”解释这段代码”
– 或者使用命令面板选择相关命令
– AI会生成代码解释,包括功能、逻辑和潜在问题
案例:
# 选中以下代码后询问解释
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
# AI解释
"""
这是一个快速排序算法的实现:
1. 如果数组长度小于等于1,直接返回(基本情况)
2. 选择数组中间元素作为基准值(pivot)
3. 将数组分为三部分:小于基准值的元素(left)、等于基准值的元素(middle)和大于基准值的元素(right)
4. 递归对left和right部分进行排序,然后将三部分合并返回
这是一个分治算法,平均时间复杂度为O(n log n)
"""
3.6 代码生成与重构
使用方式:
– 使用聊天窗口或命令面板描述需要生成或重构的代码
– 或在编辑过程中使用⌘K(Cmd+K/Ctrl+K)功能
– 提供清晰的指令,如”重构这段代码以提高可读性”或”使用更现代的语法”
案例:
// 描述需求: "使用现代JavaScript语法优化这段代码"
function processItems(items) {
let results = [];
for(let i = 0; i < items.length; i++) {
if(items[i].active) {
let processed = items[i].value * 2;
results.push(processed);
}
}
return results;
}
// AI重构后的代码
function processItems(items) {
return items
.filter(item => item.active)
.map(item => item.value * 2);
}
3.7 Composer(AI代码编写器)
Composer是Cursor提供的统一AI界面工具,集成了Ask、Edit和Agent模式,适合编写完整的函数、类或模块。
使用方式:
– 使用 ⌘I
(Mac)或 Ctrl+I
(Windows)打开Composer
– 使用 ⌘N
(Mac)或 Ctrl+N
(Windows)创建新对话
– 使用 ⌘.
(Mac)或 Ctrl+.
(Windows)在不同模式间切换
– 使用 ⌘L
(Mac)或 Ctrl+L
(Windows)切换到Ask模式
– 使用 Ctrl/⌘ + Enter
提交带代码库搜索的查询
– 使用 Shift + Enter
换行而不提交
– 详细描述你想要实现的功能
– AI会生成完整的代码实现
– 可以直接将生成的代码应用到项目中
Composer模式:
– Ask模式(⌘L):询问问题、获取解释、探索代码库
– Edit模式:精确编辑代码
– Agent模式:默认模式,具有工具访问和推理能力,适合复杂任务
案例:
# 在Composer中输入:
创建一个Node.js中间件函数,用于验证API请求中的JWT令牌。
需要验证令牌是否存在、格式是否正确、是否过期,以及签名是否有效。
如果验证失败,返回适当的错误信息和状态码。
# Composer会生成完整的中间件实现
3.8 代码调试辅助
使用方式:
– 在遇到错误或异常时,选择相关代码
– 使用Ask功能询问关于错误原因和可能的解决方案(使用快捷键Ctrl/⌘ + L
打开AI面板)
– 或使用Agent功能分析整个代码上下文来找出问题
案例:
// 假设代码出现以下错误
function processData() {
const result = data.map(item => item.value * 2);
return result;
}
// 控制台错误: "Cannot read property 'map' of undefined"
// 使用Ask询问
用户: 为什么这段代码会报错?如何修复?
AI: 错误"Cannot read property 'map' of undefined"表示你尝试在未定义的变量'data'上调用map方法。
这里的问题是'data'变量未定义或为null。以下是几种可能的修复方法:
1. 确保data变量在函数前已定义:
function processData(data) {
if (!data || !Array.isArray(data)) {
return []; // 返回空数组或其他默认值
}
const result = data.map(item => item.value * 2);
return result;
}
2. 使用可选链操作符和默认空数组:
function processData() {
const result = data?.map(item => item.value * 2) || [];
return result;
}
4. 高级特性
4.1 Codebase Indexing(代码库索引)
Cursor能够索引整个代码库,帮助AI更好地理解项目结构和代码关系,从而提供更准确的AI辅助和搜索结果。
使用方式:
– 打开项目后,Cursor会自动开始索引代码库
– 索引完成后,AI将能够理解整个项目上下文
– 在聊天中提问跨文件的问题,AI能够提供更准确的回答
– 查看或管理索引状态:在Cursor设置
> 功能
> 代码库索引
中进行设置
高级设置:
– 展开显示设置
部分可访问更多高级选项
– 可以配置是否为新仓库启用自动索引
– 可以设置索引过程中要忽略的文件
– Cursor使用与VS Code相同的文件忽略处理机制,遵循所有.gitignore
文件
– 可以创建.cursorignore
文件用于用户特定的忽略模式
如何禁用索引:
– 在Cursor设置
> 功能
> 代码库索引
中可以禁用当前项目的索引功能
– 如需删除已索引的代码库,可以在相同设置面板中进行操作
– 对于大型项目,建议使用.cursorignore
文件来选择性地控制哪些部分被索引
大型单体仓库策略:
– 使用.cursorignore
让每个开发者配置他们在单体仓库中工作的文件夹和路径
– 将.cursorignore
添加到全局.gitignore
中
– 这样每个开发者可以针对单体仓库中的特定工作区域优化索引
案例:
用户: 在user-service.ts中的createUser函数如何与auth-middleware.ts中的验证逻辑配合使用?
AI: 我分析了两个文件的关系:
在auth-middleware.ts中,验证中间件(validateAuthToken)负责从请求头中提取JWT令牌并验证其有效性。如果验证成功,它会将解码后的用户信息添加到req.user对象。
在user-service.ts中,createUser函数会首先检查req.user是否存在(这是由auth-middleware设置的),然后验证当前用户是否有创建新用户的权限。
具体的数据流是:
1. 请求首先通过auth-middleware.ts中的validateAuthToken中间件
2. 中间件验证令牌并设置req.user
3. 请求继续到user-service.ts中的createUser函数
4. createUser使用req.user中的信息进行权限检查
5. 如果权限验证通过,则创建新用户
4.2 AI Commit Message(AI提交信息)
Cursor可以自动生成Git提交信息,分析你的代码变更并提供有意义的提交描述。
使用方式:
– 暂存要提交的文件
– 打开Git标签页(侧边栏)
– 点击提交信息输入字段旁边的闪光(✨)图标
– AI会根据暂存的更改和仓库的git历史生成提交信息
– 生成的提交信息会基于你的暂存文件变更和项目提交历史
– 如果你使用特定提交规范(如Conventional Commits),AI会学习并遵循相同模式
设置快捷键:
– 打开键盘快捷键设置:⌘R ⌘S
或⌘⇧P
并搜索”Open Keyboard Shortcuts (JSON)”
– 添加以下代码将功能绑定到⌘M
:
{
"key": "cmd+m",
"command": "cursor.generateGitCommitMessage"
}
- 保存文件即可使用快捷键
限制说明:
– 目前没有办法自定义或提供特定指令来控制提交信息的生成方式
– Cursor会自动适应你现有的提交信息风格和规范
4.3 Rules for AI(AI规则)
Rules for AI 是 Cursor 的一个强大功能,允许你定义 AI 如何理解和处理你的代码库,从而获得更符合项目需求的建议和代码生成。
规则文件类型:
– .cursorrules
文件:放置在项目根目录的单一规则文件
– .cursor/rules
目录:更灵活的规则系统,可包含多个特定规则文件
配置方法(推荐):
1. 使用项目规则系统:在项目中创建 .cursor/rules
目录
2. 通过命令面板创建新规则:Cmd + Shift + P
> New Cursor Rule
3. 为不同文件类型或目录创建特定规则
4. 使用glob模式指定规则适用的文件(如 *.tsx
或 src/components/**/*
)
5. 可以使用@file引用其他文件作为上下文
全局规则:
– 在Cursor设置 > 通用 > Rules for AI中设置
– 适用于所有项目的全局规则,如输出语言、响应长度等
规则文件内容示例:
你是一位严格遵循项目代码风格的React开发专家。
代码风格要求:
1. 使用函数组件和React Hooks,不使用类组件
2. 使用TypeScript进行类型定义
3. 采用单引号而非双引号
4. 使用Tailwind CSS进行样式设计
5. 组件名称使用PascalCase命名法
6. 文件名与组件名保持一致
项目结构:
- src/components: 所有可重用UI组件
- src/hooks: 自定义React钩子
- src/pages: 页面组件,对应路由
- src/utils: 工具函数
- src/services: API调用和数据处理
当你被要求创建新组件时,应确保:
- 组件实现功能完整
- 添加适当的TypeScript类型
- 包含必要的注释
- 考虑性能优化
- 考虑组件的可访问性(a11y)
技术栈特定规则:
可以根据项目技术栈选择或定制不同的规则,例如:
– React/Next.js 规则:定义组件结构、hooks使用、状态管理等
– Python/FastAPI 规则:定义API结构、错误处理、文档生成等
– TypeScript 规则:定义类型系统、接口设计、命名约定等
如何利用社区规则:
– 访问 awesome-cursorrules 仓库查找适合你技术栈的规则
– 访问 cursor.directory/rules 浏览和下载分类规则
– 将找到的规则文件复制到你的项目中,并根据需要进行调整
规则的优势:
– 确保AI生成的代码符合项目标准和最佳实践
– 减少后期调整和重构的时间
– 帮助团队保持一致的代码风格
– 让AI更好地理解项目架构和设计决策
– 提高AI代码建议的质量和相关性
高级技巧:
– 为不同文件类型创建不同规则
– 在规则文件中引用项目中的示例文件作为参考
– 定期更新规则以反映项目的演进
– 在规则中包含项目特定的库和API使用指南
通过精心设计的规则,你可以将Cursor AI转变为真正理解你项目需求的协作伙伴,而不只是一个通用代码生成工具。
4.4 @ Symbols(引用符号)
在与AI交流时使用@符号引用文件、函数或类。
使用方式:
– 在聊天窗口中使用@符号引用代码元素
– 例如:@UserController.ts 或 @createUser函数
– 这让AI能够精确理解你提问的上下文
4.5 Ignore Files(忽略文件)
你可以配置Cursor忽略特定文件或目录,避免AI处理敏感或不相关的代码。这是保护隐私和敏感数据的关键方法。
使用方式:
– 创建.cursorignore
文件(类似于.gitignore
)
– 指定要忽略的文件模式
– 这些文件将不会被Cursor索引或提供给AI
示例配置:
# 忽略敏感配置文件
config/secrets.js
*.env
*password*
*credential*
*secret*
*private*
# 忽略大型生成文件
dist/
node_modules/
build/
# 忽略临时文件
*.tmp
*.log
# 忽略可能包含个人信息的文件
user_data/
personal_info/
最佳实践:
– 在项目开始时就设置.cursorignore
文件
– 定期审查并更新忽略列表
– 团队项目中统一.cursorignore
配置
– 考虑在全局~/.cursorignore
文件中设置通用敏感文件模式
– 使用Cursor设置
> 功能
> 代码库索引
> 显示忽略的文件
检查哪些文件被忽略
这样,包含敏感信息的文件不会被AI访问,提高了项目安全性和个人/组织隐私保护。
5. 实用案例分享
案例1: 快速实现新功能
场景:需要为电商网站添加购物车功能
操作步骤:
1. 在Cursor中创建新文件ShoppingCart.js
2. 使用聊天或⌘K功能:创建一个React购物车组件,支持添加商品、修改数量、删除商品和计算总价
3. AI生成基础代码,包含核心功能实现
4. 通过聊天功能询问:”如何添加商品持久化到localStorage?”
5. 根据AI建议修改代码
6. 使用Agent功能进行整体代码优化
效果:原本需要2-3小时的功能开发,在30分钟内完成了包含持久化和优化的完整实现。
案例2: 调试复杂问题
场景:应用中出现了内存泄漏问题
操作步骤:
1. 将可能有问题的代码粘贴到Cursor
2. 使用聊天功能询问(通过快捷键Ctrl/⌘ + L
打开AI面板):”这段代码可能存在什么内存泄漏问题?”
3. AI分析并指出潜在问题(例如React useEffect中未清理的事件监听器)
4. 要求AI提供修复建议
5. 应用建议的修复方案(可使用Tab
键快速接受建议或Ctrl/⌘ + Enter
应用更改)
效果:快速识别并解决了难以追踪的内存泄漏问题,避免了长时间的调试过程。
6. 键盘快捷键参考
功能 | Windows 快捷键 | Mac 快捷键 |
---|---|---|
快速内联代码编辑 | Ctrl+K | Cmd+K |
打开Composer | Ctrl+I | Cmd+I |
打开Ask(聊天) | Ctrl+L | Cmd+L |
在Composer中切换Agent模式 | Ctrl+. | Cmd+. |
切换AI模型 | Ctrl+/ | Cmd+/ |
打开历史记录 | Ctrl+Alt+L | Cmd+Option+L |
新建Composer对话 | Ctrl+N | Cmd+N |
提交带代码库搜索 | Ctrl+Enter | Cmd+Enter |
添加选中代码到Ask | Ctrl+Shift+L | Cmd+Shift+L |
添加选中代码到新对话 | Ctrl+L | Cmd+L |
打开命令面板 | Ctrl+Shift+P | Cmd+Shift+P |
文件间跳转 | Ctrl+P | Cmd+P |
打开终端 | Ctrl+| Cmd+ |
|
接受AI建议 | Tab | Tab |
接受下一个词 | Ctrl+→ | Cmd+→ |
取消AI建议 | Esc | Esc |
7. 提效技巧总结
- 掌握⌘K快速编辑功能:这是Cursor最强大的工具之一,可用于生成和修改代码
- 使用Agent处理大型代码变更:对于跨文件的复杂修改,Agent功能更为适合
- 结合明确提示:给AI提供明确、详细的指令可获得更精准的代码生成
- 利用代码库索引:让AI理解整个项目结构以获得更准确的建议
- 使用@符号引用:精确指定你想要AI关注的代码元素
- 迭代式开发:先生成基础版本,然后通过对话方式逐步完善
- 将复杂问题分解:对于复杂任务,将其分解为多个简单步骤让AI处理效果更好
- 设置AI规则:为项目定义规则,确保AI生成的代码符合项目标准
- 结合版本控制:在尝试AI建议前提交当前代码,便于比较或恢复
8. 注意事项
- 代码审查:始终审查AI生成的代码,确保其正确性和安全性
- 理解原理:不要只复制粘贴代码,要理解其工作原理
- 网络依赖:Cursor需要网络连接才能发挥AI功能
- 隐私考虑:
- 避免将敏感信息或专有代码提交给AI处理
- Cursor会收集和处理您的代码以提供AI功能,包括代码补全和分析
- 使用
.cursorignore
文件排除敏感文件和目录,防止它们被索引和发送至AI服务 - 在公司或团队环境中工作时,建议咨询IT或法律部门关于使用AI编码工具的政策
隐私设置选项:
- 在
Cursor设置
>隐私
中管理数据收集选项 - 可以选择退出遥测数据收集(
Cursor设置
>隐私
>禁用遥测
) - 使用自托管部署模式减少数据外传(企业版功能)
- 选择本地处理的AI模型选项减少数据传输
- 管理聊天记录和索引数据:
Cursor设置
>隐私
>清除本地数据
- 使用
Ctrl/⌘ + Shift + P
>Clear AI History
清除AI交互历史
- 模型选择:在设置中选择适合你需求的AI模型
- 自定义API密钥:
- 需要更高级功能或更好的隐私控制时,可以配置自己的API密钥
- 通过
Cursor设置
>AI服务
>使用自定义API密钥
进行设置 - 这样可以确保所有AI请求通过您自己的API密钥发送
- 利用自定义API密钥可以:
- 通过您自己的账户控制数据处理流程
- 使用您组织可能已有的企业级AI服务协议
- 应用组织层面的使用策略和限制
- 获得更详细的使用统计和成本控制
- 设置自己的AI模型端点以使用私有部署的模型
- 持续学习:AI是辅助工具,不应替代持续学习和提升编程技能
9. 提示工程最佳实践
9.1 有效提示的特点
- 具体而非模糊:写”为用户数据创建一个React表格组件,包含排序和过滤功能”,而非简单的”创建一个表格”
- 提供上下文:说明代码的用途、目标受众和特殊需求
- 明确格式要求:指定需要遵循的代码风格或模式
- 分步骤请求:复杂任务拆分为多个小步骤逐一完成
9.2 提示模板示例
代码生成模板:
创建一个[语言]函数,用于[具体功能]。
要求:
1. 包含[特定功能点]
2. 处理[边缘情况]
3. 遵循[代码规范]
代码重构模板:
重构以下代码,目标是[具体目标,如提高性能/可读性]:
[粘贴代码]
请特别注意:
1. [特别关注点]
2. [需要保留的行为]
10. 结语
Cursor作为AI驱动的代码编辑器,通过智能代码补全(Tab)、AI配对编程(Agent)、快速内联代码编辑(Cmd-K/⌘K)和上下文感知AI助手(Ask)等核心功能,显著提升了开发效率。掌握这些功能,可以帮助开发者加速代码编写和重构过程,减少重复性工作,并帮助解决复杂问题。
随着AI技术的不断发展,Cursor及类似工具将继续改变开发者的工作方式,提供更强大的编程辅助能力。通过将AI与传统编码经验相结合,开发者可以达到前所未有的生产力水平,同时提高代码质量和工作满意度。
发表回复