最近从Copilot切到Cursor,确实爽,但有个问题很头疼。我让它写个简单的列表页,它非得给你搞出自定义Hook + 泛型 + 备忘录优化,一个展示组件拆成四个文件。我寻思这项目就我一人维护,真没必要这么“优雅”。试过在rules里写“保持简单,不要过度抽象”,但感觉它还是按着GitHub上那些开源项目的风格来。想问下大家,有没有什么prompt技巧能让它“看人下菜碟”?比如根据我的代码库风格自动调整,或者有没有类似“代码复杂度上限”这种参数可以调的?另外它老爱自作主张给我加PropTypes,明明项目用的TS,怎么彻底禁用这个行为?
用Cursor写React组件老是被“过度设计”,怎么调教它别整花活?
全部回复
共 14 条在rules里加一句“只写当前文件需要的最小实现,禁止额外抽象”试试,比空泛的“保持简单”管用。
PropTypes我直接在settings.json里把相关规则禁了,再补一句“优先用TS类型,别加PropTypes”就行。
说实话我也被这个折磨过一阵,后面发现光在rules里写“保持简单”没用,它理解不了你的“简单”指的是什么。我现在的做法是直接给它喂一个你项目里最小可用的组件范例,让它照着那个风格写,比写一百句提示词都管用。还有个土办法,就是故意在需求描述里加一句“不要创建新文件,所有代码放在当前组件里”,这样它就不好拆分了。至于PropTypes那个,你在Cursor的设置里搜一下“propTypes”相关的插件或规则,直接把自动补全的选项关掉就行,或者更粗暴点,在rules里写“本项目使用TypeScript,禁止生成PropTypes”,多强调几遍它基本能记住。不过说真的,AI写代码确实有“炫技”倾向,有时候你越跟它讲道理它越来劲,反而直接给负面示例(比如“别写成这样:xxx”)效果立竿见影。
说真的我也有同感,它那个自定义Hook的瘾比我还大,后来我直接在rules里加了一句“如果代码量少于100行,禁止提取函数或类型”,效果立竿见影。PropTypes那个你可以试试在设置里搜“propTypes”,把相关的自动补全和检查项全关掉,或者直接在tsconfig里把allowJs设成false让它没脾气。另外你可以在每个prompt开头加一句“这是个人项目,代码越直白越好,别学开源库那套”,它好像能听懂这种大白话。
同感,我这周也被它整破防了,一个按钮组件非要搞个options配置对象。后来我在rules里直接写“禁止自定义hook,禁止泛型,组件代码控制在100行内”,语气强硬点会好很多。PropTypes那个可以在设置里搜“typeChecking”或者直接在rules里说“不要生成PropTypes,用TS类型就够了”,它基本就老实了。不过说实话,现在这种大模型都吃软不吃硬,你给它几个你项目里的真实组件当few-shot示例,比写十条规则都管用。
说实话我也有同感,它那股子“开源最佳实践”的劲儿确实挺烦人的。我试过在rules里直接写“禁止使用泛型、禁止自定义Hook、优先单文件组件”,再配合把项目里的现有代码路径丢给它参考,效果能好不少。PropTypes那个确实无解,我都是装个eslint插件直接把它当error报,逼着它不写。另外你可以试试在对话里直接甩它一句“这个项目就我一个人写,按我现有代码风格来”,别让它看网上那些复杂例子,有时候比写一堆规则管用。
在rules里直接写“禁止自定义Hook和泛型,列表页只准用map渲染”,比写“保持简单”好使多了。
PropTypes这问题无解,我都是生成后全局搜一下批量删,反正TS类型都写好了。
同感,Cursor默认的“最佳实践”其实是从大型团队和开源项目里学出来的,它根本不知道你是一个人维护。你试试在rules里不写抽象原则,直接写“此项目为个人项目,禁止创建新文件,所有代码写在当前文件内”,效果比“保持简单”这种模糊指令强得多。至于PropTypes,你可以在settings.json里把那个“autoImportTypes”或者类似插件相关的选项关掉,不过我猜更大概率是它把TS类型推断和PropTypes搞混了,建议在rules里明确写“项目使用TypeScript,禁止生成PropTypes,禁止使用any”。另外有个偏方,你可以在每次提问前给它看一遍你最近写的代码片段,它其实有很强的上下文模仿能力,比全局规则管用。最后,如果它硬要拆文件,你就直接说“把这段逻辑内联”,多纠正几次它应该能记住你的偏好。
同感,我这边也是被它那套“企业级架构”折磨过,后来直接在项目根目录放了个CLAUDE.md,开头就写“本项目为个人项目,严格禁止自定义Hook和泛型,所有组件单文件实现”,效果比rules里写强不少。PropTypes那个确实烦,我在设置里把TypeScript验证关掉,再在rules里加一句“禁止使用PropTypes”,基本就不犯了。不过它偶尔还是会抽风,遇到太复杂的请求,干脆拆成两步让它先给方案再写代码,至少能拦一半花活。
这我太有同感了,它默认写出来那套东西感觉是给十人团队准备的,搁自己项目里纯属添乱。你试试在项目根目录放个CLAUDE.md,直接写“本仓库为个人项目,禁止创建额外类型文件,禁止使用泛型,优先使用内联逻辑”,比rules管用得多。PropTypes那个我是在设置里把“Enable JavaScript”那个选项关了,或者直接装个ESLint插件把react/prop-types设为error,它就不会再自作主张了。另外真要“看人下菜碟”,可以拿你以前写的几个组件喂给它当few-shot示例,比写抽象规则好使。
我跟你一模一样的遭遇,它那套“优雅”组合拳打得我脑壳疼。后来我在rules里直接写“禁止使用泛型、禁止自定义Hook、单文件内完成”,然后把它生成代码的上下文窗口调小,它反而老实多了。PropTypes这个我真没辙,试过在设置里关掉相关选项,但偶尔还是会冒出来,感觉是模型训练时的惯性太强了。
跟你一模一样,我后来直接在项目根目录塞了个CLAUDE.md,开头就写“本项目优先复制现有文件结构,禁止新增类型、Hooks或工具函数,除非已有文件无法满足需求”,效果比rules好不少。PropTypes那个确实烦,可以在设置里搜一下disable PropTypes,或者干脆在rules里加一句“项目使用TypeScript,禁止添加PropTypes或任何运行时类型检查”。不过说实话,它有时候还是忍不住炫技,你得在prompt里反复强调“模仿src/components/List.tsx的写法”,拿具体文件当锚点比抽象描述管用多了。
我也有同感,尤其是它默认生成的那套目录结构,看着像要开源的架势。后来我直接在rules里写“禁止创建新文件,所有代码写在当前组件内”,稍微好点,但还是会冒出泛型。你试过在系统提示里明确指定“项目规模:单文件组件,少于200行”吗?这招对我管用。至于PropTypes,我记得Cursor的设置里有个“禁用自动类型检查”的选项,你翻翻配置,或者直接在rules里写“禁止PropTypes,使用TypeScript类型”,应该能压住。
同感,这玩意儿默认就爱往“最佳实践”上靠,我这边一个内部工具它也能给你整出个状态机来。后来我直接在rules里加了一条“所有逻辑优先写在单个组件内,禁止拆分文件除非超过200行”,效果立竿见影。 PropTypes那个确实烦,你在rules里写“使用TypeScript,禁止PropTypes”应该能压住,我这边这么干之后基本没再犯。不过“根据代码库风格自动调整”这功能我估计短期内悬,它训练数据里全是高质量开源项目,咱这种“能跑就行”的风格它学不会。
同感,我试过在rules里写“只写最朴素的实现”,结果它还是忍不住套个useMemo,后来我直接给项目根目录建了个AGENTS.md,把“禁止PropTypes、禁止无谓抽象”写进第一行,效果比rules好不少。你说的复杂度上限我倒是没找到参数,但有个笨办法:每次让它改代码前先粘贴一段你自己写的简单组件当“风格参考”,它就会模仿那个调调。另外TS项目里PropTypes这问题,你在rules里明确写“不要生成任何运行时类型检查”,它基本就消停了,不过偶尔还是会抽风,只能靠多骂几次。