Cursor 是名为 Anysphere 的初创公司开发的基于 AI 驱动的代码编辑器,按官方的原话是:“Cursor is an IDE designed to pair-program with AI”. Anysphere 是在 2022 年由 Michael Truell、Sualeh Asif、Arvid Lunnemark 和 Aman Sanger 在麻省理工学院就读期间共同创立。该公司的愿景是致力于构建极其高效的人类人工智能系统。首先要打造的是未来工程师:一位人类人工智能程序员,其效率比任何一位工程师都要高一个数量级。

2023 年 9 月该公司筹集了由 OpenAI Startup Fund 领投的 1100 万美元种子轮融资,前 GitHub 首席执行官 Nat Friedman、Dropbox 联合创始人 Arash Ferdowsi 和其他天使投资者参与了投资。其中,OpenAI 投资 800 万美元,占该轮融资的 72.7%。

2024 年 8 月该公司获得了重要的 6000 万美元的 A 轮融资,估值达到 4 亿美元主要投资者包括 Andreessen Horowitz、Thrive Capital 和 Stripe 的 CEO Patrick Collison。

2025年 1 月 16日,Cursor 官宣从 Thrive Capital,Andreessen Horowitz,Benchmark 和现有投资者那里筹集了 1.05 亿美元的 B 轮融资。新的资金将用于扩大团队并投资于系统,模型和产品。除了这笔最新的融资外,Cursor 也公布了一些数据情况:1. 突破了 1 亿美元的经常性收入;2. 注册用户达数百万;3. 每天编辑超过十亿个字符。

作为 GitHub Copilot 的新兴竞争对手,Cursor 在 2023 年推出后受到大量开发者的追捧与喜爱,Claude 3.5 sonnet 的推出后,大模型的代码生成能力大幅提升,在 2024 年 8 月 Cursor 在国内外开发圈子里又再度爆火,X 上不少人表示已经把 GitHub Copilot 付费停了,转投 Cursor。我也付阅 Cursor 会员很长一段时间了,在这里分享一下 Cursor 的使用心得和体验,部分参考 Cursor 官方文档

功能概览

Cursor 基于 VS Code 进行开发,也会定期合并 VS Code 的最新开源代码,所以 Cursor 的很多功能和 VS Code 的插件是兼容的。对于 Cursor 为什么没有直接做一款 VS Code 插件,他们也给出了一个说明:“作为一款独立应用,Cursor 拥有对编辑器 UI 的更大控制权,从而能够更紧密地集成 AI。我们的一些功能,例如 Cursor Tab 和 CMD-K,在现有的编码环境中无法以插件形式实现。”

另外,如果你习惯使用 VS Code 会发现 Cursor 的活动栏默认是水平的,而 VS Code 的是竖直摆放在最左侧。如果你更喜欢常见的垂直活动栏,可以前往 Cursor > Preferences > Settings > VS Code 设置,将 workbench.activityBar.orientation 设置为 vertical,然后重新启动 Cursor。

三大核心功能

  • AI 驱动的代码补全,它能深刻理解你的代码仓库
  • 自然语言聊天,方便你探索和理解代码
  • 智能 AI 智能体 (AI Agent),帮你处理复杂的开发任务

Tab

Cursor 中的 Tab 补全功能由先进的 AI 模型驱动,这些模型能理解你的代码上下文。 在你输入代码时,你会收到智能建议,它们可以:

  • 补全你当前的代码行
  • 建议完整的函数实现
  • 辅助你处理常见的代码模式和样板代码
  • 随着时间的推移,适应你的编码风格

Chat

Chat 是你的智能编码助手,它可以帮助你理解和使用你的代码仓库:

  • 询问关于特定代码段的问题
  • 获取复杂函数的解释
  • 查找代码模式和示例
  • 通过上下文感知来调试问题
  • 根据你的需求生成代码片段

Agent

AI Agent 是 AI 驱动的编码伙伴,可以帮助你处理更大型的任务:

  • 进行代码仓库范围的更改和重构
  • 根据需求实现新功能
  • 调试跨多个文件的复杂问题
  • 生成测试和文档
  • 保持整个项目的一致性

Context

Context 是支持 Cursor 所有 AI 功能的基础。 它是这样运作的:

  • 当你打开一个代码仓库时,它会自动索引你的代码,使你的代码库能作为上下文
  • 使用 @-symbols 精确控制你提供的上下文:
    • @files 和 @folders 用于指定路径
    • @web 用于外部文档
    • @git 用于版本控制上下文
  • 配置 AI Rules 以自定义行为
  • 设置 MCP (Model Context Protocol) 用于外部上下文提供程序

