Cursor 规则配置实战:用 mdc 文件定制你的 AI 编程助手

0 阅读

Cursor 的规则系统能做什么

Cursor 不只是个带聊天窗口的编辑器。它的核心能力之一,是允许你通过“规则”(Rules)告诉内置的 AI:“在这个项目里,请按这种方式思考和写代码。”

文章配图

比如,你可以规定:

  • 所有新函数必须包含 JSDoc 注释
  • 禁止使用 var,只允许 constlet
  • 数据库查询必须通过封装好的 ORM 方法
  • 响应格式统一为 { code, data, msg }

这些要求不用每次跟 AI 反复强调。只要写进规则文件,AI 在生成或修改代码时就会自动遵守。

用户规则 vs 项目规则

Cursor 支持两种作用范围的规则:

用户规则(User Rules) 存放在你的个人配置目录,对所有打开的项目生效。适合放通用偏好,比如“永远用 2 个空格缩进”或“注释用英文”。

项目规则(Project Rules) 则放在具体项目的根目录下,只影响当前项目。这是更常用的方式,因为不同项目可能有不同的技术栈和规范。团队协作时,把规则文件提交到 Git,所有人都能获得一致的 AI 辅助体验。

两者可以共存。当项目规则存在时,它会覆盖同名的用户规则;没有冲突的部分则叠加生效。

规则文件长什么样?mdc 格式详解

Cursor 的规则文件使用 .mdc 后缀(如 cursor/rules.mdc)。它本质上是一种带元数据的 Markdown。

一个最简规则文件结构如下:

---
tags: [javascript, react]
---

# JavaScript & React 项目规范

- 使用箭头函数定义组件
- 状态管理优先使用 useState/useReducer,避免 class 组件
- 所有 API 调用必须通过 `apiClient` 封装

开头的 --- 区块是 YAML front matter,用于声明元信息。最关键的字段是 tags,它决定了这条规则在什么情况下被激活。

tags 的匹配逻辑

当你在编辑一个 .js 文件时,Cursor 会自动给当前上下文打上 javascript 标签。如果你的规则文件也包含 tags: [javascript],这条规则就会被加载。

标签可以是语言(python, typescript)、框架(react, django),甚至是自定义字符串。你可以在项目设置里手动添加全局标签,也可以在规则文件里自由定义。

规则内容怎么写

YAML 区块之后就是普通的 Markdown 正文。这里写的就是你要给 AI 的指令。建议:

  • 用清晰的条目列出要求
  • 避免模糊表述,如“尽量”“最好”
  • 提供具体例子比抽象描述更有效

例如,与其说“错误处理要规范”,不如写:

所有异步函数必须用 try/catch 包裹,并在 catch 块中调用 logger.error(e),不得直接 console.log。

实战:为一个 Node.js 项目配置规则

假设我们有一个 Express 后端项目,希望 AI 遵守以下约定:

  1. 路由处理器必须放在 src/controllers/ 目录
  2. 数据库操作通过 db.query() 方法,禁止拼接 SQL 字符串
  3. 响应统一使用 res.json({ code: 200, data: ..., msg: '' })

第一步:创建规则文件

在项目根目录新建文件夹 cursor,然后创建 rules.mdc

your-project/
├── cursor/
│   └── rules.mdc
├── src/
│   ├── controllers/
│   └── ...
└── package.json

第二步:编写规则内容

---
tags: [nodejs, express, javascript]
---

# 项目编码规范

## 目录结构
- 新增的路由处理器必须放在 `src/controllers/` 目录下
- 工具函数放在 `src/utils/`

## 数据库
- 所有数据库查询必须使用 `db.query(sql, params)` 方法
- **禁止** 拼接 SQL 字符串,防止注入攻击
- 示例:`db.query('SELECT * FROM users WHERE id = ?', [userId])`

## API 响应
- 成功响应格式:`res.json({ code: 200, data: result, msg: '' })`
- 错误响应格式:`res.json({ code: 400, data: null, msg: '错误描述' })`
- 不要直接返回原始错误对象

第三步:验证规则是否生效

打开一个 .js 文件,尝试让 Cursor 生成一个新接口。如果规则生效,它应该:

  • 自动把函数放到 controllers/ 目录(如果你让它创建文件)
  • 使用 db.query 而不是字符串拼接
  • 返回符合格式的 JSON

如果没遵守,检查:

  • 文件路径是否正确(必须是 cursor/rules.mdc
  • 当前文件是否被识别为 javascript(看右下角语言标识)
  • tags 是否匹配

高级技巧与注意事项

多个规则文件

你可以在 cursor/ 目录下放多个 .mdc 文件。Cursor 会合并所有匹配的规则。例如:

  • security.mdc:专门放安全相关规则
  • style.mdc:代码风格约定

这样便于维护,也方便团队成员各管一块。

覆盖默认行为

Cursor 内置了一些通用规则。如果你想完全禁用某条默认行为,可以在自己的规则里明确否定。例如:

不要使用任何第三方 UI 库,所有组件必须手写 CSS。

规则不是万能的

规则会影响 AI 的“倾向性”,但不能 100% 强制。复杂场景下,AI 可能还是会偏离。这时候需要:

  • 在聊天中再次强调关键点
  • /edit 命令配合规则进行精确修改
  • 审查生成的代码

性能影响

规则文件会被加载到上下文中,过长的规则会占用 token。建议保持简洁,只写最关键、最容易被忽略的约定。

为什么这个功能值得用

很多团队花大力气搞 ESLint、Prettier、Commitlint,却忽略了 AI 编码的一致性。结果是:人写的代码整齐划一,AI 生成的代码风格迥异,反而增加了 review 负担。

通过项目级规则,你可以把团队规范“喂”给 AI,让它从源头就产出符合标准的代码。这不仅是提效,更是把 AI 真正融入开发流程的关键一步。

下次启动新项目时,不妨先花 10 分钟写个 rules.mdc——你会回来感谢自己的。