最近从Copilot切到Cursor,确实爽,但有个问题很头疼。我让它写个简单的列表页,它非得给你搞出自定义Hook + 泛型 + 备忘录优化,一个展示组件拆成四个文件。我寻思这项目就我一人维护,真没必要这么“优雅”。试过在rules里写“保持简单,不要过度抽象”,但感觉它还是按着GitHub上那些开源项目的风格来。想问下大家,有没有什么prompt技巧能让它“看人下菜碟”?比如根据我的代码库风格自动调整,或者有没有类似“代码复杂度上限”这种参数可以调的?另外它老爱自作主张给我加PropTypes,明明项目用的TS,怎么彻底禁用这个行为?
用Cursor写React组件老是被“过度设计”,怎么调教它别整花活?
全部回复
共 32 条试试在rules里加“禁止PropTypes,禁止新文件”,我这么干之后它老实多了,不过抽象那毛病还是得靠多敲几轮才改。
这个问题太真实了,我也是从Copilot切过来的,Cursor确实爱炫技。我的土办法是在rules开头直接加一句“所有代码按现有文件风格写,禁止引入新依赖或新文件”,然后每次让它改代码前把目标文件丢给它当参考,比写抽象规则管用多了。TypeScript项目里PropTypes禁用的话,你可以在settings里把检测关掉,或者干脆在rules里写“但凡出现PropTypes就视为错误”,它下次就不敢了。
这个“过度设计”的问题我也遇到过,感觉Cursor默认确实有一套自己的审美,像是从那些star过万的开源模板里学来的。我后来发现光在rules里写“保持简单”基本没用,它该拆还是拆,得配合项目根目录的.cursorrules文件,把具体反例写进去,比如“禁止创建单文件超过80行的组件”“禁止为一次性逻辑抽Hook”,越具体越管用。另外你可以在对话里直接引用现有代码,说“按这个文件的风格来”,它模仿能力其实挺强的,比抽象指令好使。PropTypes那个我也烦,明明tsconfig都开了strict,它还是给你加,后来我在rules里明确写了“项目使用TypeScript,禁止任何PropTypes和defaultProps”,目前没再犯过。还有个偏方是让它先别写代码,先口述方案,你确认了再动手,能挡掉一大半花活。复杂度上限这种参数确实没有,但你可以用“如果超过X行就停下来问我”这种话术来卡它。
这个问题我也踩过坑,Cursor确实有股“我要写出最优雅代码”的执念。我觉得根子在于它默认把每个任务都当成给开源项目贡献代码来对待,而不是给个人小项目写能跑的代码。后来我的做法是在rules里加一句“假设这个项目只有我一个开发者,三个月后我自己都懒得看复杂抽象”,效果比单纯说“保持简单”好不少,因为给了它一个具体的人设和场景。另外可以在项目根目录扔一个简短的style.md,把现有几个组件的代码贴进去当示例,让它模仿你已有的风格,这比抽象描述管用。PropTypes的问题我遇到过,你可以在rules里明确写“项目使用TypeScript,禁止生成PropTypes和defaultProps”,语气强硬一点它才听。不过它偶尔还是会在某些文件里犯病,我一般直接在chat里回一句“删掉PropTypes,用TS interface”,它下次在这个会话里就记住了。其实还有个歪招,在prompt里说“这段代码是给一个刚学React的实习生看的”,它立马就收敛了,你可以试试。
我前几天也遇到同样的问题,后来在.cursorrules里加了句“禁止任何形式的抽象,除非我明确要求”,效果还行。不过PropTypes那个确实烦,我直接在rules里写了“项目使用TypeScript,永远不要生成PropTypes”,目前没再犯过。你还可以试试把组件复杂度控制在50行以内写进规则,它会收敛很多。
我也遇到过这毛病,后来在.cursorrules里直接写“禁止抽象,除非我说要”,再配上“每个组件单文件,最多50行”,效果好了不少。PropTypes那个可以在设置里把“Import PropTypes”的自动补全关掉,或者rules里加一句“项目使用TS,永远不要引入PropTypes”。另外建议把项目里几个典型文件丢给它当参考,说“照这个风格写”,比光讲规则管用。
我也被这个坑过,后来在.cursorrules里直接写“禁止创建新文件,所有代码写在当前文件里”,效果立竿见影。PropTypes那个可以在rules里加一句“项目使用TypeScript,禁止生成PropTypes和defaultProps”,它基本就老实了。泛型和自定义Hook确实难压,我的经验是prompt里直接说“用最笨的写法,不要抽象”,比说“保持简单”管用。另外可以贴一段你现有的烂代码给它看,它模仿能力很强,看到你写得随意它就不端着了。
我一般会在.cursorrules里直接贴一段现有组件的代码当范例,然后写“新组件必须和这个风格一致,禁止新增抽象层”,比干巴巴说“保持简单”管用多了。PropTypes那个可以在rules里明确写“项目使用TypeScript,禁止生成PropTypes或defaultProps”,它基本就不加了。还有个歪招是prompt里加一句“这是个人小项目,不是开源库,别按最佳实践来”,它真的会收敛很多。
这问题太真实了,我刚开始用Cursor也遇到过,写个todo list给我整出个useReducer加context再加自定义hook,看着头大。后来我发现光靠rules里写“保持简单”基本没用,它训练数据里那些开源项目就是那个调性。我现在的做法是在rules里直接贴一段我自己项目里的“反面教材”,比如“禁止创建新文件除非超过80行”“禁止用useMemo除非有性能问题证据”,把规则写得特别具体,它才收敛一点。另外你可以试试在对话开头就丢一句“模仿我下面这个组件的风格来写”,然后贴一个你自己写的简单组件,比抽象描述管用。PropTypes那个我也烦,明明tsconfig都开了strict,它还是加,后来我在rules里明确写“禁止任何PropTypes和defaultProps,类型只用TS interface”,目前没再犯过。还有个偏方是用.cursorrules里加“你是一个初级前端,只写最直白的代码”,角色设定有时候比规则更有效。不过说实话,它还是会偶尔抽风,关键组件我还是自己写,让它补测试和样式就完了。
Cursor确实容易这样,我后来在rules里加了“除非我明确要求,否则不要新建文件、不要抽Hook”,效果还行。PropTypes那个可以在rules里直接写“项目用TS,禁止生成PropTypes和defaultProps”,它就老实了。另外我会在prompt里带一句“按我现有组件的写法来”,然后贴一段自己的代码当参考,比空口说“保持简单”管用多了。
我切到Cursor之后也踩过这个坑,它默认就爱按开源库那种“教科书式”写法来,一个小组件能给你拆出花。后来我发现rules光写“保持简单”太虚了,得具体到能落地,比如直接写“禁止新增自定义Hook除非我明确要求”“组件不超过80行”“不要用泛型除非类型推导失败”。另外你可以在项目根目录放个.cursorrules,把“不要添加PropTypes,项目统一用TS类型”这种硬规则写死,它基本会照做。还有个偏方是拿你自己代码库里最“土”的那个组件当示例贴给它,说“照这个风格写”,比抽象描述管用多了。至于“看人下菜碟”,Cursor确实会读你打开的文件和项目结构,所以写之前先打开一个你满意的旧组件,它模仿的概率会高不少。复杂度上限没找到现成参数,但可以用prompt里加“如果超过两个文件就停下来问我”来卡住。
我一般是直接在.cursorrules里把“禁止新增抽象层”写死,还加了一条“除非我明确要求,否则不要拆文件”。PropTypes那个确实烦,后来发现是它默认套ESLint模板,在rules里写“项目使用TypeScript,禁止任何PropTypes和defaultProps”就消停了。至于看代码库风格,可以试试在对话里先@几个你写得最满意的现有组件,说“照这个风格来”,比纯文字描述管用多了。