对于不同的功能默认的上下文长度不同,具体如下:

  • Chat 和 Composer 中,默认使用 40,000 个 Token 作为上下文窗口。
  • 对于 Cmd-K,我们将其限制在 10,000 个 Token 左右,以平衡 TTFT(Time to First Token,首个 Token 生成时间)和输出质量。
  • Agent 的上下文窗口起始为 60,000 个 Token,并支持最高 120,000 个 Token。
  • 对于较长的对话,我们会自动总结上下文,以节省可用的 Token 额度。

请注意,这些数值会根据优化需求进行调整,以提供更好的用户体验。

VSCode 配置一键导入

x

你可以导航到 Cursor > Preferences > Cursor Settings > General > VS Code Import,然后点击“Import from VS Code”按钮,即可一键导入 VSCode 上的所有已安装的扩展、主题和快捷键设置。

Cursor 这个功能确实是个不错的用户增长手段,大大降低了用户的切换成本。很多用户不愿意迁移到新的平台除了安土重迁不愿意接受新事物外,还有一个重要的原因是用户在现有的平台已经积累了很多自己的数据和习惯,如插件/快捷键配置/主题等等,切换成本很高,而 Cursor 很好的解决了这个问题,用户只需要一键即可从 VScode 轻松迁移过来各种配置。如果没记错的话,网易云音乐在增长过程中,一键导入其他音乐平台的歌单这一看起来简单的功能缺起到了至关重要的作用,为云音乐带来了大量新用户。

模型

Cursor 默认的模型为 claude-3.5-sonnet。但支持多模型的选择,且支持自定义私有 API Key

x

默认的可选的模型有

  • OpenAI 系列模型(gpt-4o-mini/o1/o1-mini/o3-mini)
  • Gemini 系列模型(gemini-2.0-flash/gemini-2.0-pro/gemini-2.0-flash-thinking-exp)
  • Anthropic 系列模型(claude-3.5-sonnet/claude-3-opus)
  • DeepSeek 系列模型(deepseek-v3/deepseek-r1)
  • Cursor 自研小模型 cursor-small

因为 OpenAI 模型配置支持第三方地址,理论上可以支持任意兼容 OpenAI 格式的接口下模型的增加,如 OpenRouter/groq 上支持的模型。

支持隐私模式

x

  • 如果开启,你的代码不会被 Cursor 或任何第三方存储。
  • 如果关闭,Cursor 可能会保存你的输入,并收集使用数据,以便改进 Cursor。
  • Cursor 默认开启隐私模式

详细介绍

Cursor Tab

Cursor Tab 是原生的自动补全功能。它是一个更强大的 Copilot,能根据上下文给出代码修改建议,尤其擅长记忆。

Cursor Tab 由定制模型驱动,可以实现以下功能:

  • 建议光标附近的编辑,而不仅仅是插入新代码。
  • 一次性修改多行代码。
  • 根据最近的修改和代码检查 (linter) 错误提出建议。

免费用户可以免费获得 2000 条建议。Pro 和 Business 计划用户则可享受无限建议。

要开启或关闭此功能,请将鼠标悬停在应用程序右下角状态栏上的“Cursor Tab”图标上。

另外,可以通过进入 Cursor Settings > Features > Tab Completion 并取消勾选“在注释中触发”来禁用 Cursor Tab 在注释中的使用。

关于 UI 界面

当 Cursor 仅添加文本时,补全建议会显示为灰色文本。如果建议修改现有代码,会在当前行右侧以差异对比弹窗的形式呈现。

可以按 Tab 键接受建议,或者按 Esc 键拒绝。要逐字接受建议的一部分,请按 Ctrl/⌘ → 组合键。要拒绝建议,您可以继续输入,或者使用 Escape 键取消/隐藏建议。

每次您输入或移动光标时,Cursor 都会尝试根据您最近的修改提出建议。但 Cursor 并非总是会显示建议,有时模型会预测您无需进行任何修改。

Cursor 可以对当前行上方一行到下方两行的代码进行更改。

与 GitHub Copilot 对比

Cursor 和 GitHub Copilot 最大的区别在于完成代码的方式。GitHub Copilot 只能在光标所在位置插入文本,无法编辑光标周围的代码,也无法删除文本。Cursor 不仅能在光标处插入文本,还能做到更多:

  • 多字符编辑: 例如,可以一次性替换多个字符。
multi-edit
  • 基于指令的编辑: 例如,根据你的指令修改函数名称或添加注释。
instruct

此外,Cursor 还会记录你在上下文窗口中最近的修改历史,从而更好地理解你接下来的意图。

由于 Cursor 默认集成了 GitHub Copilot,你可能同时安装了 GitHub Copilot 和 Cursor。我们建议,当你想使用 Cursor 时,关闭 GitHub Copilot。

