引言      

       自从 Claude 3.5 Sonnet 发布以来,AI 编程已然迈入了一个崭新的、真正实用的阶段。在这股浪潮中,我体验了市面上几乎所有主流的 AI 编程助理——从早期的 GitHub Copilot、阿里通义灵码,到备受瞩目的 Cursor,再到最近惊艳的 Claude Code。

      尽管选择众多,但 Cursor 凭借其独特的产品形态和深度集成,成为了我日常开发中最高频使用的工具。为了最大化其生产力,我甚至毫不犹豫地订阅了为期一年的 Pro 版本。

     在过去几个月的深度实践中,我踩过不少坑,也积累了一些心得。我发现,许多朋友和我在刚开始使用 Cursor 时,都或多或少遇到过类似的困惑:

  • 沟通的艺术: 如何向 AI 清晰、高效地描述我的编程需求,才能让它一次性给出最接近预期的代码?

  • 失控的修改: 当 AI 的修改引入了新的 bug 或导致程序报错时,我该如何快速定位问题根源,并引导它进行修复?

  • 精准的控制: 怎样才能让 AI 严格遵循我的指令和编码规范,而不是天马行空地自由发挥?

  • 规则的妙用: Project RulesUser Rules 究竟有何区别?在实际项目中,我应该如何配置它们,才能打造出符合团队规范和个人习惯的编程环境?

如果你也对这些问题感到困惑,那么这篇文章正是为你准备的。接下来,我将毫无保留地分享我在这几个月里沉淀下来的 Cursor 实战经验,希望能帮助你更高效地驾驭这个强大的 AI 编程工具。

常用技巧

相关概念

在介绍常用技巧之前,先介绍一下关于cursor里面的一些概念。

关于rule

cursor中的rule分为project rule和user rule。官方的介绍为:Cursor – Rules 

       为什么会存在rule呢?大型语言模型不会在完成之间保留记忆。规则在提示级别提供持久、可重用的上下文。这是由于其本身存在一个根本性的限制:它们是无状态的 。这意味着模型在两次独立的交互之间不会保留任何记忆。每一次提问或代码生成请求对于模型来说都是一个全新的开始,它无法记住所遵循的编码规范、项目的技术栈,或是之前对话中确立的架构决策。如果没有一种机制来持续提供这些关键信息,开发者将不得不为每次交互重复提供相同的背景,这极大地限制了 AI 辅助开发的效率和一致性。

      cursor中一共存在4种规则:

其分别为:

  • 项目规则 (Project Rules): 这些规则受版本控制,其作用范围限定在特定的代码库中。

  • 用户规则 (User Rules): 这些规则是全局性的,适用于整个 Cursor 环境。

  • AGENTS.md: 这是一个简单的 Markdown 文件,可作为 Agent 指令的替代方案。

  • 旧版的 .cursorrules 文件: 这是较早版本中使用的规则文件。(已弃用)

下面主要来介绍project rules和user rules,这也是用得最多的两种。不同的版本的cursor可能功能不一样,我这里使用的是目前最新的cursor版本为1.5.5。

目前cursor官方关于rule的最佳规则为:

Project Rules

      想象一下,您正在开发一个复杂的项目,其中有几个核心文件,比如配置文件 (config.js)、全局状态管理 (store.ts)、API 定义 (api.ts) 或者一些关键的工具函数 (utils.js)。每次您向 AI 提问时,如果问题与这些核心文件相关,您可能都需要手动将这些文件内容粘贴到聊天中,或者使用 @ 符号手动引用它们。这个过程非常繁琐。

       Project Rules 通过自动化这个过程,极大地提升了效率。您只需设置一次,将这些关键文件定义为项目的“规则”,之后 Cursor 的 AI 就会在每一次对话中自动将它们作为背景知识引入,从而提供更准确、更贴合您项目实际情况的回答和代码。

      我个人比较常用的是会把一些开发规范放在Project Rules里面,使其生成的代码符合特定的规范而不至于每次还得进行修改。

