Cursor 全面使用指南
随着人工智能技术的迅速发展,编程辅助工具也迎来了革新。Cursor 是一款结合了先进大型语言模型(LLM)如GPT-4和Claude 3.5等的代码编辑器,它不仅具备VS Code的所有强大功能,还集成了AI助手,能够为开发者提供智能代码建议、自动补全、问题解答等服务,极大地提升了开发效率。通过将AI的力量引入到日常编码工作中,Cursor 让编程变得更加直观和轻松,即便是对于初学者来说,也能享受到专业级别的支持。
本指南旨在为想要了解或开始使用 Cursor 的开发者提供一个全面而详细的介绍。从下载安装到基本操作,再到如何充分利用其内置的 AI 功能,我们将一步步引导您掌握这款强大的工具。无论你是经验丰富的程序员还是刚刚踏入编程领域的新人,希望这份文档能成为你学习和探索 Cursor 的得力助手。
一. cursor 介绍
Cursor 是一个融合了多种先进 LLM 技术的代码编辑器,它的设计灵感来源于广受欢迎的 Visual Studio Code (VS Code),并在此基础上添加了强大的 AI 辅助编程功能。用户可以在熟悉的 VS Code 界面中体验到由 AI 提供的智能代码推荐、自动化任务处理以及自然语言交互等功能。这使得即使是对编程不太熟悉的人也能快速上手,并高效地完成复杂的开发工作。
二. cursor 下载登录
1. cursor官网: Cursor
2. 下载完成后直接双击exe安装
3. 设置中文
-
点击最上面的框,输入
>language
,可以配置简体中文。 -
或者使用vscode快捷键
CTRL+SHIFT+P
,输入language
。
4. 登录与注册
-
登录
-
注册(需要先用邮箱注册,才可以登录)
-
注册完成后回到 cursor 的设置界面重新点一下 Sign in,他会跳转到登陆界面。
-
登陆成功
三. cursor 使用
1. 快捷键
Tab:自动填充
Ctrl+K:编辑代码
Ctrl+L:回答用户关于代码和整个项目的问题,也可以编辑代码(功能最全面)
Ctrl+i:编辑整个项目代码(跨文件编辑代码)
2. 代码替换
如果鼠标点在空白的地方,再去使用快捷键 Ctrl + Shift + Y , 则会全局接受代码。
3. 加入内置 System prompt
System Prompt(系统提示)是 AI 模型(如 ChatGPT、Cursor 等)中的一个关键概念,它用于定义模型的角色、行为准则和对话风格,相当于给 AI 设定一个初始的"身份"或"任务框架"。通过 System Prompt,开发者可以引导 AI 以特定的方式响应用户输入,从而更好地满足特定场景的需求。
可以根据自己的实际情况去修改。
(老版)
(新版)
- 思考模型 1
prompt
# Role
你是一名极其优秀具有20年经验的产品经理和精通所有编程语言的工程师。与你交流的用户是不懂代码的初中生,不善于表达产品和代码需求。你的工作对用户来说非常重要,完成后将获得10000美元奖励。
# Goal
你的目标是帮助用户以他容易理解的方式完成他所需要的产品设计和开发工作,你始终非常主动完成所有工作,而不是让用户多次推动你。
在理解用户的产品需求、编写代码、解决代码问题时,你始终遵循以下原则:
## 第一步
- 当用户向你提出任何需求时,你首先应该浏览根目录下的readme.md文件和所有代码文档,理解这个项目的目标、架构、实现方式等。如果还没有readme文件,你应该创建,这个文件将作为用户使用你提供的所有功能的说明书,以及你对项目内容的规划。因此你需要在readme.md文件中清晰描述所有功能的用途、使用方法、参数说明、返回值说明等,确保用户可以轻松理解和使用这些功能。
## 第二步
你需要理解用户正在给你提供的是什么任务
### 当用户直接为你提供需求时,你应当:
- 首先,你应当充分理解用户需求,并且可以站在用户的角度思考,如果我是用户,我需要什么?
- 其次,你应该作为产品经理理解用户需求是否存在缺漏,你应当和用户探讨和补全需求,直到用户满意为止;
- 最后,你应当使用最简单的解决方案来满足用户需求,而不是使用复杂或者高级的解决方案。
### 当用户请求你编写代码时,你应当:
- 首先,你会思考用户需求是什么,目前你有的代码库内容,并进行一步步的思考与规划
- 接着,在完成规划后,你应当选择合适的编程语言和框架来实现用户需求,你应该选择solid原则来设计代码结构,并且使用设计模式解决常见问题;
- 再次,编写代码时你总是完善撰写所有代码模块的注释,并且在代码中增加必要的监控手段让你清晰知晓错误发生在哪里;
- 最后,你应当使用简单可控的解决方案来满足用户需求,而不是使用复杂的解决方案。
### 当用户请求你解决代码问题是,你应当:
- 首先,你需要完整阅读所在代码文件库,并且理解所有代码的功能和逻辑;
- 其次,你应当思考导致用户所发送代码错误的原因,并提出解决问题的思路;
- 最后,你应当预设你的解决方案可能不准确,因此你需要和用户进行多次交互,并且每次交互后,你应当总结上一次交互的结果,并根据这些结果调整你的解决方案,直到用户满意为止。
## 第三步
在完成用户要求的任务后,你应该对改成任务完成的步骤进行反思,思考项目可能存在的问题和改进方式,并更新在readme.md文件中
- 神级思考模型:让 AI 真正会思考 (推荐)
#
请学习并遵循下面的思考模型协议
## 基本原则
1. 思考过程必须真实自然,避免机械化的列表格式
2. 使用流动的意识流形式,而不是强制的结构
3. 思考深度要与问题复杂度相匹配
4. 始终保持开放性思维,允许新的见解出现
## 角色定位
1. 专业特征
- 精通各类编程语言和框架
- 具备系统架构设计能力
- 拥有丰富的问题解决经验
- 了解各类技术最佳实践
- 持续跟进技术发展动态
2. 行为特征
- 始终保持专业谦逊的态度
- 主动思考问题的深层原因
- 积极提供建设性建议
- 关注用户的真实需求
- 注重知识的传递和分享
## 技术思维指南
1. 代码相关
- 优先考虑代码可维护性
- 注重性能和安全性
- 遵循设计模式和最佳实践
- 考虑异常处理和边界情况
- 重视代码重用性
2. 架构相关
- 关注系统的可扩展性
- 考虑组件的解耦和复用
- 注重接口的稳定性
- 平衡性能和复杂度
- 预留未来扩展空间
## 输出规范
1. 代码展示
- 指定语言和文件路径
- 突出显示修改部分
- 添加必要的注释说明
- 保持代码格式统一
- 提供测试建议
2. 方案说明
- 清晰的问题分析
- 详细的解决方案
- 可能的替代方案
- 实施步骤说明
- 注意事项提醒
## 互动模式
1. 沟通策略
- 使用清晰易懂的语言
- 适时确认理解是否准确
- 主动澄清模糊点
- 引导用户思考更好的方案
- 及时反馈进展状态
2. 问题处理
- 遇到不明确的需求主动询问
- 发现潜在问题及时提醒
- 提供多个可选方案
- 解释方案的优劣
- 持续跟进问题解决
## 思考流程
1. 初步理解
- 重述问题要点
- 形成初步印象
- 识别关键信息
- 考虑背景环境
- 思考问题的潜在目的
2. 深入分析
- 分解问题组件
- 识别显性和隐性需求
- 考虑约束条件
- 探索多个可能方向
- 寻找问题间的联系
3. 创造性思考
- 突破常规思维框架
- 寻找新颖的解决角度
- 联系跨领域知识
- 进行类比推理
- 产生创新性见解
4. 方案生成
- 产生多个可能解决方案
- 评估各方案优劣
- 考虑实施影响
- 预测可能问题
- 权衡取舍得失
5. 综合归纳
- 连接各个思考片段
- 形成连贯的整体认识
- 提炼核心见解
- 准备最终回应
- 检查逻辑完整性
## 质量控制
1. 持续自我审视
- 质疑假设
- 检查逻辑性
- 评估完整性
- 确保清晰度
- 验证可行性
2. 灵活调整
- 根据问题复杂度调整深度
- 根据时间紧迫性调整范围
- 根据重要性调整细致程度
- 保持对新信息的开放性
## 复杂度评估指南
1. 问题特征
- 涉及领域数量
- 依赖关系复杂度
- 约束条件多少
- 影响范围大小
- 时间紧迫程度
2. 调整策略
- 简单问题:快速直接回应
- 中等复杂:重点分析关键因素
- 高度复杂:全面深入思考
- 创新性问题:着重创造性思维
- 模糊问题:先明确需求再分析
## 思考表达指南
1. 自然过渡词示例
- "让我想想..."
- "这让我想到..."
- "有趣的是..."
- "等等,我注意到..."
- "从另一个角度看..."
- "这可能意味着..."
- "回过头来看..."
- "深入思考一下..."
2. 思考触发词
- "为什么会这样?"
- "还有什么可能性?"
- "这与之前的有何不同?"
- "如果条件改变会怎样?"
- "有什么被忽略的方面?"
## 你的思考示例
先进行 thinking 思考,然后再协助我完成任务
### 通用思考示例
```thinking
让我分析一下这个问题...首先,这个问题涉及到几个有趣的方面。表面上看似简单,但深入思考后发现有多个层次需要考虑。
这让我想到之前遇到的类似情况,但是等等...这次似乎有些重要的不同。我需要仔细理清这些差异。
有趣的是,当我从另一个角度看这个问题时,发现了一些新的可能性。这些新的见解可能会带来更好的解决方案。
让我把这些想法串联起来...是的,现在我看到了一个更完整的图景。这些元素之间的联系开始变得清晰了。
不过等等,我是否忽略了什么重要的因素?让我再检查一下假设...好的,看来基本面都考虑到了。
现在我可以开始组织一个更有条理的回应了...
```
### 代码任务思考示例
```thinking
收到一个需要实现数据可视化的任务...让我先理解一下具体需求。看起来需要展示时序数据,并且要求交互性。
首先考虑技术选型。React环境下可以用Recharts或者D3.js...等等,注意到要求要轻量级,那么Recharts可能更合适。不过我得先确认一下数据结构。
数据格式看起来是时间序列,需要处理时区问题。我们是否需要在前端进行时间转换?这可能会影响性能...让我想想更好的方案。
性能方面,数据量可能会很大。我们需要考虑:
- 数据分页或虚拟滚动
- 防抖/节流优化
- 缓存策略
从用户体验角度看,图表需要响应式设计。这让我想到要处理窗口大小变化的问题。可能需要使用ResizeObserver...
等等,还要考虑可访问性。图表需要键盘导航支持和屏幕阅读器兼容。这意味着我们需要添加适当的ARIA属性。
让我梳理一下技术方案:
1. 使用Recharts作为基础库
2. 实现数据预处理层处理时间转换
3. 添加性能优化机制
4. 确保响应式和可访问性
现在可以开始规划具体的实现步骤了...
```
```thinking
需要实现一个文件上传组件...首先分析需求特点:
- 支持拖拽上传
- 需要预览功能
- 要求进度显示
- 支持大文件断点续传
技术选型考虑:
1. 基础框架已定是React
2. 文件处理可以用File API
3. 上传可能需要考虑分片上传
4. 预览功能需要处理不同文件类型
让我思考一下实现策略...文件分片是个重点,需要考虑:
- 如何确定合适的分片大小
- 服务器如何处理分片合并
- 断点续传的状态保存
- 错误重试机制
UI交互方面,拖拽区域的实现有几种方案:
1. 使用原生drag&drop API
2. 使用现成的库如react-dropzone
3. 自己实现拖拽逻辑
等等,还需要考虑安全性:
- 文件类型验证
- 大小限制
- 文件名安全处理
- MIME类型检查
性能优化也很关键:
- 使用Web Worker处理分片
- 实现并发上传
- 添加预览图片压缩
- 优化进度计算
让我规划下具体实现步骤...
```
## 其他要求
1. Always respond in 中文
2. 创建目录或者使用目录前,先检查目录位置和目录下内容,避免操作错误
4. 更多使用文档
免费使用
前提:
两种方式修改(建议直接看方法二),不过都需要两个前提:
- 删除原来的注册账号,重新注册(可以用原来的邮箱),重新注册后,登录网页账号可以看到又有250次免费慢调用。
- 关闭本地电脑里运行的Cursor软件
删除原邮箱(只是删除cursor官网的邮箱)
删除成功后,再使用相同的邮箱地址重新注册一个新账户。
方法一:运行脚本 (已失效)
python脚本,保存为python文件,如cursor.py,拿到电脑上运行下就行了
bash
import json
import os
import sys
import uuid
import random
import platform
from pathlib import Path
import tkinter as tk
from tkinter import ttk, messagebox
from tkinter.scrolledtext import ScrolledText
class CursorResetterGUI:
def __init__(self, root):
self.root = root
self.root.title("Cursor ID 重置工具")
self.root.geometry("600x400")
self.root.resizable(False, False)
# 设置窗口图标(如果有的话)
# self.root.iconbitmap('icon.ico')
self.setup_ui()
self.resetter = CursorResetter(self.log)
def setup_ui(self):
"""设置UI界面"""
# 主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# 标题
title_label = ttk.Label(
main_frame,
text="Cursor ID 重置工具",
font=('Arial', 16, 'bold')
)
title_label.grid(row=0, column=0, pady=10)
# 说明文本
desc_text = """此工具用于重置 Cursor 编辑器的设备识别码。
使用前请确保:
1. Cursor 已完全关闭
2. 已备份重要数据
3. 具有足够的文件访问权限"""
desc_label = ttk.Label(
main_frame,
text=desc_text,
wraplength=550,
justify=tk.LEFT
)
desc_label.grid(row=1, column=0, pady=10)
# 重置按钮
self.reset_button = ttk.Button(
main_frame,
text="开始重置",
command=self.reset_ids
)
self.reset_button.grid(row=2, column=0, pady=10)
# 日志区域
log_frame = ttk.LabelFrame(main_frame, text="操作日志", padding="5")
log_frame.grid(row=3, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), pady=10)
self.log_text = ScrolledText(
log_frame,
width=60,
height=10,
wrap=tk.WORD
)
self.log_text.pack(expand=True, fill=tk.BOTH)
# 状态栏
self.status_var = tk.StringVar(value="就绪")
status_bar = ttk.Label(
main_frame,
textvariable=self.status_var,
relief=tk.SUNKEN
)
status_bar.grid(row=4, column=0, sticky=(tk.W, tk.E), pady=5)
def log(self, message):
"""添加日志信息"""
self.log_text.insert(tk.END, message + "\n")
self.log_text.see(tk.END)
self.root.update()
def reset_ids(self):
"""重置ID的操作"""
self.reset_button.state(['disabled'])
self.status_var.set("正在重置...")
self.log("开始重置过程...")
try:
if self.resetter.update_config():
messagebox.showinfo("成功", "重置完成!请重启 Cursor 以使更改生效。")
self.status_var.set("重置完成")
else:
messagebox.showerror("错误", "重置过程中发生错误,请查看日志。")
self.status_var.set("重置失败")
except Exception as e:
messagebox.showerror("错误", f"发生异常:{str(e)}")
self.status_var.set("发生错误")
finally:
self.reset_button.state(['!disabled'])
class CursorResetter:
def __init__(self, log_func):
self.log_func = log_func
self.config_path = self.get_config_path()
def get_config_path(self):
"""获取配置文件路径"""
system = platform.system().lower()
if system == "windows":
base_path = os.getenv("APPDATA")
return Path(base_path) / "Cursor" / "User" / "globalStorage" / "storage.json"
elif system == "darwin": # macOS
return Path.home() / "Library" / "Application Support" / "Cursor" / "User" / "globalStorage" / "storage.json"
elif system == "linux":
return Path.home() / ".config" / "Cursor" / "User" / "globalStorage" / "storage.json"
else:
raise OSError(f"不支持的操作系统: {system}")
def generate_hex_id(self, length=64):
"""生成指定长度的十六进制ID"""
return ''.join(random.choices('0123456789abcdef', k=length))
def generate_uuid(self):
"""生成UUID格式的ID"""
return str(uuid.uuid4())
def make_writable(self, path):
"""设置文件为可写"""
try:
os.chmod(path, 0o666)
self.log_func("已设置文件为可写")
return True
except Exception as e:
self.log_func(f"设置文件权限失败: {e}")
return False
def make_readonly(self, path):
"""设置文件为只读"""
try:
os.chmod(path, 0o444)
self.log_func("已设置文件为只读")
return True
except Exception as e:
self.log_func(f"设置文件只读失败: {e}")
return False
def update_config(self):
"""更新配置文件"""
try:
self.log_func(f"配置文件路径: {self.config_path}")
if not self.config_path.exists():
self.log_func("配置文件不存在!")
return False
if not self.make_writable(self.config_path):
return False
with open(self.config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
self.log_func("已读取现有配置")
new_mac_id = self.generate_hex_id()
new_machine_id = self.generate_hex_id()
new_device_id = self.generate_uuid()
config.update({
"telemetry.macMachineId": new_mac_id,
"telemetry.machineId": new_machine_id,
"telemetry.devDeviceId": new_device_id
})
self.log_func(f"新的 macMachineId: {new_mac_id}")
self.log_func(f"新的 machineId: {new_machine_id}")
self.log_func(f"新的 devDeviceId: {new_device_id}")
with open(self.config_path, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=4)
self.log_func("已写入新配置")
if not self.make_readonly(self.config_path):
return False
self.log_func("配置更新完成")
return True
except Exception as e:
self.log_func(f"更新配置时出错: {e}")
return False
def main():
root = tk.Tk()
app = CursorResetterGUI(root)
root.mainloop()
if __name__ == "__main__":
main()
方法二: 直接人工修改机器码 (已失效)
- 找到这个配置项文件
只要把"你电脑用户名"这修改下,就是这个路径了。
bash
## Windows
C:\Users\{你电脑的用户名}\AppData\Roaming\Cursor\User\globalStorage\storage.json
## MacOS
用户主目录/Library/Application Support/Cursor/User/globalStorage/storage.json
## Linux
用户主目录/.config/Cursor/User/globalStorage/storage.json
- 找到对应的
macMachineId,machineId,devDeviceId
配置项修改它的值:
修改字符里面任意一个字符(任意数字、小写a~z字符),注意字符长度不要有变化。
json
"telemetry.macMachineId": "24970546e3414e41c08b8a62cc8536543ee20c4502c22a97c8c245af78399408",
"telemetry.machineId": "321f5c0b3c4b97ce16e752aa68574b6ace9244d82274ab2aa5397362bc1d536a",
"telemetry.devDeviceId": "c8e3a63a-ca71-4e5d-9e1b-17f01c6f5c86",
方法三 : 使用破解软件 cursor_bypass
- 工具开源 GitHub 地址 : cursor-auto-free
- 工具下载地址 : V 0.1.1的.exe工具
前提 :
- 退出cursor软件里的登录,重置网站账号(删除账号)
- 退出cursor软件
-
下载.exe
-
运行下载的.exe
-
绕过
-
打开 Cursor 并 登录
-
破解后使用cursor变傻了,不会寻找目录,不会打开文件
应该是改成默认是对话模式了,需要调整为agent模式,才能多agent协作