默认情况下,Cursor 的优先级高于 GitHub Copilot。如果你想使用 GitHub Copilot,可以请将鼠标悬停在应用程序右下角状态栏上的“Cursor Tab”图标上,然后点击“Disable globally”按钮来关闭 Cursor Tab 功能。

自动导入

在 TypeScript 和 Python (beta) 项目中,Tab 可以自动从项目内的其他位置导入模块和函数,无需手动输入 import 语句。

只需开始使用你想要从现有文件中使用的方法,Tab 就会自动为你建议 import 语句。如果接受建议,import 语句会被自动添加到文件中,无需中断当前的编码工作。

如果您在使用自动导入时遇到问题,请确认您是否安装了项目语言所需的扩展 (例如语言服务器 ),这是自动导入功能正常工作的前提。

你可以通过以下方式确认该功能是否正常工作:将光标移动到尚未导入的函数或方法上,然后按下 + .Ctrl + . ,查看是否在快速修复选项中出现导入建议。如果没有,则表示语言服务器没有正常工作。

高级功能

在 Peek 视图中使用 Tab

<p>您还可以在“转到定义”或“转到类型定义”的 Peek 视图中使用 Cursor Tab。 Peek 视图是一种可以快速查看定义或类型定义的方式。 例如,当您需要向函数调用添加新的参数时,这个功能就非常有用。</p>

<img src="https://mintlify.s3.us-west-1.amazonaws.com/cursor/images/cpp/cpp-in-peek.png" alt="cpp-in-peek" />

<p>我们特别喜欢在 vim 编辑器中结合 <code>gd</code> 命令使用这个功能。 例如,您可以先修改函数定义,然后一次性修复所有调用该函数的地方。</p>

Cursor 预测

<p>Cursor 还可以预测您在完成编辑后下一步想要去的位置。 如果预测可用,您就可以通过连续按 Tab 键快速跳转到下一个待编辑的位置,从而高效地完成编辑。</p>

<img src="https://mintlify.s3.us-west-1.amazonaws.com/cursor/images/cpp/cp.png" alt="cpp-prediction" />

Agent

你可以将任务委托给 Cursor AI Agent,让它与你协同工作。AI Agent 在 Composer 中执行任务,并以此为基础构建。

你可以在 Composer 中切换普通模式和 AI Agent 模式。主要区别在于,AI Agent 会进行更深入的思考,并利用推理能力和各种工具来解决问题。而普通 Composer 无法访问这些工具,只能用于管理代码。

AI Agent 可以访问多种工具,包括:

  • 读取和写入代码
  • 搜索代码库
  • 调用 MCP 服务器
  • 运行终端命令

AI Agent 具备强大的推理能力,能够执行复杂的工作流程,无需过多人工干预即可完成多个连续操作。

目前,AI Agent 支持使用 claude-3.5-sonnetgpt-4oo3-mini 模型。将很快添加对更多模型的支持!

终端 (Terminal)

当 AI 智能体 (Agent) 运行终端命令时,它会参考 VS Code 的终端配置文件来确定使用的 Shell。它会遍历所有可用的配置文件,从默认配置文件开始,选择第一个支持命令检测的配置文件。这意味着,如果首先找到其他兼容的终端配置文件,AI 智能体 (Agent) 使用的 Shell 可能与你的默认系统 Shell 不同。

要更改使用的终端配置文件,请按照以下步骤操作:

  1. 打开命令面板 (Cmd/Ctrl+Shift+P)
  2. 搜索“Terminal: Select Default Profile”
  3. 选择你首选的终端配置文件

Yolo 模式 (Yolo mode)

启用 Yolo 模式 (Yolo mode) 后,AI Agent 可以自主执行终端命令。这在运行测试时尤其有用。只需向 AI Agent 指定任务和验证方法(例如运行测试),它便会持续执行直到任务完成。

护栏 (Guardrails)

你可以为某些不希望 AI Agent 自动运行的命令设置护栏 (Guardrails) 以及相应的允许/禁止列表。这些设置可以在 Cursor 设置中进行配置。

指令 (Rules)

你可以使用如下介绍的指令 (rules) 来指导 AI Agent 的行为。这些指令可以基于 glob 模式自动应用于任何 AI Agent 请求,或者 AI Agent 可以根据指令描述自行选择合适的指令。

Composer

Composer 是你的 AI 代码助手。它可以帮助你探索代码、编写新功能以及修改现有代码,而无需离开你的工作流程。使用 ⌘I 打开它,使用 ⌘N 创建一个新的 Composer。

