Cursor深度使用指南¶
🚀 掌握Cursor编辑器的高级技巧,让AI成为你的编程搭档
📖 本章概述¶
Cursor是一款基于VS Code的AI编辑器,深度集成了Claude和GPT-4等大语言模型。本章将详细介绍Cursor的核心功能和使用技巧。
学习目标¶
- 掌握Composer、Chat、Agent三种模式的使用场景
- 熟练使用@codebase、@docs、@web等引用功能
- 配置自定义规则提升AI理解能力
- 建立高效的Cursor工作流
🛠️ 工具介绍¶
Cursor是什么¶
┌─────────────────────────────────────────────────────────────┐
│ Cursor 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ VS Code 基础 │ │
│ │ (扩展生态、快捷键、界面布局) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ AI 能力层 │ │
│ │ (Claude/GPT-4/自定义模型) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 交互模式 │ │
│ │ (Tab补全/Chat/Composer/Agent) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
核心功能一览¶
| 功能 | 描述 | 快捷键 |
|---|---|---|
| Tab补全 | 智能代码补全 | Tab |
| Chat | 对话式编程 | Cmd/Ctrl + L |
| Composer | 多文件编辑 | Cmd/Ctrl + I |
| Agent | 自主任务执行 | Cmd/Ctrl + . |
| @引用 | 上下文引用 | @ |
| Cmd K | 行内编辑 | Cmd/Ctrl + K |
🎯 基础用法¶
安装与配置¶
- 下载安装
- 访问 cursor.sh 下载
-
支持Windows、macOS、Linux
-
首次配置
-
导入VS Code设置
- Cursor可以导入你现有的VS Code配置
- 支持大部分VS Code扩展
Tab补全¶
最基础但最常用的功能:
# 示例:输入函数名后,Tab补全函数体
def calculate_fibonacci(n):
# 按Tab后,AI自动补全:
def calculate_fibonacci(n):
if n <= 1:
return n
return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)
使用技巧: - 写好函数签名和注释,AI补全质量更高 - 用// TODO:描述意图,AI会帮你实现 - 补全后检查逻辑,不要盲目接受
Chat模式¶
对话式编程,适合复杂问题:
┌─────────────────────────────────────────────────────────────┐
│ Chat 面板 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户: 帮我写一个Python函数,实现快速排序算法 │
│ │
│ AI: 好的,这是一个快速排序的实现: │
│ │
│ ```python │
│ 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: 可以使用原地排序版本... │
│ │
└─────────────────────────────────────────────────────────────┘
快捷键: - Cmd/Ctrl + L:打开Chat面板 - Cmd/Ctrl + Enter:发送消息 - Esc:关闭面板
🚀 高级技巧¶
Composer模式详解¶
Composer是Cursor的核心功能,支持多文件编辑:
┌─────────────────────────────────────────────────────────────┐
│ Composer 工作流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入需求 ──> AI分析代码库 ──> 生成修改方案 ──> 预览确认 │
│ │ │ │ │ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ 描述任务 理解上下文 多文件修改 接受/拒绝 │
│ │
└─────────────────────────────────────────────────────────────┘
使用场景:
-
功能开发
-
代码重构
-
Bug修复
Composer最佳实践:
✅ 好的Composer提示词:
- 明确描述需求:"创建一个用户注册功能,包含邮箱验证"
- 提供上下文:"参考现有的登录功能实现"
- 指定约束:"使用TypeScript,遵循项目代码规范"
❌ 不好的Composer提示词:
- 过于模糊:"帮我写点代码"
- 缺乏上下文:"添加功能"
- 目标不清:"优化一下"
Agent模式工作流¶
Agent模式让AI能够自主执行复杂任务:
┌─────────────────────────────────────────────────────────────┐
│ Agent 工作模式 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 理解任务 │ --> │ 制定计划 │ --> │ 执行步骤 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌─────────┐ │
│ │ │ 验证结果 │ │
│ │ └─────────┘ │
│ │ │ │
│ └───────────────────────────────┘ │
│ (循环直到完成) │
│ │
└─────────────────────────────────────────────────────────────┘
Agent模式示例:
用户:帮我搭建一个Express.js REST API项目
Agent执行过程:
1. 创建项目结构
- package.json
- src/
- index.js
- routes/
- controllers/
- middleware/
2. 安装依赖
- express
- dotenv
- cors
3. 配置基础代码
- 服务器入口
- 路由设置
- 错误处理
4. 添加示例API
- GET /api/health
- CRUD示例
5. 生成文档
- README.md
- API文档
@引用功能¶
@引用让你精确控制AI的上下文:
| 引用类型 | 用途 | 示例 |
|---|---|---|
@codebase | 搜索整个代码库 | "@codebase 找到所有API调用" |
@docs | 引用文档 | "@docs React Hooks用法" |
@web | 搜索网络 | "@web 最新Node.js版本特性" |
@file | 引用特定文件 | "@file src/utils.ts 解释这个函数" |
@folder | 引用文件夹 | "@folder src/components 审查这些组件" |
@git | Git相关 | "@git 最近的提交" |
@problems | 当前问题 | "@problems 帮我修复这些错误" |
使用示例:
┌─────────────────────────────────────────────────────────────┐
│ @codebase 搜索整个项目 │
├─────────────────────────────────────────────────────────────┤
│ 用户: @codebase 项目中如何处理用户认证? │
│ │
│ AI: 根据代码库分析,项目使用以下方式处理认证: │
│ 1. JWT Token存储在localStorage │
│ 2. axios拦截器自动添加Authorization头 │
│ 3. 路由守卫检查登录状态 │
│ 相关文件: │
│ - src/utils/auth.ts │
│ - src/api/interceptors.ts │
│ - src/router/guards.ts │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ @web 搜索网络资源 │
├─────────────────────────────────────────────────────────────┤
│ 用户: @web Next.js 14的新特性有哪些? │
│ │
│ AI: 根据网络搜索,Next.js 14的主要新特性包括: │
│ 1. Turbopack稳定版 │
│ 2. Server Actions稳定版 │
│ 3. Partial Prerendering (预览) │
│ 4. Metadata API改进 │
│ ... │
└─────────────────────────────────────────────────────────────┘
自定义规则配置¶
通过.cursorrules文件定制AI行为:
# .cursorrules 示例
## 项目信息
- 项目类型:React + TypeScript
- 状态管理:Zustand
- 样式方案:Tailwind CSS
## 代码规范
- 使用函数组件和Hooks
- 优先使用命名导出
- 组件文件使用PascalCase命名
- 工具函数使用camelCase命名
## 禁止事项
- 不要使用any类型
- 不要使用var声明
- 不要内联样式
## 偏好设置
- 优先使用可选链操作符 ?.
- 使用const优于let
- 优先使用箭头函数
## 注释规范
- 公共函数必须有JSDoc注释
- 复杂逻辑需要行内注释
- 使用中文注释
规则优先级:
💡 最佳实践¶
工作流建议¶
┌─────────────────────────────────────────────────────────────┐
│ 推荐的Cursor工作流 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 开始新功能 │
│ └─> 使用Composer描述需求 │
│ └─> 预览修改,确认后应用 │
│ │
│ 2. 编码过程 │
│ └─> Tab补全加速编码 │
│ └─> Cmd K 进行行内修改 │
│ └─> Chat 询问复杂问题 │
│ │
│ 3. 调试问题 │
│ └─> @problems 查看错误 │
│ └─> @codebase 搜索相关代码 │
│ └─> Agent 模式自动修复 │
│ │
│ 4. 代码审查 │
│ └─> @git 查看变更 │
│ └─> Chat 请求审查建议 │
│ └─> Composer 批量优化 │
│ │
└─────────────────────────────────────────────────────────────┘
提示词模板¶
功能开发模板:
请帮我实现 [功能名称]:
需求描述:
- [具体需求1]
- [具体需求2]
技术要求:
- 使用 [技术栈]
- 遵循 [代码规范]
参考:
- @file [相关文件路径]
- 类似 [参考实现]
Bug修复模板:
[粘贴错误信息]代码审查模板:
请审查以下代码:
@file [文件路径] 或 @folder [文件夹路径]
审查重点:
- [ ] 代码质量
- [ ] 性能问题
- [ ] 安全隐患
- [ ] 最佳实践
请给出改进建议。
快捷键速查¶
| 操作 | Mac | Windows/Linux |
|---|---|---|
| 打开Chat | Cmd + L | Ctrl + L |
| 打开Composer | Cmd + I | Ctrl + I |
| 行内编辑 | Cmd + K | Ctrl + K |
| Agent模式 | Cmd + . | Ctrl + . |
| 接受补全 | Tab | Tab |
| 拒绝补全 | Esc | Esc |
| 新建Chat | Cmd + Shift + L | Ctrl + Shift + L |
| 清除Chat | Cmd + K (在Chat中) | Ctrl + K (在Chat中) |
❓ 常见问题¶
Q1: Tab补全不准确怎么办?¶
解决方案: 1. 提供更清晰的上下文(函数签名、注释) 2. 使用.cursorrules指定代码规范 3. 在Chat中明确描述需求后再编码
Q2: Composer修改太多文件怎么办?¶
解决方案: 1. 使用Preview模式仔细检查 2. 分步骤执行,一次只做一件事 3. 使用Git确保可以回滚
Q3: AI不理解我的项目结构?¶
解决方案: 1. 确保@codebase索引完成 2. 在.cursorrules中描述项目结构 3. 使用@folder或@file明确指定上下文
Q4: 如何保护敏感代码?¶
解决方案: 1. 在设置中启用隐私模式 2. 使用.cursorignore排除敏感文件 3. 敏感项目考虑使用本地模型
Q5: 生成代码质量不高?¶
解决方案: 1. 提供更详细的需求描述 2. 在.cursorrules中定义代码规范 3. 使用示例代码作为参考 4. 多轮迭代优化
🎯 实战案例¶
案例1:快速搭建REST API¶
需求: 创建一个用户管理API
操作步骤:
- 打开Composer (
Cmd + I) -
输入需求:
-
预览生成的文件
- 接受修改
生成结果:
project/
├── src/
│ ├── index.ts # 入口文件
│ ├── routes/
│ │ └── users.ts # 用户路由
│ ├── controllers/
│ │ └── userController.ts # 控制器
│ ├── middleware/
│ │ └── errorHandler.ts # 错误处理
│ ├── types/
│ │ └── user.ts # 类型定义
│ └── validators/
│ └── userValidator.ts # 数据验证
├── package.json
└── tsconfig.json
案例2:重构遗留代码¶
需求: 将回调风格的代码改为Promise
原始代码:
// 旧代码
function getUserData(userId, callback) {
database.connect(function(err, conn) {
if (err) return callback(err);
conn.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {
if (err) return callback(err);
callback(null, results[0]);
});
});
}
操作步骤:
- 选中代码
- 按
Cmd + K打开行内编辑 - 输入:"将这个函数改为async/await风格"
生成代码:
// 重构后
async function getUserData(userId) {
const conn = await database.connect();
const results = await conn.query('SELECT * FROM users WHERE id = ?', [userId]);
return results[0];
}
案例3:添加单元测试¶
需求: 为工具函数添加测试
操作步骤:
- 打开Chat (
Cmd + L) - 输入:
生成测试:
// src/utils/__tests__/calculator.test.ts
import { add, subtract, multiply, divide } from '../calculator';
describe('Calculator', () => {
describe('add', () => {
it('should add two positive numbers', () => {
expect(add(1, 2)).toBe(3);
});
it('should handle negative numbers', () => {
expect(add(-1, -2)).toBe(-3);
});
it('should handle zero', () => {
expect(add(0, 5)).toBe(5);
});
});
describe('divide', () => {
it('should divide two numbers', () => {
expect(divide(10, 2)).toBe(5);
});
it('should throw error when dividing by zero', () => {
expect(() => divide(10, 0)).toThrow('Division by zero');
});
});
});
📝 学习检查点¶
完成本章学习后,请确认你已掌握:
基础能力¶
- 能够使用Tab补全加速编码
- 能够使用Chat进行对话编程
- 了解Composer和Agent的区别
中级能力¶
- 能够使用@引用精确控制上下文
- 能够配置和使用.cursorrules
- 掌握常用快捷键
高级能力¶
- 能够使用Composer完成复杂功能开发
- 能够使用Agent自动化任务
- 建立了个人化的Cursor工作流
🔗 相关资源¶
下一章: 02-GitHub-Copilot精通 - 学习Copilot全家桶的使用技巧