
1. 为什么你的Cursor总差点意思用Cursor写代码这件事我身边的朋友分成两派。一派觉得它就是套了AI壳的编辑器补全偶尔灵光大部分时候还得自己动手另一派则把它当主力工具一天下来代码量翻倍人还不累。同样的工具差距怎么这么大答案基本都落在配置上。Cursor的默认状态相当于一个刚装好的编辑器什么都能干但什么都不精。它不知道你的项目用什么框架、命名习惯是什么、哪些目录不该碰、注释要写中文还是英文。这些信息如果每次对话都靠手打效率自然上不去。而.cursorrules、.cursor/rules/*.mdc、.cursorignore这几个配置文件就是把这些重复交代的事情固化下来让AI在每次补全、每次对话之前就已经站在你项目的语境里。这套配置解决的核心问题有三个第一减少重复的上下文交代不用每次开新对话都重新说明项目背景第二约束AI的输出风格让它生成的代码符合团队规范而不是自由发挥第三控制AI能看到什么、不能看到什么避免它在无关文件里瞎找也避免敏感配置被带进上下文。适合谁来参考如果你已经在用Cursor但感觉它“也就那样”这套配置能让你重新认识它如果你刚下载还没深入用那正好一开始就把规则立好后面省事如果你团队里有人在用Cursor但各写各的这套东西也可以作为统一规范的起点。下面我按实际配置的顺序把每个文件的作用、写法、踩过的坑都拆开讲。2. 规则文件到底该放哪、怎么写2.1.cursorrules和.cursor/rules/*.mdc的关系早期Cursor只认项目根目录下的.cursorrules文件一个纯文本文件里面写什么它就读什么。后来规则系统升级引入了.cursor/rules/目录里面可以放多个.mdc文件每个文件可以带元信息比如这条规则什么时候生效、作用于哪些文件。两者目前是共存的.cursorrules依然有效但.cursor/rules/*.mdc更灵活。我的建议是新项目直接用.cursor/rules/目录老项目如果已经有.cursorrules也不用急着迁可以先留着新规则往.mdc里加。两者同时存在时Cursor会把它们都读进去规则多了可能会互相干扰所以最好统一到一种方式。.mdc文件的基本结构长这样--- description: 项目通用编码规范 globs: alwaysApply: true --- - 所有变量命名使用小驼峰 - 组件文件使用大驼峰 - 注释统一使用中文description是给这条规则一个说明方便自己以后回看globs指定这条规则对哪些文件生效比如src/**/*.tsalwaysApply为true时表示这条规则始终生效不限于特定文件。如果globs留空且alwaysApply为true就是全局规则。2.2 全局规则和项目规则怎么分工我习惯把规则分成两层。一层是全局的放在用户目录下对所有项目生效主要写我个人的编码偏好比如“函数参数超过三个时考虑用对象传参”“避免使用any类型”“注释用中文”。另一层是项目级的放在项目根目录的.cursor/rules/里写这个项目特有的东西比如“这个项目用Vue 3组合式API”“状态管理用Pinia”“接口请求统一走src/api/目录下的封装”。这样分工的好处是换项目时全局规则不用动项目规则跟着仓库走团队里其他人拉下来就能用同一套。全局规则的路径在Cursor设置里可以找到不同系统位置不一样但都在用户配置目录下找rules相关的文件夹就对了。2.3 规则写多细才合适这是最容易走极端的地方。有人写规则就一句话“写好的代码”等于没写有人写了几百行把整个代码规范文档搬进去结果AI反而抓不住重点。我的经验是规则文件控制在50到150行之间比较合适重点覆盖这几类内容技术栈声明项目用什么语言、框架、版本比如“React 18 TypeScript 5 Vite”命名约定变量、函数、组件、文件、目录的命名风格代码风格缩进、引号、分号、换行这些虽然格式化工具会管但AI生成时也需要知道目录结构约定组件放哪、工具函数放哪、类型定义放哪注释和文档注释语言、是否需要JSDoc、提交信息格式禁止事项比如“不要用var”“不要直接操作DOM”“不要引入新的第三方库”注意规则文件里不要写太抽象的话比如“代码要优雅”“性能要好”AI没法执行。要写就写具体的、可判断的规则比如“列表渲染必须加key”“异步操作必须处理错误”。2.4 一个可直接抄的规则模板下面这个模板是我在多个前端项目里用过的你可以根据自己的技术栈改--- description: 前端项目通用规则 alwaysApply: true --- ## 技术栈 - 框架React 18 TypeScript 5 - 构建Vite - 样式Tailwind CSS - 状态Zustand ## 命名 - 组件文件大驼峰如 UserProfile.tsx - 工具函数小驼峰如 formatDate.ts - 常量全大写下划线如 MAX_RETRY_COUNT - CSS类名Tailwind原子类优先自定义类用短横线 ## 代码风格 - 使用函数组件和Hooks不用类组件 - 优先使用const需要重新赋值时用let禁止var - 类型定义优先用interface联合类型用type - 避免any不确定时用unknown ## 目录约定 - 组件src/components/ - 页面src/pages/ - 工具src/utils/ - 类型src/types/ - API封装src/api/ ## 注释 - 注释使用中文 - 复杂逻辑必须写注释说明意图 - 导出函数写JSDoc ## 禁止 - 不要引入lodash用原生方法或自己写工具函数 - 不要直接操作DOM通过ref或状态驱动 - 不要提交console.log这个模板不算长但覆盖了AI生成代码时最需要知道的上下文。实际用下来补全的准确率和代码风格一致性都有明显提升。3. 让AI少犯错的关键配置项3.1.cursorignore告诉AI哪些文件别碰.cursorignore的语法和.gitignore一样写进去的文件和目录Cursor在索引和读取上下文时会跳过。这个文件的重要性被很多人低估了。默认情况下Cursor会尝试索引项目里的文件来提供更好的补全和问答但如果项目里有大量生成文件、依赖目录、日志文件索引这些内容不仅浪费资源还可能让AI在回答时引用到无关甚至过时的代码。我通常会把这些东西加进去node_modules/ dist/ build/ coverage/ *.log .env .env.local *.min.js *.bundle.jsnode_modules和构建产物是必须排除的否则索引量巨大。.env系列文件也要排除里面可能有密钥和配置不应该进入AI的上下文。日志文件和压缩后的代码同样没有索引价值。提示.cursorignore只影响Cursor的索引和上下文读取不影响Git也不影响你正常编辑这些文件。它纯粹是给AI看的“禁入区”。3.2 索引范围与性能的平衡Cursor的索引机制是它在后台扫描项目文件建立向量索引这样你问问题时它能快速找到相关代码。项目小的时候无所谓项目大了之后索引会占内存、耗电有时候还会出现“Cursor taking longer than expected”的提示。除了用.cursorignore排除无关文件还可以在设置里调整索引的行为。我的做法是只索引源码目录。比如前端项目只索引src/后端项目只索引app/或server/。测试文件、文档、配置文件如果不需要AI频繁引用也可以排除。这样索引量能降下来响应速度会好很多。另外如果项目里有多个子项目或monorepo结构可以在工作区设置里只打开当前开发的那个子目录而不是整个仓库。Cursor对打开的工作区范围做索引范围越小越快。3.3 中文回复的设置方法Cursor默认用英文回复这对英文不好的朋友不太友好。设置中文回复有两个层面。一个是界面语言在设置里找语言选项切换成中文菜单和提示会变成中文。另一个是AI回复的语言这个不在界面设置里而是要在规则文件里写明。在.cursor/rules/里加一条规则--- description: 回复语言 alwaysApply: true --- - 所有对话回复使用中文 - 代码注释使用中文 - 提交信息使用中文这样AI在对话和生成代码时都会用中文。实测下来规则里写了之后中文回复的稳定性比在对话里临时说“请用中文”要高得多因为后者在新开对话后就会失效。3.4 模型选择和额度管理Cursor内置了多个模型可选不同模型的能力和消耗不一样。日常补全用默认的就行复杂重构或架构设计时可以切到更强的模型。免费额度方面Cursor提供一定的免费使用量超出后需要订阅。我的建议是把强模型留给真正需要思考的任务比如“帮我重构这个模块”“这段逻辑有什么问题”简单的补全和格式化用默认模型额度消耗会慢很多。另外Cursor的设置里可以关闭自动更新。有些版本更新后会改变行为或重置配置如果你当前版本用着稳定可以暂时不更新等确认新版本没问题再升。4. 从零开始配置的完整流程4.1 第一步创建规则目录和文件在项目根目录下创建.cursor/rules/目录然后在里面新建.mdc文件。我一般会分几个文件来写而不是全塞在一个文件里project.mdc技术栈、目录结构、项目特有的约定style.mdc命名、代码风格、注释规范forbidden.mdc禁止事项和常见错误分文件的好处是每条规则的作用范围可以单独控制。比如style.mdc可以设置globs: src/**/*只对源码生效project.mdc设置alwaysApply: true全局生效。创建完文件后Cursor会自动读取。你可以在对话里问“你现在知道我的项目用什么框架吗”测试规则是否生效。4.2 第二步配置.cursorignore在项目根目录创建.cursorignore文件把不需要索引的目录和文件写进去。写完后在Cursor设置里找到索引相关的选项手动触发一次重新索引让新的忽略规则生效。这一步做完后可以观察一下Cursor的响应速度。如果之前有卡顿排除掉node_modules和构建产物后通常会流畅不少。4.3 第三步调整编辑器基础设置Cursor基于VS Code所以VS Code的设置大部分通用。我必调的几个项字体和字号找一个等宽字体字号调到眼睛舒服的大小自动保存开启避免忘记保存导致AI读到旧代码格式化开启保存时自动格式化配合Prettier或ESLintTab补全Cursor的Tab补全很强大确保它是开启状态行内建议根据习惯调整触发方式我习惯用快捷键手动触发避免打字时干扰这些设置看似和AI无关但它们决定了你写代码的流畅度。AI补全再强如果编辑器本身用着别扭整体效率还是上不去。4.4 第四步验证配置效果配置完之后做几个测试来验证新开一个对话问“这个项目用什么技术栈”看它能不能从规则里读到让它生成一个组件看命名和目录是否符合规则问一个涉及被忽略目录的问题看它是否会去引用那些文件用中文提问看回复是否是中文如果这几项都符合预期说明配置基本到位了。如果有偏差回去检查对应的规则文件看是不是写法有问题或者作用范围没设对。5. 常见问题与排查技巧实录5.1 规则不生效怎么办这是最常见的问题。规则写了但AI好像没读到。排查顺序如下现象可能原因解决方法规则完全没反应文件位置不对确认.cursor/rules/在项目根目录.mdc文件在里面部分规则生效部分不生效globs范围不对检查globs是否匹配当前文件路径新开对话后规则失效规则没设alwaysApply把通用规则设为alwaysApply: true规则冲突多个文件写了矛盾内容合并规则确保同一事项只有一处定义还有一个容易忽略的点.mdc文件的元信息格式必须正确---包围的部分不能有语法错误否则整条规则可能被跳过。5.2 AI补全太啰嗦或太简短补全的长度和风格可以通过规则调整。如果觉得它总是生成大段代码可以在规则里写“只生成必要的代码不要添加未要求的函数和注释”。如果觉得它补全太短可以写“生成完整的函数实现包含错误处理”。这些偏好写进规则后补全行为会稳定很多。另外Cursor的设置里也有补全相关的选项比如是否启用多行补全、补全的触发延迟等。结合规则和设置一起调效果更好。5.3 索引卡顿和内存占用项目大了之后Cursor的索引进程可能占用较多内存。除了用.cursorignore排除文件还可以在设置里限制索引的并发数或关闭实时索引改为手动触发。如果电脑配置一般建议关闭不必要的后台索引需要时再手动刷新。还有一个技巧把不常开发的项目从工作区移除只保留当前活跃的项目。Cursor对打开的工作区做索引工作区越小资源占用越低。5.4 中文回复不稳定有时候规则里写了中文但AI还是偶尔回英文。这通常是因为对话历史里英文内容太多或者当前问题的上下文以英文为主。解决办法是在规则里把中文要求写得更明确比如“无论用户使用什么语言提问回复一律使用中文”。另外如果对话已经进行了很多轮且都是英文可以新开一个对话让规则重新生效。5.5 规则文件要不要提交到Git我的建议是提交。.cursor/rules/和.cursorignore都是项目配置的一部分提交后团队里其他人拉下来就能用同一套规则保证AI生成的代码风格一致。.cursorrules如果还在用也一并提交。但要注意规则文件里不要写敏感信息比如内部API地址、密钥等这些应该放在环境变量里并且用.cursorignore排除。6. 进阶玩法让规则随项目成长6.1 按模块拆分规则项目大了之后不同模块可能有不同的约定。比如前端项目里组件目录和工具函数目录的规范就不一样。这时候可以用globs把规则拆分--- description: 组件开发规范 globs: src/components/**/* alwaysApply: false --- - 组件使用函数式写法 - Props用interface定义 - 每个组件一个目录包含index和样式文件这样只有编辑组件目录下的文件时这条规则才生效不会干扰其他模块。6.2 用规则记录项目特有的“坑”每个项目都有一些外人不知道的约定比如“这个项目的日期格式化必须用dayjs不能用原生Date”“接口返回的数据结构统一在src/types/api.ts里定义”。这些信息写进规则AI在生成相关代码时就会遵守省去反复纠正的麻烦。我习惯在项目开发过程中每次发现AI犯了同样的错误就把对应的规则补进去。规则文件是活的随着项目一起成长。6.3 定期清理和合并规则规则写多了之后可能会出现重复或矛盾。建议每隔一段时间回看一遍把不再适用的删掉把重复的合并。规则文件不是越长越好而是越精准越好。一个干净、聚焦的规则文件比一个臃肿的规则文件更能让AI抓住重点。6.4 结合版本控制做规则审查如果团队多人使用Cursor可以把规则文件的变更纳入代码审查流程。谁改了规则、为什么改都记录下来。这样规则文件本身也有了版本历史出问题时可以追溯。对于团队协作来说这比每个人各自维护一套规则要高效得多。7. 我踩过的几个坑第一个坑是规则写得太抽象。刚开始我写“代码要清晰易读”结果AI完全不知道该怎么执行。后来改成“函数不超过50行”“嵌套不超过3层”效果立刻不一样。规则必须是可判断的AI才能执行。第二个坑是.cursorignore忘了排除构建产物。有一次项目里有个巨大的dist目录Cursor索引了半天电脑风扇狂转。加上忽略规则后世界安静了。第三个坑是规则文件冲突。我在.cursorrules和.mdc里都写了命名规范但内容不一致结果AI有时候按这个来有时候按那个来。后来统一到.mdc里删掉.cursorrules问题解决。第四个坑是中文回复规则没设alwaysApply。新开对话后AI又回英文了我还以为是bug。后来发现是规则的作用范围没设对改成全局生效后就稳定了。这几个坑说到底都是配置细节问题但每一个都实实在在影响使用体验。配置这件事花半小时弄好后面省下的是几十个小时的重复劳动。8. 配置之外的一点经验工具配置到位之后剩下的就是使用习惯。我自己的习惯是把Cursor当成一个需要交代背景的协作者而不是一个许愿池。规则文件就是交代背景的方式交代得越清楚它配合得越好。另外不要指望AI一次生成完美代码把它当成一个打字很快但需要review的初级开发你负责把关和调整它负责出初稿这个分工下效率最高。还有一点规则文件不是一劳永逸的。项目在变技术在变规则也要跟着更新。我一般每个月回看一次规则文件把过时的删掉把新发现的约定补进去。这个习惯坚持下来Cursor用起来会越来越顺手。