该模式支持多文件自动编辑,你只需要和 AI 对话,AI 会自动生成代码,你只需要按 Accept ALL 或 REJECT ALL 即可将代码自动更新到多个对应的文件中,这个功能有点类似于 Google 创始人施密特访谈 中提到的编程搭档。

模式

Composer 支持两种模式,一种是上面介绍的 Agent 模式,一种是 Nomal 模式。

  • Normal 模式:读取和写入代码。通常速度更快,适用于所有模型。
  • Agent 模式:具备推理能力,并可以使用工具来调用 MCP 服务器、运行终端命令和管理代码。

Context

你可以使用 @ 符号在你的指令中包含相关的上下文信息。

x

生成和应用更改

当 Composer 建议更改时:

  • 在差异视图中查看它们
  • 使用提供的按钮接受或拒绝更改
  • 如果需要,使用检查点撤消

检查点

每次您生成代码时,Composer 都会创建一个检查点。您可以通过单击该检查点附近的 checkout (检出) 返回到任何先前的版本。如果您不喜欢当前的更改并想要恢复到较早的状态,这将非常方便。

x

历史记录

通过历史记录访问以前的 Composer 会话和聊天。从 Cursor 选项卡右侧的历史记录图标打开它。您将看到过去 composer 和聊天的列表,您可以重新访问、重命名或删除它们。

当 Composer 处于焦点时,使用 ⌘+⌥+LCtrl+Alt+L 打开。

x

布局

Composer 提供两种布局模式:

  • Pane: 一个侧边栏,左侧是聊天,右侧是您的代码编辑器。
  • Editor: 一个单独的编辑器窗口,类似于正常查看代码。您可以移动它、拆分它,甚至将它放在一个单独的窗口中。

迭代代码检查

Composer 尝试修复大多数编程语言生成的代码中的代码检查问题。如果 Composer 检测到代码检查错误,当此功能启用时,它将尝试自动修复它们。目前,仅支持一次迭代。

x

常见问题

Chat 和 Composer 有什么区别?

Cursor Chat 帮助您搜索和理解您的代码。使用它来探索您的代码库、提出问题并获得解释。您可以使用 ⌘⏎ 搜索您的代码。

Composer 帮助您编写和编辑代码。它提供了一个工作区,您可以在其中生成新代码并将更改直接应用到您的文件。

如何处理长时间的对话?

对于长时间的对话,Cursor 使用较小的模型(如 cursor-smallgpt-4o-mini)总结较早的消息,以保持响应速度和相关性。

这种方法有助于确保即使是延长的对话也能保持响应性和连贯性,而不会丢失早期交流中的关键细节。

我可以在另一台计算机上访问我的 Composer 历史记录吗?

Composer 历史记录本地存储在您的计算机上,并且不存储在 Cursor 的服务器上或与您的 Cursor 帐户相关联。

这意味着如果您切换到另一台计算机,您将无法访问您以前的 Composer 历史记录。您只能在您最初创建它的计算机上访问您的 Composer 历史记录。

Chat

Cursor Chat 让你能够在编辑器中,使用强大的语言模型,针对你的代码库进行提问或解决问题。

xxx

为了使语言模型给出高质量的回答,它们需要了解与你的代码库相关的特定信息,即上下文 (context)。

Cursor 内置了多种功能,可在聊天中提供必要的上下文,例如自动关联整个代码库,搜索互联网,索引文档,以及用户自定义的代码块引用。 这些功能的目的是为了减少在代码场景下使用语言模型时,繁琐的复制粘贴操作。

默认情况下,Cursor Chat 集成在 AI 窗格中,该窗格位于主侧边栏的相对一侧。 你可以通过按下 Ctrl/⌘ + L 来切换 AI 窗格, 快捷键会激活聊天窗口。 按下 Enter 键即可提交你的问题。

