Cursor 用了一整年,我学到的 7 条血泪教训
从 2023 年底到 2024 年中,把整个团队的开发流程都迁移到 Cursor,踩过的坑足够写一本书。
# Cursor 用了一整年,我学到的 7 条血泪教训
写完这个标题的时候我已经在键盘上犹豫了很久——"血泪教训"是不是太夸张了?但说实话,从 2023 年底开始用 Cursor,到 2024 年中把整个团队的开发流程都迁移过去,这一年里踩过的坑足够写一本书。
先说个背景:我是个写 Python 和 Go 的老程序员,之前用 VS Code 快十年了,JetBrains 的插件也写了一堆。Cursor 在我眼里一开始就是个"会聊天的高级 Autocomplete",结果越用越发现事情没那么简单。
1. Tab 补全不是万能的,有时候它会让你更慢
我第一次被 Tab 补全坑的时候,是在一个 Go 项目里写接口处理器。光标放在函数签名后面,按 Tab,IDE 给了我一个看起来完美的签名——类型完全正确,参数顺序也对。然后我点 Commit,CI 直接报错:interface 不匹配。
为什么?因为 Go 的 interface 匹配是隐式的,我补全的函数签名参数类型是 http.Handler,但实际需要的接口有个 ServeHTTP(http.ResponseWriter, *http.Request) 方法。Tab 补全看不到接口定义,它只看类型名。
教训:Tab 补全在写标准库、写熟悉的项目时很快,但一旦涉及你不太熟悉的类型系统或者复杂接口,先让 IDE 生成代码,再仔细审查一遍。别被它流畅的补全体验骗了。
2. Composer 模式让你写出"看起来很对"但跑不起来的代码
Cursor 的 Composer 模式(多文件编辑)是我用过最危险的 AI 功能。它能在多个文件里同时修改代码,看起来效率极高。但问题在于,它会修改它认为相关的文件,而它"认为"相关的标准很宽松。
有一次我在修一个 React 组件的状态管理 bug,让 Composer 帮我修改了三个文件。改完后编译通过,但运行时状态每次刷新都重置。原因:Composer 把状态初始化逻辑挪到了一个 useEffect 里,导致每次重新渲染都会重新初始化。
教训:用 Composer 之前,先看清楚它计划改哪些文件、改什么。不要盲点 Commit。
3. 自定义指令模板要用,但要少而精
Cursor 的设置里有个 Custom Instructions 功能,你可以在这里告诉 AI 你的编码偏好。我一开始写了个 200 字的指令,涵盖了风格、命名规范、错误处理方式。结果发现效果很差——指令太长,AI 处理不过来,而且每次请求都带上这么长一段,token 消耗爆炸。
后来我精简到三条:
2. "错误处理优先返回 error,不要 panic"
3. "写单元测试时优先用 table-driven tests"
效果立竿见影。记住:指令是约束,不是说明书。
4. Code Review 模式比 Auto-pilot 更实用
很多人说 Cursor 的 Auto-pilot 模式(连续生成)很酷,但我觉得 Code Review 模式才是真正能提升代码质量的功能。它会分析你改动的代码,然后给出改进建议。
我常用的 workflow 是:写完功能 → 用 Code Review 模式检查 → 根据建议修改 → 再检查一遍。这样下来,代码质量比我自己 Review 还要高。
5. 别把 Cursor 当成搜索引擎
我有一个朋友,遇到任何 API 问题都会问 Cursor。有一次他问 "Go 的 goroutine 泄漏怎么排查",Cursor 给了一堆听起来很专业但实际上是幻觉的建议。真正解决他问题的是一位在 Stack Overflow 上搜到的答案。
Cursor 擅长的是帮你写代码、解释代码、重构代码,但它对最新技术动态的了解是滞后的。遇到真正新的问题,还是去官方文档和 GitHub Issues 找答案。
6. 项目上下文很重要
Cursor 会根据你打开的文件和项目结构来理解上下文。一开始我以为是"你打开了哪些文件它就能看到",结果发现它还能自动扫描整个项目的类型定义、import 路径等。
但有个坑:如果你的项目有多个模块,Cursor 可能会混淆。比如我有个项目同时包含 Go 后端和 TypeScript 前端,有时候它在写后端代码时会引入前端的类型定义。解决办法是:在项目根目录放一个 .cursorignore 文件,把不相关的目录排除掉。
7. 它不是你的替身,是你的助手
这句话听起来像鸡汤,但它是真的。我见过很多人(包括早期的我)把 Cursor 当成"帮我写全部代码"的工具,结果写出来的代码质量参差不齐,调试起来比不用 AI 还麻烦。
最好的用法是:让你自己成为那个"定义问题和验收结果"的人,让 AI 成为执行具体实现的人。你要知道自己在写什么,这样你才能判断 AI 写的是否正确。
结语
Cursor 是个好工具,但它不会让一个烂程序员变成好程序员。它放大了你的优点,也放大了你的缺点。用得好,效率翻倍;用得不好,就是在制造技术债。
我的建议:先从一个功能模块开始用起,熟悉它的脾气,再逐步扩大使用范围。别急着把所有代码都丢给 AI。