用 Cursor 还在被 AI 乱改代码?你可能没用对 Rules!
什么是 Cursor Rules?
Cursor Rules 是一组用于指导 AI 编码行为的规则系统,本质上是一种 可复用、持久存在的上下文,可确保 AI 理解你的角色、技术栈、项目规范和偏好,并在每次交互中自动携带。
Cursor Rules 目前支持三种形式:
- Project Rules:项目级规则,保存在
.cursor/rules/*.mdc
- User Rules:全局规则,适用于所有项目
.cursorrules
:旧版本规则文件格式,已废弃
建议使用新版 .mdc
格式,支持更强的结构化组织和优先级控制。
如何在 Cursor 中创建和管理 Rules?
- 打开 Cursor,进入 Settings。
- 切换到 Rules 面板。
- 点击 Add new rule,新建规则。
规则会保存在
.cursor/rules/
目录下,文件后缀为.mdc
.mdc 规则文件结构详解
每个规则文件都包含两部分:元信息(YAML) + 规则内容(Markdown)
---
description: 为 Tailwind + Shadcn + Radix 项目提供代码风格和最佳实践指导
globs: ["src/**/*.{ts,tsx}"]
tags: ["tailwind", "shadcn", "radix"]
priority: 2
version: 1.0.0
---
# Tailwind + Shadcn + Radix 项目规范
## Context
- 本项目基于 React + Next.js,使用 TailwindCSS、Shadcn UI 和 Radix UI
- 希望生成代码风格统一、可维护性强、可访问性好的组件
## Requirements
- 使用函数式组件,命名以 PascalCase 为准
- 所有组件必须明确 props 类型
- 使用 TailwindCSS 进行样式控制,禁止使用内联 style
- 事件函数统一以 `handle` 前缀命名(如 `handleClick`)
- 使用 `const` 声明组件和函数
- 优先使用声明式、组合式写法,避免嵌套冗余
- 尽可能实现无障碍访问性(a 标签需添加 `tabindex`、`aria-label`、`onKeyDown` 等)
## Examples
<example>
```tsx
const Button = () => (
<button
className="bg-primary text-white px-4 py-2 rounded"
onClick={handleClick}
aria-label="提交"
tabIndex={0}
onKeyDown={handleKeyDown}
>
提交
</button>
);
良好示例:函数组件、Tailwind 样式、无障碍支持
Rule Type 类型说明(非常重要!)
每条规则可设置不同的生效方式:
类型 | 说明 |
---|---|
Always | 始终生效,适用于核心规范 |
Auto Attached | 当 AI 检测到匹配的 globs 文件时自动附加 |
Agent Requested | 当 AI 判断需要时请求使用,需写好 description |
Manual | 必须通过 @规则名 显式调用,适合临时工具类规则 |
从 Cursor 0.49 起还支持自动生成规则:输入 /Generate Cursor Rules
,即可让 AI 帮你自动创建 .mdc
文件。
推荐资源:Cursor Directory
Cursor Directory 是一个开源的 Rules 模板集合,包含多种语言/技术栈/框架的规则文件:
- React + Tailwind + Radix 组件规范
- Next.js 项目最佳实践
- Supabase SSR 安全用法
- 禁止 AI 输出某类代码模式(防止踩坑)
这些模板都可以作为你写规则时的参考或起点。
实战案例:Supabase SSR 的反面教材
下面是一个 Supabase 项目的规则示例,它通过“禁止某类写法 + 强制指定正确写法”,大幅减少了 AI 生成错误代码的可能性:
---
description: 使用SupabaseAuth编写Next.js应用的指南
globs: ["**/*.ts", "**/*.tsx"]
---
# Supabase SSR 安全用法指南
## 🚨 禁止以下代码模式 🚨
- 禁止使用 `get`/`set`/`remove` 方法处理 cookie
- 禁止从 `@supabase/auth-helpers-nextjs` 导入
## 正确写法要求
- 必须使用 `@supabase/ssr`
- 只允许使用 `getAll` 和 `setAll`
- 强制使用中间件刷新会话令牌
## 不当实现将导致:
- 生产环境崩溃
- 会话失效
- 安全漏洞
这样的规则可以让 AI 在生成代码前先进行验证判断,从根源避免“AI 自作主张地踩坑”。
总结:如何用好 Cursor Rules?
- 为每个技术栈都写 Rules,并做好分类(tags)
- 控制规则长度:建议每个规则控制在 500 行以内,便于维护
- 写好正反示例:增强语义理解效果
- 描述清晰具体:“你是谁 + 你要做什么 + 不能做什么”
- 日常抽象经验为规则:AI 表现不佳时,不要只改提示词,应考虑沉淀为规则文件
- 合理设置 Rule Type:核心规范用 Always,细化逻辑用 Auto/Agent
最后一条建议
如果你和 Cursor Agent 来回两次还解决不了问题,那就别犹豫——是时候写一条 Rule 了!
与其不停改 prompt、浪费 Token,不如写一条精准的 Rules 来永久解决同类问题。这不仅能提升效率,还能避免未来团队协作时 AI 行为不一致的混乱。
别再让 Cursor 成为“减效工具”!