基础功能

  • 用户和 AI 消息

    用户消息包含你输入的文本以及你引用的上下文。 你可以返回并编辑之前的任何用户消息,然后重新运行查询,这会覆盖该消息之后的消息并生成新的回复。

    AI 消息是由你选择的 AI 模型生成的回复, 并与之前的用户消息关联。 AI 消息可能包含已解析的代码块,可以通过 instant apply 功能将其添加到你的代码库中。

    同一线程中的所有用户/AI 消息构成一个聊天线程,每个聊天线程都会保存在你的聊天历史中。

  • 聊天历史

    点击 AI 窗格右上角的 "Previous Chats" 按钮,或者按下快捷键 Ctrl/⌘ + Alt/Option + L, 即可查看聊天历史。 你可以点击任何聊天线程,回溯并查看组成该线程的消息。 你还可以修改线程标题 (点击钢笔图标),或者删除线程 (将鼠标悬停在历史记录中的线程上,然后点击垃圾桶图标)。

    Cursor 线程的标题默认为第一条用户消息的开头几个词。

  • 默认上下文

    默认情况下,Cursor Chat 会将当前文件作为上下文。 你也可以删除消息中的当前文件标签,从而在不包含任何上下文的情况下提交查询。 在你输入时,输入框上方的标签会显示哪些内容将被包含在上下文中。

  • 添加上下文

    默认情况下,用户消息会包含你输入的文本以及你引用的上下文。 你可以使用 @ 符号向消息添加更多自定义上下文。 默认情况下,当前正在查看的文件也会被用作用户消息的上下文。

    更多信息请参考以下的 @ symbols 页面。

  • 在聊天中使用 AI 修复

    使用聊天中的 AI 修复功能,可以方便地修复代码库中的 Linter 错误。 具体操作为:将鼠标悬停在编辑器中的错误上,然后点击出现的蓝色 AI 修复按钮。

    对应的键盘快捷键是 Ctrl/⌘ + Shift + E

    xxx

  • 模型选择

    通过模型选择器选择你偏好的 AI 模型,并且 Cursor Chat 将会使用那个模型来生成回复。你可以通过按下 Ctrl/⌘ / 在模型之间切换。

    你为 Chat 选择的 AI 模型会被保存,以便用于未来的会话,因此你不需要每次打开 Cursor Chat 都改变它。

    xxx

Apply 功能

Cursor 的 Apply (应用) 允许你快速地将来自聊天的代码块建议集成到你的代码中。

为了应用一个代码块建议,你可以在每个聊天 (chat) 代码块的右上角点击 Apply 按钮。

xxx

这将会编辑你的文件,整合聊天 (chat) 生成的代码。

一旦你 Apply 了一个代码块,你可以查看代码差异 (diffs),然后接受或拒绝这些修改。你也可以点击聊天代码块右上角的 “Accept” (接受) 或 “Reject” (拒绝) 按钮。

Ctrl/⌘ Enter (接受),Ctrl/⌘ Backspace (拒绝)。 (使用快捷键可以快速接受或拒绝修改)

xxx

使用 Codebase

如果代码库没有被索引,Cursor Chat 会尝试计算一些搜索查询,用于搜索代码库。为了获得更好的准确性,建议使用嵌入搜索 (embeddings search)。

xxx

通过代码库索引,Cursor Chat 可以根据代码库更准确地生成回复。

在输入消息后,按下Ctrl/⌘ + Enter ,Cursor Chat 会扫描已索引的代码库,找到相关的代码片段。这通常适用于快速地将代码片段包含到上下文中。如果想更好地控制代码库搜索,并获得更高的准确性,可以使用 @codebase

xxx

当使用 @Codebase 时,Cursor Chat 会进行更详细的搜索。

有关 @Codebase 的更多信息,下面会在 @ 符号中详细讲解。

自动生成 Commit 信息

Cursor 可以帮助你一键生成对你代码更改有意义的提交消息。以下是如何使用这个功能:

xxx

  1. 暂存/添加到暂存区 你想要提交的文件
  2. 在侧边栏中打开 Git 选项卡
  3. 在提交消息输入框旁边,你会看到一个闪光 (✨) 图标
  4. 点击这个闪光图标,Cursor 就会根据你暂存的更改生成提交消息

生成的提交消息基于你暂存文件中的更改和你代码仓库的 Git 历史记录。这意味着 Cursor 会分析你当前的代码改动和之前的提交消息,从而生成符合上下文的提交消息。Cursor 会从你的提交历史中学习,所以如果你遵循 Conventional Commits (约定式提交) 这样的规范,生成的消息也会遵循相同的模式。

另外,你也可以将生成提交消息的功能绑定到一个键盘快捷键上。

  1. 打开键盘快捷键设置 (可以使用组合快捷键 ⌘R ⌘S⌘⇧P),然后搜索 “Open Keyboard Shortcuts (JSON)”
  2. 将以下代码添加到该文件,即可将生成提交消息功能绑定到 ⌘M 快捷键: ```json { "key": "cmd+m", "command": "cursor.generateCommitMessage" } ```
  3. 保存文件,设置完成!

⌘ K 快捷键

Cmd K,在 Windows/Linux 上也称为“Ctrl K”,允许你在编辑器窗口中生成或编辑代码。

xxx

在 Cursor 中,按下 Ctrl/Cmd K 时出现的输入栏被称为“提示栏 (Prompt Bar)”。它的工作方式类似于聊天界面的 AI 输入框,你可以在其中正常键入,也可以使用 @ 符号 来引用其他上下文。

如果在按下 Ctrl/Cmd K 时没有选中任何代码,Cursor 将根据你在提示栏中输入的提示生成新代码。

