Cursor是什么?为什么你需要它
Cursor是基于VS Code的AI代码编辑器,由前OpenAI工程师创办。与普通IDE相比,Cursor的核心优势是深度集成AI能力到代码编辑的每个环节——不是简单的Copilot自动补全,而是能理解整个项目上下文、帮你做决策、甚至帮你写完整功能的AI助手。
Cursor vs 普通IDE的核心区别:
- 整文件编辑:不只是补全代码,而是重写整个函数/文件
- 项目级上下文:AI知道你的项目结构、历史、依赖,可以做全局性修改
- 多文件协作:一个命令修改多个文件,保持一致性
- 对话式开发:像和高级工程师聊天一样写代码
价格与版本:
| 版本 | 价格 | 功能 | 适合人群 |
|---|---|---|---|
| Free | 免费 | 100次Composer使用(GPT-4)/月,基础AI补全 | 轻度使用、尝鲜 |
| Pro | $20/月 | 无限Composer,Claude 3.5 Sonnet,优先队列 | 专业开发者(推荐) |
| Business | $40/用户/月 | 团队共享Rules,代码审查,SSO | 团队 |
| Enterprise | 定制 | 私有模型部署,SOC2合规 | 大企业 |
安装与初始配置
2.1 下载与安装
# 方法一:官网下载(最简单)
# 访问 https://cursor.sh 直接下载对应系统的安装包
# Windows: .exe installer
# macOS: .dmg 包
# Linux: .AppImage 或 .deb
# 方法二:命令行安装(Linux/macOS)
# 下载AppImage后
chmod +x ~/Downloads/cursor-*.AppImage
~/Downloads/cursor-*.AppImage # 直接运行
# 方法三:使用包管理器(macOS)
brew install --cask cursor
# 方法四:snap(Ubuntu)
sudo snap install cursor --classic2.2 初始配置向导
第一次打开Cursor,会引导你做初始配置。按步骤完成:
- 导入VS Code设置:如果你是VS Code用户,可以一键导入主题、快捷键、扩展
- 登录/注册账号:用Google或邮箱注册,有免费额度
- 选择默认AI模型:推荐选Claude 3.5 Sonnet或GPT-4
- 安装基础扩展:Prettier、ESLint等(可选)
2.3 API Key配置(重要)
Cursor内置了免费额度,但如果想 unlimited 使用,需要配置自己的API Key:
# 1. 获取API Key
# OpenAI: https://platform.openai.com/api-keys
# Anthropic: https://console.anthropic.com/settings/keys
# 2. 在Cursor中配置
# Settings → Models → API Keys
# 或者快捷键 Cmd/Ctrl + K 打开Command Panel,搜索 "API Keys"
# 3. 设置环境变量(可选,用于自定义模型)
# Cursor支持自定义模型Endpoint,比如用本地Ollama
export OPENAI_API_KEY="sk-xxxxx"
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
# 4. 设置默认模型(按项目或全局)
# 推荐:Claude 3.5 Sonnet(性价比最高,效果好)
# 次选:GPT-4o(贵但稳定)
# 本地:Ollama(免费但需要本地GPU)2.4 主题与界面配置
# 推荐主题配置
# 1. 打开 Settings → Theme
# 2. 推荐使用深色主题减少眼睛疲劳
# 3. 推荐主题:
# - One Dark Pro(经典)
# - Dracula Official(护眼)
# - GitHub Dark(简洁)
# 字体配置(重要!)
# Settings → Font → Font Family
# 推荐:JetBrains Mono 或 Fira Code(连体字好看)
# 字体大小:14-16px(根据屏幕大小调整)
# 行高:1.6
# 标签页配置
# Settings → Workbench → Tabs
# 勾选:Word wrap in tabs
# 拖拽调整标签位置基础功能详解:AI辅助编程的核心用法
3.1 Cmd/Ctrl + K:inline补全与修改
这是Cursor最核心的功能。按下 Cmd/Ctrl + K 后,会弹出AI编辑面板,你可以:
- 选中文本后提问,让AI解释或改写
- 选中代码后,让AI添加注释、错误修复、性能优化
- 输入自然语言描述,让AI生成代码插入到光标位置
# ============================================
# Cmd/Ctrl + K 实战用法
# ============================================
# 场景1:解释代码
# 选中你不理解的代码 → 按 Cmd/Ctrl + K → 输入 "解释这段代码"
# 场景2:修复错误
# 选中报错的代码 → 按 Cmd/Ctrl + K → 输入 "这个bug怎么修"
# 场景3:生成类似代码
# 在光标位置 → 按 Cmd/Ctrl + K → 输入 "写一个获取用户列表的API接口"
# AI会直接在光标处插入代码
# 场景4:添加测试
# 选中要测试的函数 → 按 Cmd/Ctrl + K → 输入 "为这个函数写单元测试"
# 场景5:翻译语言
# 选中Python代码 → 按 Cmd/Ctrl + K → 输入 "翻译成Go"3.2 Cmd/Ctrl + L:聊天式问答
Cmd/Ctrl + L 打开一个聊天窗口,可以像和AI对话一样问问题。它会记住当前的代码上下文,你问它关于当前文件的问题,它能准确回答。
# ============================================
# Cmd/Ctrl + L 聊天窗口实战
# ============================================
# 常用问法示例:
# 1. 项目理解
# "这个项目的架构是怎样的?"
# "帮我分析 main.py 的执行流程"
# 2. 代码优化
# "这个函数有什么性能问题?"
# "如何重构这段代码让它更易读?"
# 3. Bug排查
# "为什么这个API调用会超时?"
# "这个并发场景下会有什么问题?"
# 4. 学习帮助
# "解释一下这个正则表达式"
# "这段代码用了什么设计模式?"
# 5. 上下文指定
# 在问问题前,可以 @ 文件名 指定上下文
# @utils.py 这个模块的作用是什么?
# @api.yaml 帮我检查这个配置有没有问题3.3 Tab:智能补全
Cursor的Tab键比普通IDE的补全智能得多。它能根据上下文预测你要写什么,不只是补全变量名,而是补全整个代码块。
# ============================================
# Tab智能补全示例
# ============================================
# 场景1:补全整个函数体
# 写完函数签名后按Tab,Cursor会补全整个函数
def calculate_total(items):
# 写完这行后按Tab,自动补全:
total = 0
for item in items:
total += item.price * item.quantity
return total
# 场景2:补全API调用
# 输入
response = requests.
# 按Tab,自动补全为
response = requests.get(url, headers={"Authorization": f"Bearer {token}"}, timeout=30)
# 场景3:补全测试用例
# 输入
def test_user_login():
# 按Tab,自动补全完整测试框架
def test_user_login():
"""Test user login functionality"""
response = client.post("/api/login", json={
"username": "test_user",
"password": "test_password"
})
assert response.status_code == 200
assert "token" in response.json()3.4 代码生成:Composer基础用法
按 Cmd/Ctrl + I 打开Composer,这是Cursor最强大的功能——可以生成整段代码、整个文件、甚至多个文件。
# ============================================
# Composer(Cmd/Ctrl + I)基础用法
# ============================================
# 打开Composer后,你可以:
# 1. 单文件生成
# 输入:"创建一个用户认证的Express中间件"
# AI会生成完整的中间件代码
# 2. 多文件生成
# 输入:"创建一个TODO应用,使用React+Express
# 包括:
# - 前端:App.jsx, components/TodoList.jsx
# - 后端:server.js, routes/todos.js
# - 数据库:models/Todo.js
# - 配置:.env.example, package.json"
# AI会生成所有文件
# 3. 重构现有代码
# 选中要重构的代码 → 打开Composer → 输入"将这个Promise改成async/await"
# AI会给出修改建议并应用
# 4. 生成测试
# 打开Composer → 输入"为这个模块生成集成测试"
# AI会分析模块依赖,生成完整的测试文件高级用法:Composer、Context、Rules
4.1 Composer高级:多文件协作与重构
Composer是Cursor最强大的功能,但它需要一些技巧才能用好。
# ============================================
# Composer高级用法:多文件重构
# ============================================
# 场景:你要重构一个混乱的项目,将其改成模块化架构
# Step 1:在Composer中描述整体目标
"""
将这个单体应用重构为模块化架构:
1. 业务逻辑从 app.py 分离到 services/ 目录
2. 数据模型分离到 models/ 目录
3. API路由分离到 routes/ 目录
4. 配置分离到 config/ 目录
5. 保持现有API兼容性不变
"""
# Step 2:Cursor会分析现有代码结构
# AI会先问你几个问题确认重构范围
# 回答:"只需要重构 api/ 和 models/ 目录,不要动 tests/"
# Step 3:确认后,Cursor会分步骤执行
# - 每个文件修改前会显示diff
# - 你可以选择 Apply、Edit、Reject
# - 可以一次 Apply 多个文件
# Step 4:重构完成后,Cursor会自动
# - 更新所有 import 语句
# - 修复可能的循环依赖
# - 生成新的项目结构文档4.2 Context:让AI精准理解你的项目
Cursor的Context机制决定了AI能否准确理解你的代码。使用好Context,能让AI的回答质量提升一个档次。
# ============================================
# Context使用技巧
# ============================================
# 1. @文件引用 - 告诉AI参考哪个文件
# 在Composer或聊天中输入:
@src/userService.ts 帮我检查这个文件有没有安全问题
# AI会读取完整文件内容进行分析
# 2. @文件夹 - 引用整个目录
@components/ 这个目录下所有组件的设计风格一致吗?
# 3. @代码块 - 引用特定代码段(选中代码后拖到Composer)
# 选中代码 → 拖拽到Composer窗口
# 这样AI只会针对这段代码提供建议
# 4. @git - 引用最近提交
@git "最近3次提交" 这次更新改了什么?
# AI会读取.git目录获取提交历史
# 5. @文档 - 引用项目文档
@docs/api.md 这个API的参数是什么?
# AI会读取/docs/api.md
# 6. @search - 搜索代码库后引用结果
@search "user authentication"
# AI会搜索所有包含"user authentication"的代码
# 7. 组合使用
@src/models/*.py @tests/ 运行这些测试,确保重构后没有回归- 不要一次引用太多Context,AI有记忆限制(通常8-10个文件)
- 引用时优先选择与问题最相关的文件
- 对于大项目,先 @search 定位到相关文件,再 @ 具体文件
- 定期清理没用的Context引用(点击X关闭)
4.3 Rules:定制你的AI行为
Rules是Cursor的"项目宪法",你可以定义AI在处理你的项目时必须遵守的规则。比如代码风格、提交规范、安全要求等。
# ============================================
# .cursor/rules 目录结构
# ============================================
# 在项目根目录创建 .cursor/rules/ 目录
# 放入以下文件:
# 1. 代码风格规则:.cursor/rules/code-style.mdc
# 文件位置:project/.cursor/rules/code-style.mdc
```markdown
# 代码风格规则
## Python
- 使用 type hints 标注所有函数参数和返回值类型
- 类名使用 PascalCase,函数名使用 snake_case
- 每个函数必须有 docstring,说明参数和返回值
- 使用 dataclass 而非字典存储结构化数据
## React/TypeScript
- 组件文件后缀:.tsx
- 样式文件后缀:.module.css
- 使用 functional component + hooks
- Props 类型定义使用 interface
- 禁止使用 any,全部用具体类型
## Git提交规范
- 使用 conventional commits 格式
- feat: 新功能
- fix: bug修复
- docs: 文档更新
- refactor: 重构
- test: 测试
```
# 2. 安全规则:.cursor/rules/security.mdc
```markdown
# 安全规则
## 禁止
- 禁止在代码中硬编码密钥,使用环境变量
- 禁止SQL拼接,使用参数化查询
- 禁止用户输入直接拼HTML,使用转义或DOMPurify
- 禁止在客户端存储敏感信息
## 必须
- 所有API必须验证输入
- 密码必须加盐哈希存储
- 文件上传必须检查文件类型和大小
- 敏感操作必须记录日志
```
# 3. 性能规则:.cursor/rules/performance.mdc
```markdown
# 性能规则
## 数据库
- 避免 N+1 查询,使用 eager loading 或 join
- 大数据量分页使用 cursor 而非 offset
- 批量操作使用 bulk_write 而非循环单条
## 前端
- 列表渲染使用虚拟滚动(超过100条时)
- 图片使用懒加载
- 避免不必要的 re-render,使用 useMemo/useCallback
```4.4 多模型切换与优化
# ============================================
# 模型选择策略
# ============================================
# Cursor支持的模型(截至2025年):
# 1. Claude 3.5 Sonnet(推荐)
# 优势:代码理解能力强,长上下文(200K),性价比高
# 适用:复杂重构、代码审查、长文件分析
# 设置:Settings → Models → Default → Claude 3.5 Sonnet
# 2. GPT-4o
# 优势:通用能力强,代码生成质量稳定
# 适用:新功能开发、需要GPT能力的场景
# 限制:贵,速度慢
# 3. Cursor Small(内置)
# 优势:免费、响应快、适合简单任务
# 适用:代码补全、简单注释、重命名变量
# 4. 本地模型(Ollama)
# 优势:免费、完全私有、不限额度
# 劣势:需要本地GPU,效果不如云端模型
# 设置:Settings → Models → Use local model → Ollama
# 5. Claude 3 Opus
# 优势:最强代码能力
# 适用:最复杂的架构设计、代码生成
# 限制:贵、慢
# ============================================
# 按任务选模型
# ============================================
# 简单任务(补全、注释、重命名)→ Cursor Small
# 标准任务(函数生成、bug修复)→ Claude 3.5 Sonnet
# 复杂任务(多文件重构、架构设计)→ Claude 3.5 Sonnet
# 最高要求(关键代码审查)→ Claude 3.5 Opus 或 GPT-4o
# 配置方法:快捷键 Cmd/Ctrl + K 后,点击模型名称切换实战工作流:如何用Cursor重构一个项目
5.1 实战案例:重构Flask单体应用为微服务架构
通过一个实际案例,展示Cursor如何帮你完成复杂重构任务。
# ============================================
# 原始代码(monolithic_app.py)
# 这是一个混乱的单体应用,所有代码都写在一个文件里
# ============================================
from flask import Flask, request, jsonify
import sqlite3
from datetime import datetime
app = Flask(__name__)
# 直接硬编码数据库路径
DB_PATH = 'app.db'
def get_db():
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
@app.route('/users', methods=['GET'])
def get_users():
db = get_db()
cursor = db.execute('SELECT * FROM users')
users = cursor.fetchall()
db.close()
return jsonify([dict(row) for row in users])
@app.route('/users', methods=['POST'])
def create_user():
data = request.json
# 没有参数验证
db = get_db()
db.execute('INSERT INTO users (name, email) VALUES (?, ?)',
[data['name'], data['email']])
db.commit()
db.close()
return jsonify({'status': 'created'}), 201
@app.route('/users/', methods=['GET'])
def get_user(user_id):
db = get_db()
cursor = db.execute('SELECT * FROM users WHERE id = ?', [user_id])
user = cursor.fetchone()
db.close()
if not user:
return jsonify({'error': 'not found'}), 404
return jsonify(dict(user))
# ... 后面还有1000多行类似代码 # ============================================
# 步骤1:打开Composer,描述重构目标
# ============================================
"""
将 monolithic_app.py 重构为模块化Flask应用,分以下步骤:
Step 1 - 创建目录结构:
```
app/
├── __init__.py # Flask应用工厂
├── config.py # 配置管理
├── models/
│ ├── __init__.py
│ └── user.py # User模型
├── routes/
│ ├── __init__.py
│ └── user_routes.py # 用户相关路由
├── services/
│ ├── __init__.py
│ └── user_service.py # 业务逻辑
├── schemas/
│ ├── __init__.py
│ └── user_schema.py # 请求/响应验证
├── utils/
│ ├── __init__.py
│ └── database.py # 数据库连接工具
├── tests/
│ ├── __init__.py
│ └── test_user.py # 单元测试
├── requirements.txt
└── run.py # 启动脚本
```
Step 2 - 重构规则:
- 使用应用工厂模式(Application Factory)
- 模型层和数据访问层分离
- 使用 marshmallow 做请求验证
- 环境变量配置所有敏感信息
- 添加类型注解
- 添加完整的docstring
Step 3 - 保持API兼容性:
- 所有路由路径保持不变
- 所有请求/响应格式保持不变
- 确保重构后原有功能不变
"""
# Cursor会逐步执行:
# 1. 先创建目录结构和空文件
# 2. 逐个文件填充内容
# 3. 每步都显示diff,你可以审批# ============================================
# Cursor生成的结果示例
# ============================================
# app/__init__.py - Flask应用工厂
"""
Flask应用工厂
创建并配置Flask应用实例
"""
from flask import Flask
from app.config import config
from app.routes import register_routes
from app.extensions import init_extensions
def create_app(config_name: str = "development") -> Flask:
"""
创建并配置Flask应用
Args:
config_name: 配置名称,可选 'development' | 'production' | 'testing'
Returns:
配置好的Flask应用实例
"""
app = Flask(__name__)
# 加载配置
app.config.from_object(config[config_name])
# 初始化扩展(如SQLAlchemy、Ma等)
init_extensions(app)
# 注册路由蓝图
register_routes(app)
# 注册错误处理
register_error_handlers(app)
return app# app/models/user.py - 模型层
"""
User数据模型
"""
from dataclasses import dataclass
from datetime import datetime
from typing import Optional
@dataclass
class User:
"""
用户数据类
Attributes:
id: 用户ID(数据库主键)
name: 用户名
email: 邮箱地址
created_at: 创建时间
updated_at: 更新时间
"""
id: Optional[int]
name: str
email: str
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
def to_dict(self) -> dict:
"""转换为字典格式,用于JSON序列化"""
return {
"id": self.id,
"name": self.name,
"email": self.email,
"created_at": self.created_at.isoformat() if self.created_at else None,
"updated_at": self.updated_at.isoformat() if self.updated_at else None
}
@classmethod
def from_db_row(cls, row) -> "User":
"""从数据库行创建User实例"""
return cls(
id=row["id"],
name=row["name"],
email=row["email"],
created_at=datetime.fromisoformat(row["created_at"]) if row.get("created_at") else None,
updated_at=datetime.fromisoformat(row["updated_at"]) if row.get("updated_at") else None
)# app/schemas/user_schema.py - 验证层
"""
用户相关的数据验证模式
使用marshmallow做请求/响应验证
"""
from marshmallow import Schema, fields, validate, validates, ValidationError
class UserCreateSchema(Schema):
"""创建用户的请求验证模式"""
name = fields.Str(
required=True,
validate=validate.Length(min=1, max=100),
error_messages={"required": "用户名不能为空"}
)
email = fields.Email(
required=True,
error_messages={
"required": "邮箱不能为空",
"invalid": "邮箱格式不正确"
}
)
@validates("name")
def validate_name(self, value):
"""用户名验证:不能包含特殊字符"""
if not value.replace(" ", "").replace("_", "").replace("-", "").isalnum():
raise ValidationError("用户名只能包含字母、数字、下划线和连字符")
class UserResponseSchema(Schema):
"""用户响应数据模式"""
id = fields.Int(dump_only=True)
name = fields.Str()
email = fields.Email()
created_at = fields.DateTime(format="iso")
updated_at = fields.DateTime(format="iso")
class UserUpdateSchema(Schema):
"""更新用户的请求验证模式"""
name = fields.Str(validate=validate.Length(min=1, max=100))
email = fields.Email()# app/services/user_service.py - 业务逻辑层
"""
用户服务层
处理用户相关的业务逻辑
"""
from typing import List, Optional
from app.models.user import User
from app.repositories.user_repository import UserRepository
class UserService:
"""
用户服务类
封装用户相关的业务逻辑
"""
def __init__(self, repository: Optional[UserRepository] = None):
"""
初始化服务
Args:
repository: 用户仓库实例,默认创建新实例
"""
self.repository = repository or UserRepository()
def get_all_users(self) -> List[User]:
"""
获取所有用户列表
Returns:
User对象列表
"""
rows = self.repository.find_all()
return [User.from_db_row(row) for row in rows]
def get_user_by_id(self, user_id: int) -> Optional[User]:
"""
根据ID获取用户
Args:
user_id: 用户ID
Returns:
User对象,如果不存在返回None
"""
row = self.repository.find_by_id(user_id)
return User.from_db_row(row) if row else None
def create_user(self, name: str, email: str) -> User:
"""
创建新用户
Args:
name: 用户名
email: 邮箱地址
Returns:
创建的User对象
Raises:
ValueError: 如果邮箱已存在
"""
# 检查邮箱是否已存在
existing = self.repository.find_by_email(email)
if existing:
raise ValueError(f"邮箱 {email} 已被注册")
user_id = self.repository.create(name=name, email=email)
return self.get_user_by_id(user_id)
def update_user(self, user_id: int, name: Optional[str] = None,
email: Optional[str] = None) -> Optional[User]:
"""
更新用户信息
Args:
user_id: 用户ID
name: 新用户名(可选)
email: 新邮箱(可选)
Returns:
更新后的User对象,不存在返回None
"""
if not self.repository.exists(user_id):
return None
self.repository.update(user_id, name=name, email=email)
return self.get_user_by_id(user_id)
def delete_user(self, user_id: int) -> bool:
"""
删除用户
Args:
user_id: 用户ID
Returns:
是否删除成功
"""
return self.repository.delete(user_id)# app/routes/user_routes.py - 路由层
"""
用户路由
定义所有用户相关的HTTP接口
"""
from flask import Blueprint, request, jsonify
from marshmallow import ValidationError
from app.schemas.user_schema import (
UserCreateSchema,
UserUpdateSchema,
UserResponseSchema
)
from app.services.user_service import UserService
from app.utils.decorators import handle_errors
user_bp = Blueprint('users', __name__, url_prefix='/users')
user_service = UserService()
user_schema = UserResponseSchema()
@user_bp.route('', methods=['GET'])
@handle_errors
def get_users():
"""
获取用户列表
Returns:
JSON: 用户列表
"""
users = user_service.get_all_users()
return jsonify([user.to_dict() for user in users])
@user_bp.route('', methods=['POST'])
@handle_errors
def create_user():
"""
创建新用户
Request Body:
- name: 用户名(必填)
- email: 邮箱(必填)
Returns:
JSON: 创建的用户信息
"""
# 验证请求数据
schema = UserCreateSchema()
try:
data = schema.load(request.json)
except ValidationError as e:
return jsonify({"errors": e.messages}), 400
# 创建用户
user = user_service.create_user(name=data['name'], email=data['email'])
return jsonify(user.to_dict()), 201
@user_bp.route('/', methods=['GET'])
@handle_errors
def get_user(user_id: int):
"""
获取单个用户
Args:
user_id: 用户ID
Returns:
JSON: 用户信息,404则返回错误
"""
user = user_service.get_user_by_id(user_id)
if not user:
return jsonify({"error": "用户不存在"}), 404
return jsonify(user.to_dict())
@user_bp.route('/', methods=['PUT', 'PATCH'])
@handle_errors
def update_user(user_id: int):
"""
更新用户信息
Args:
user_id: 用户ID
Request Body:
- name: 新用户名(可选)
- email: 新邮箱(可选)
Returns:
JSON: 更新后的用户信息,404则返回错误
"""
schema = UserUpdateSchema()
try:
data = schema.load(request.json)
except ValidationError as e:
return jsonify({"errors": e.messages}), 400
user = user_service.update_user(user_id, **data)
if not user:
return jsonify({"error": "用户不存在"}), 404
return jsonify(user.to_dict())
@user_bp.route('/', methods=['DELETE'])
@handle_errors
def delete_user(user_id: int):
"""
删除用户
Args:
user_id: 用户ID
Returns:
JSON: 空或成功消息,404则返回错误
"""
success = user_service.delete_user(user_id)
if not success:
return jsonify({"error": "用户不存在"}), 404
return jsonify({"status": "deleted"}), 200 5.2 重构后验证
重构完成后,用Cursor做集成测试验证:
# 在Composer中执行验证:
"""
运行以下验证,确保重构后API兼容性:
1. 启动应用
cd app && python run.py &
2. 测试原有API端点(保持兼容性)
# GET /users
curl http://localhost:5000/users
# 预期:返回用户列表,格式与原来一致
# POST /users
curl -X POST http://localhost:5000/users \
-H "Content-Type: application/json" \
-d '{"name": "test", "email": "test@example.com"}'
# 预期:返回201创建成功
# GET /users/:id
curl http://localhost:5000/users/1
# 预期:返回该用户信息
3. 检查新功能
- 参数验证是否工作
- 错误处理是否返回正确格式
4. 生成测试覆盖率报告
pytest --cov=app --cov-report=term-missing
# 预期:核心功能测试覆盖率 > 90%
"""快捷键速查表
| 快捷键 | 功能 | macOS | Windows/Linux |
|---|---|---|---|
| AI补全/编辑 | 打开AI编辑面板 | Cmd + K | Ctrl + K |
| AI聊天 | 打开AI聊天窗口 | Cmd + L | Ctrl + L |
| Composer | 打开Composer(生成代码) | Cmd + I | Ctrl + I |
| 接受补全 | 接受AI代码建议 | Tab | Tab |
| 拒绝补全 | 拒绝AI建议 | Esc | Esc |
| 查看差异 | 查看AI修改的diff | Cmd + Shift + Enter | Ctrl + Shift + Enter |
| 引用文件 | 在AI中引用文件 | Cmd + / | Ctrl + / |
| 切换模型 | 切换当前使用的AI模型 | Cmd + Shift + M | Ctrl + Shift + M |
| 全部接受 | 接受所有AI修改 | Cmd + Shift + A | Ctrl + Shift + A |
| 全部拒绝 | 拒绝所有AI修改 | Cmd + Shift + D | Ctrl + Shift + D |
| 专注模式 | 隐藏所有面板,全屏写代码 | Cmd + Shift + F | Ctrl + Shift + F |
| Terminal | 打开集成终端 | Ctrl + ` | Ctrl + ` |
常见问题与排错
6.1 AI不工作/无响应
# 问题1:AI完全无响应
# 解决方案:
1. 检查网络连接(Cursor需要联网)
2. 检查API Key是否有效:Settings → Models → API Keys
3. 切换模型试试(有时某个模型服务不稳定)
4. 重启Cursor:完全退出后重新打开
# 问题2:补全慢/卡顿
# 解决方案:
1. 减少同时打开的文件数量(AI需要分析所有打开的文件)
2. 关闭不需要的扩展(扩展会消耗资源)
3. 降低模型速度设置:Settings → Models → Speed → "Faster"
4. 使用Cursor Small模型(最快)
# 问题3:Context上下文丢失
# 解决方案:
1. 定期清理没用的Context引用
2. 打开Composer后按 Clear 按钮清空历史
3. 拆分大文件:超过2000行的文件AI可能处理不好6.2 API Key问题
# 问题:提示 "Invalid API Key" 或 "Quota exceeded"
# 排查步骤:
# 1. 检查Key是否正确
# Settings → Models → API Keys
# 确认复制的Key没有多余空格
# 2. 检查Key来源
# OpenAI Key: https://platform.openai.com/api-keys
# Anthropic Key: https://console.anthropic.com/settings/keys
# 3. 检查用量
# OpenAI: https://platform.openai.com/usage
# 确认还有额度
# 4. 检查账单
# 有时候欠费也会导致无法使用
# OpenAI需要先充值才能用
# 5. 尝试其他模型
# 如果OpenAI Key出问题,切换到Anthropic试试
# Settings → Models → Default Model → Claude 3.5 Sonnet6.3 代码质量问题
- 提供更多上下文:@ 相关文件,让AI了解项目风格
- 用Rules定义标准:在 .cursor/rules/ 写好代码规范
- 分步骤提问:不要一次要求太多,先让AI理解再生成
- 审查AI输出:Composer生成的代码必须review后再应用
- 迭代优化:AI第一次可能不完美,给反馈让它改进
6.4 性能优化
# Cursor性能调优
# 1. 减少内存占用
# - 关闭不需要的标签页
# - 限制打开的文件数量
# - 禁用不用的扩展
# 2. 加快AI响应
# - 使用Cursor Small做简单任务
# - 减少Context引用的文件数量
# - 使用本地模型(Ollama)避免网络延迟
# 3. 配置优化
# Settings → Features → AI Features
# - 关闭 "Automatically fetch context"
# - 设置 "Max context files" 为 10
# - 降低 "AI autocomplete max tokens"
# 4. 定期清理
# Cmd/Ctrl + Shift + P → "Clear AI Context"
# Cmd/Ctrl + Shift + P → "Clear Cache"总结
Cursor是目前最强大的AI代码编辑器之一,它将AI能力深度集成到代码编辑的每个环节。核心价值:
- Cmd/Ctrl + K:AI编辑,修改、解释、生成代码
- Cmd/Ctrl + L:AI聊天,问问题、调试、分析
- Cmd/Ctrl + I:Composer,生成完整功能、多文件协作
- Context机制:@文件让AI精准理解项目上下文
- Rules:定制AI行为,让它符合你的代码规范
善用这些功能,开发效率可以提升2-3倍。但记住:AI是助手,不是替代者,最终的代码质量和安全性还是要靠你来把关。