其中Project Rules支持四种生效规则

生效规则  描述 核心机制
Always Apply 应用于每一次聊天和 Cmd-K 会话。

规则始终处于激活状态,对项目所有交互生效。

Apply Intelligently 当 AI 代理根据规则的描述判断其具有相关性时应用。

AI 根据上下文智能判断是否需要引入该规则。

Apply to Specific Files 当文件路径与指定的模式匹配时应用。

基于文件路径或类型(如 *.tsx, /api/**)自动触发。

Apply Manually 当使用 @ 符号提及规则时应用。

用户通过在聊天中手动输入 @规则名称 来显式调用。

eg:在一个前端项目中,我们希望 AI 总是了解我们的 Tailwind CSS 配置和全局 CSS 文件。

{
  "rules": [
    {
      "rule": "Always be aware of my global styles and tailwind config.",
      "paths": [
        "src/styles/globals.css",
        "tailwind.config.js"
      ]
    }
  ]
}

设置好后,当您让 AI "创建一个使用主题色的蓝色按钮" 时,它会自动查阅这两个文件,了解您的主题色定义,从而生成符合项目规范的代码。

对于Project Rules,我一般会设置三种规则,首先是代码规范规则,比如说命名规则、异常处理、日志记录等;然后是根据项目的特定规范, 主要是根据项目的具体特点设定的;最后是环境配置规范规则。

以下为我每日论文阅读项目举例:

代码规范

项目特定规范

环境配置规范

User Rules

       与Project Rules不同的是User Rules不会随着项目的变化而改变,其是跟着用户走的。User Rules 是您的全局性、个人化的AI指令。它们适用于您在 Cursor 中打开的所有项目。这套规则的核心目的是定义您与 AI 交互的通用偏好,无论您在处理哪个代码库。

 其特点为:

  • 全局性: 一次设置,所有项目生效。
  • 个人化: 定义您的个人编码风格和沟通偏好。
  • 高优先级: 这些规则总是会作为上下文提供给 AI。
  • 简化配置: 通过设置中的一个文本框进行配置,非常简单。

User Rules 和 Project Rules的区别

特性 User Rules Project Rules
作用范围 全局(所有项目) 单个项目
目的 个人偏好,通用编码/沟通风格 项目特定知识、架构、规范和工作流
存储位置 Cursor 配置文件中(设置界面) 项目目录下的 .cursor/rules/
是否可共享 否(个人设置) 是(通过版本控制共享)
配置复杂度 简单(单个文本框) 更复杂(多个文件,支持 glob 模式)
激活方式 始终激活 根据文件路径(glob)、提问意图智能激活

      在实际的实践中,可以发现,User Rules 和 Project Rules 是相辅相成的强大工具,而非相互替代。通过结合使用它们,可以最大化 Cursor AI 的效能。

  • 明确分工: 将定义你个人风格的、不涉及项目具体实现的规则放在 User Rules 中。例如,“请使用中文回复”、“代码要简洁”等。
  • 拥抱项目规则: 对于任何涉及项目技术栈、代码结构、设计模式或团队约定的内容,都应该沉淀为 Project Rules。这不仅能帮助你自己,还能帮助团队所有使用 Cursor 的成员。
  • 保持 Project Rules 的原子性: 将不同关注点的规则拆分到不同的文件中。例如,一个文件负责组件规范,另一个文件负责 API 调用规范。这使得规则更易于管理和理解。
  • 善用 globs 精确地使用 globs 模式可以让规则在最需要的时候被激活,避免不相关的规则干扰 AI 的判断,同时节省上下文 Token。
  • 持续迭代: Rules 不是一成不变的。随着项目的发展和团队规范的演进,定期回顾和更新你的 User Rules 和 Project Rules,使其保持最新和有效。

       运用好规则,可以使得使用cursor更为顺手。通过设置规则,你可以为 AI 提供持久化的指令,使其行为更符合你的个人偏好和项目规范。这就像为你的 AI 助手编写了一份工作手册。关于规则的使用,推荐几个我常适应的几个开源项目,如下,在里面收录了常见的一些cursor的规则。

PatrickJS/awesome-cursorrules: 📄 Configuration files that enhance Cursor AI editor experience with custom rules and behaviors


关于memories

         Memories 是一种动态的、基于对话的上下文机制。与预先定义好的、静态的 Rules 不同,Memories 是 Cursor 通过与您的聊天交互,自动学习和总结出来的知识点。它的目的是捕捉那些在对话中出现的、对项目很重要的临时性或永久性信息,并将其保存下来以备将来使用。可以把 Memories 想象成 AI 的“学习笔记”。当您告诉它一些关于项目的重要信息后,它可以选择“记下”这个信息,并在未来的对话中自动引用,而无需您重复说明。

核心特点

  • 动态生成: 主要由 AI 根据对话内容自动生成,也可以手动创建。
  • 项目作用域: Memories 与特定项目相关联。
  • 智能检索: AI 会在后续对话中根据语义相关性,自动从“记忆库”中检索并应用相关信息。
  • 无需手动触发: 您不需要像 @ 引用文件那样手动调用记忆,AI 会在需要时自动使用。
  • 可管理: 您可以随时查看、编辑或删除项目中所有已保存的记忆。

任务进行分解与规划

      AI 如同一个聪明的初级开发者,面对宏大而模糊的任务时容易出错。将复杂功能(如“构建一个用户认证系统”)拆解为具体、可管理的小步骤(如“先创建注册表单”、“再实现后端验证逻辑”),可以显著提高 AI 的执行准确性和代码质量。

     就目前实践的效果来看,任务的粒度越小,ai完成的效果越好。对于大型功能,采用分步构建的方式。先让 AI 完成核心部分,确认无误后,再进行下一步开发,这样便于控制和纠错。

其它常使用的一些功能

智能终端与快捷键

将自然语言转化为命令行是 Cursor 的另一大亮点,结合高效的快捷键,能极大提升操作速度。

  • 终端AI (`Cmd/Ctrl + K`):在终端中按下 `Cmd/Ctrl + K`,然后用自然语言描述你想要执行的命令,例如“列出最近的五个 git 分支”,无需再记忆复杂的命令。

建立个人知识库

      将 AI 生成的优秀代码片段、解决方案或自定义的规则保存为 Markdown 文件,构建可复用的组件库和个人知识库。


个人思考       

        从刚开始的使用,虽然很方便,但感受到了恐惧,觉得使用AI code对于自己的编程能力的提升是不是没有任何帮助,会不会像是温水煮青蛙 ,当你在业务上一直使用AI code的时候,就是一直使用一直爽,但编程能力并没有得到提升,最后陷入一种恶行循环之中。像我之前并未熟练使用Java,但使用cursor却能独立的开发一个用于检测用户数据以及用户账号的中台,包含前端和后端,并且成功上线了。后来,我感觉好像也没必要过于担心,就像没有高级语言之前,编程是一件门槛很高的事情,大家那时候都是在用汇编语言,但高级语言比如C以及后面的Java、python等不就是一直在降低编程门槛这件事情嘛,现在估计使用汇编语言会很少了吧。那后面发展很有可能会形成一套自然语言规范的编程语言,当有这么一套效率极高的编程语言后,或许后面使用高级语言的也会很少吧。当然理解机器语言或者汇编语言对于高级语言的使用理解会很帮助,就像是理解高级语言对于使用AI code有帮助一样,更何况是现在的AI code还远没有发展成完美的程度。个人觉得最为重要的是一定要拥抱新的变化,绝不能排斥使用AI赋能,要善于利用AI,多多学习使用AI coding。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