xxx

对于想要修改的代码,只需选择想要修改的代码,然后在提示栏中输入即可。

xxx

每次生成代码后,你可以通过在提示栏中添加更多指令来进一步细化提示,然后按 Enter 键,AI Agent 就会根据你的后续指令重新生成代码。

默认情况下,除了手动添加的 @ 符号 之外,Cursor 还会尝试查找各种有用的信息来改进代码生成。这些信息可能包括相关文件、最近查看的文件等。收集到这些信息后,Cursor 会根据相关性对它们进行排名,并将排名靠前的上下文信息提供给大语言模型 (LLM) 使用。

快速提问 (Quick Question)

如果在提示栏中按下 Option/Alt Enter 键,Cursor 会回复你关于所选代码以及你提供的上下文的任何问题。这次对话的内容可以被用于后续的代码生成。例如,在 Cursor 回答你的问题之后,你可以简单地输入 “do it”,它就会生成相应的代码。

Terminal Cmd K

在 Cursor 终端中,可以使用 Ctrl/⌘ K 通过提示栏生成并运行命令。

在 Cursor 内置的终端中,按下 Ctrl/⌘ K 可以在终端底部打开一个提示栏。 您可以在此提示栏中描述希望执行的操作,Terminal Cmd K 会据此生成命令。 按下 esc 键可以接受该命令,或者使用 Ctrl/⌘ + Enter 立即执行。

默认情况下,Terminal Cmd K 会将您最近的终端历史记录、您的指令以及您在提示栏中输入的任何内容作为上下文信息。

Context

代码库索引

为了获得更好、更准确的代码库答案,你可以索引你的代码库。在幕后,Cursor 为你的代码库中的每个文件计算代码嵌入 (embeddings),并且将使用这些代码嵌入来提高代码库答案的准确性。

Cursor 为每个用户维护单独的代码库索引。在你完成初始索引设置后,Cursor 将会自动索引任何添加到你的工作区的新文件,以保持你的个人代码库上下文是最新的。

你的代码库索引的状态在 Cursor Settings > Features > Codebase Indexing 下。

x

高级设置

默认情况下,Cursor 将索引你的代码库中的所有文件。

你也可以展开 Show Settings 部分来访问更多高级选项。在这里,你可以决定是否想要为新的代码库启用自动索引,以及配置 Cursor 在代码库索引期间将忽略的文件。

Cursor 使用与 VS Code 相同的包来处理文件忽略,这意味着它尊重所有的 .gitignore 文件,包括那些在子目录中的。 你也可以创建一个 .cursorignore 文件用于用户特定的忽略模式,你可以将它添加到全局 .gitignore 文件中,以避免将其提交到代码库。

如果你在你的项目中存在任何 AI 绝对不需要读取的大型内容文件,忽略这些文件可能会提高答案的准确性。

对大型代码库的处理方法

当使用包含成百上千个文件的大型单体代码库 (monorepos) 工作时,重要的是要对索引内容采取策略。

  • 使用 .cursorignore 文件,允许每位开发者配置他们在单体代码库中工作的文件夹和路径。
  • .cursorignore 文件添加到你的全局 .gitignore 文件中。

这允许每位开发者针对他们在单体代码库中特定的工作区域优化索引。

Ignore Files

关于 .cursorignore

要忽略不被包含在代码库索引中的文件,你可以在项目的根目录中使用 .cursorignore 文件。它的工作方式与 .gitignore 文件对于 git 的作用相同。

.cursorignore 文件会遵循 .gitignore 文件的规则。 如果你已经有 .gitignore 文件,那么其中的文件将会默认被忽略。 如果你还想忽略其他文件,可以将它们添加到 .cursorignore 文件中。

特殊情况

目前,无论 .cursorignore 文件如何设置,Cursor Chat 和 Composer 都能访问其上下文中的所有文件。

.cursorignore 文件的示例

忽略指定文件

# Ignore all files in the `dist` directory
dist/

# Ignore all `.log` files
*.log

# Ignore specific file `config.json`
config.json

仅包含指定文件

仅包含 app 目录中的 *.py 文件。这与 .gitignore 文件的语法相同。

# ignore everything
*

# do not ignore app
!app/

# do not ignore directories inside app
!app/*/
!app/**/*/

# don't ignore python files
!*.py

Rules for AI

通过 Cursor 中的规则,你可以控制基础模型的行为。可以将这些规则理解为大语言模型的指令或系统提示。

比如,你可以指定模型输出的语言,官方提供了一个例子:“总是使用函数式 React,永远不要在 Rust 中使用 unwrap,始终使用葡萄牙语回答。”

您可以通过几种方式向 Cursor 添加自定义指令:

Project Rules (推荐)

xx

Cursor 提供了一个强大而灵活的规则系统,具有特定于文件夹的配置。项目规则 (Project Rules) 存储在 .cursor/rules 目录中,并提供对项目中不同部分的 AI 行为的精细控制。

Project Rules 的关键特性:

- 语义描述:每个规则都可以包含一段描述,用于说明该规则应该在什么情况下应用。 - 文件模式匹配:使用 glob 模式 (File Pattern Matching) 来指定规则应用于哪些文件或文件夹。 - 自动关联:当有匹配的文件被引用时,规则可以被自动关联。 - 引用文件:在你的项目规则中使用 @file,可以在应用规则时将这些文件作为上下文信息包含进来。

您可以使用命令面板通过 Cmd + Shift + P > New Cursor Rule 创建新规则。

应用实例:

  • 特定于某些文件类型的框架规则 (例如,.tsx 文件的 SolidJS 首选项)
  • 自动生成文件的特殊处理 (例如,.proto 文件)
  • 自定义 UI 开发模式
  • 特定文件夹的代码风格和架构偏好

Global Rules (全局规则)

可以通过修改 Cursor Settings > General > Rules for AI 下的 Rules for AI 来添加全局规则 (Global Rules)。

这个功能很有用,如果你想为每个项目设置一些默认规则,比如输出语言、回复内容的长度等等。

xx

.cursorrules已被废弃

为了兼容旧版本,你仍然可以在项目的根目录中使用 .cursorrules 文件。但是,此方法已被弃用,未来将被移除。我们建议迁移到新的项目规则系统,以获得更好的灵活性和控制。

@ 符号

在 Cursor 的 AI 输入区域,例如 Composer、Chat 和 Cmd K 中,你可以通过输入 @ 来使用 @ 符号。一个包含建议的弹出菜单将会出现,并根据你的输入自动过滤,只显示最相关的选项。它的主要作用是指定对话依赖的上下文,默认是打开的当前文件。

包括 @Files、@Folders、@Code、@Docs、@Git、@Codebase、@Web、@Definitions、@Link、#Files、/command,下面会对每一个详细讲解。

xx

@Files

在 AI 输入框中,例如 Chat 和 Cmd K,你可以通过 @Files 引用整个文件。此外,如果在 @ 之后继续输入,在@Code策略之后,您将看到文件搜索结果。

为了确保您引用的文件是正确的文件,Cursor 会显示文件路径的预览。当您在不同的文件夹中有多个同名文件时,这会非常有用。

xx

在 Cursor 的 Chat 中,如果文件的内容太长,Cursor 会将文件拆分成更小的块,并根据其与查询的相关性进行重新排序。

xx

另外,你也可以将文件从主侧边栏 (primary sidebar) 拖放到 Composer、Chat 或 Cmd K 中,以将它们添加为上下文。

@Folders

你还可以在 Cursor 里引用整个文件夹作为上下文。@Folders 功能在需要进行长上下文对话时特别有用,它可以让你给 AI 提供更丰富的背景信息。

xx

@Code

要引用代码的特定部分,你可以使用 @Code 符号。

与 @Files 符号类似,Cursor 会显示代码内容的预览,方便您确认引用的代码是否正确。

xx

你还可以通过另一种方式添加代码片段作为上下文:选中您想要引用的代码,然后点击“添加到聊天” (Ctrl/⌘ Shift L) 或者 “添加到编辑” (Ctrl/⌘ Shift K)。

这些操作会将您选中的代码片段添加到聊天输入框,或者当前激活的 Cmd K 提示栏中。

xx

要将选中的代码添加到新的聊天会话,您可以按 Ctrl/⌘ L

@Docs

xx

Cursor 提供了一系列第三方文档,这些文档经过爬取和索引,可以作为上下文直接使用。你可以通过 @Docs 符号来访问这些文档。 默认预先爬取的文档列表可以在这里找到。

如果你希望爬取并索引未提供的自定义文档,可以通过 @Docs > Add new doc 来实现。 在粘贴目标文档的 URL 后,会出现以下对话框:

xx

接下来,Cursor 会索引和学习该文档,之后你就可以像使用其他文档一样,将其作为上下文使用。 如果你想索引所有子页面和子目录,请确保在 URL 末尾添加一个斜杠。

xx

Cursor Settings > Features > Docs 中,你可以看到已添加的文档。 在这里,你可以编辑、删除或添加新的文档。

xx

@Git

在 Cursor 的 Chat 中,您可以使用 @Git 来添加 git 提交、差异、或拉取请求到您的提示词 (prompt)。

xx

@Git 的一个常用用例是允许 Cursor AI 扫描差异,并查找可能由差异导致的错误或问题。

xx

您也可以使用 @Diff of Working State 从您当前的差异生成提交信息。

xx

@Codebase

xx

通过 @Codebase,Chat 会执行以下步骤,最终找到需要使用的关键代码片段:

  • 搜集 (Gathering):扫描你的代码库,找到重要的文件和代码块。
  • 重排序 (Reranking):根据与查询的相关性,重新排列上下文条目的顺序。
  • 推理 (Reasoning):周密考虑如何利用上下文信息。
  • 生成 (Generating):生成最终回复。

@Web

xx

@Web 命令会自动在互联网上搜索,为 Cursor 查询找到相关的上下文。

通过 @Web 命令,Cursor 会根据你提供的查询和上下文构建搜索语句,并在互联网上搜索相关信息,作为补充的参考内容。

这能帮助 Cursor 找到最新的在线信息,或者在几秒钟内从多个网站快速获取信息,从而找到最佳答案,而无需用户手动搜索。

@Definitions

@Definitions 符号会将附近代码中所有的定义添加到 Cmd K 中,作为其运行的上下文信息。

xx

为了让 Cursor 识别并正确处理链接,请先粘贴链接,你会看到链接被自动“标记”为可点击的格式。

默认情况下,Cursor 会自动解析你发送的链接,并在 Chat 中将其转换为 @Links 格式。

xx

如果你希望链接显示为纯文本,点击链接,然后点击 Unlink (取消链接)。

你也可以在粘贴时去除格式 (按住 Shift 键),确保链接不会被自动标记。

xx

#Files

使用 # 符号并在其后添加文件名,可以让你集中处理特定的文件。 将此方法与 @ 符号结合使用,能够实现更精准的上下文控制。 例如,你可以指定在哪个文件的哪个部分应用特定的操作或规则。

xx

/command

你只需输入 / 即可快速引用已打开的编辑器,并将其作为上下文信息提供给 AI Agent。

xx

  • Open editors: 所有已打开的编辑器标签页
  • Active editors: 当前可见的所有编辑器标签页。 常见于分屏显示多个编辑器窗口的情况。

Model Context Protocol (MCP)

模型上下文协议 (Model Context Protocol, MCP)是一个开放协议,允许你向 Cursor 中的 AI 智能体 (AI Agent) 提供自定义工具。

Cursor 实现了 MCP 客户端,它支持任意数量的 MCP 服务器。 Cursor 的 MCP 客户端支持 stdiosse 传输。

向 Cursor 添加 MCP 服务器

要向 Cursor 添加 MCP 服务器,请进入 Cursor 设置 -> 功能 -> MCP,然后单击 + Add New MCP Server 按钮。

这将弹出一个表单供您填写。在 Type 下选择传输类型,然后填写服务器的昵称 (Name),以及运行命令或服务器的 URL,具体取决于传输类型。

例如,这就是你配置 MCP 快速入门天气服务器的方式,假设它已经构建并放置在 ~/mcp-quickstart/weather-server-typescript/build/index.js。在这种情况下,整个命令字符串是 node ~/mcp-quickstart/weather-server-typescript/build/index.js

xxx

这就是你配置 MCP 示例工具的方式,假设它在本地端口 8765 上运行。

xxx

添加服务器后,它应该出现在 MCP 服务器列表中。您可能需要手动点击 MCP 服务器右上角的刷新按钮来更新工具列表。以下是加载(修改后的)天气和示例服务器后的工具列表的样子。

xxx

管理 MCP 服务器

可以从 MCP 设置页面编辑或删除 MCP 服务器。

在 Composer 中使用 MCP 工具

如果 Composer AI 智能体确定 MCP 工具与 Available Tools 下列出的工具相关,它将自动使用这些工具。 要故意提示工具的使用,只需告诉 AI 智能体使用该工具,并按名称或描述引用它即可。

当 AI 智能体决定使用工具时,它将在聊天中显示如下消息,提示用户批准或拒绝工具调用。

xxx

用户可以展开消息以查看工具调用参数。

如果用户批准工具调用,AI 智能体将使用该工具并在聊天中显示响应。 此图像显示了来自示例工具的响应,以及工具调用参数和工具调用响应的展开视图。

xxx

写在最后

虽然 Cursor 编辑器还不够完美,越好的体验越依赖强大的模型能力如claude-3.5-sonnet、o1/o1-mini/o3-mini。对 AI 辅助编程的开发者来说,Cursor(an IDE designed to pair-program with AI)无疑是一个值得尝试的选择,也无疑最终会成为大家的理想的编程搭档之一,当然 GitHub Copilot 也会奋起直追,也会有一些如 WindSurf 等新一批的竞争者加入进来。