Skip to content

Cursor 使用体验

你这辈子就是被 Cursor 害了,没办法跟正经 IDE 处事。用 WebStorm 写代码的时候,总是在想,为什么我等了这么久还是没看到补全提示?打开 VSCode 的时候,总是在想,为什么我按了半天的 Composer 就是没有窗口弹出来?GitHub Copilot 邀请你进 Limited Beta 测试名单,它说它推出了个令人兴奋的新功能,你的心砰砰直跳,幻想着它是不是能自动创建文件了。它换了个新 UI 出来,问你要不要做点其他助手做不到的事,你问它是不是支持分析整个代码库了,它沉默了一下说,我说的是模型微调。

Cursor 是最近几个月大热的一个 AI copilot 编辑器,在各种平台上都能看到许多用户或者自媒体在推荐与宣传。出于好奇我在今年九月份体验了一下,之后弄了个一年的pro账号,到现在也用了两个多月。虽然不是全职开发,但是也做了不少一线开发和代码 review,应该也还算有一定发言权。

这篇文章里,我会主要从这两年来我使用 GitHub Copilot 时遇到的问题着手,谈谈我认为 Cursor 相较于 GitHub Copilot 的独特优势,以及我使用 AI编程助手的一些想法。

GitHub Copilot: 如果你是龙,也好

叠甲:因为 Copilot 的功能是在迭代过程中逐步加上来的,我使用的时间比较早,难免会受到初代版本功能不全的负面印象影响。并且我的使用习惯也是早期版本养成的,可能会遗漏一些新版本加入的功能,总的来说就是纯主观感受,只说我用过的功能,如果有我没提到的feature可能是忘了也可能是我没用过。

在使用 Cursor 之前,我使用时间最长的 AI 编程助手其实是 GitHub Copilot:它一发布 beta 注册通道的时候我就开始申请并使用了。

一开始使用的时候确实很惊艳,之后因为我是学生免费送我,Copilot 也确实成为了我日常开发中的一个重要工具,我一直用到了今年听说了 Cursor 为止。三年里我自己的编程绝对水平可能谈不上有多好,但是相对来说比起刚接触 Copilot 时应该还是大有进步的。而我对于 Copilot 的态度也逐渐从一开始的惊艳,变成了后来的毁誉参半,再到后来失望居多。

我对 Copilot 最大的不满是它对代码的上下文理解基本上仅限于当前文件——这就意味着如果 Copilot 要是能真正给出有价值的建议,那说明你的当前文件一定是一个几千行的巨型缝合怪。然而在实际开发中大家都在避免巨无霸文件,能拆分和抽象的部分只要不是项目进度实在吃紧,都会尽量拆分和抽象。这就导致 Copilot 经常找不到可以参考的上下文,随着项目逐渐完善,Copilot 重新造轮子的概率也越来越大。前几天又打开 VSCode 试了一下,发现现在它有了一个 Edit with Copilot 的测试模式,可以手动放入多个文件给 Copilot 参考,但是 Copilot 依然不会分析给定文件外的代码。对于注重代码资产安全的企业来说这可能是优点,但是我基本上写的都是开源代码,拿去看就看了,所以这个功能对我来说缺陷远超过了优点。再者仔细想想要是真正注重资产安全的公司也不会让员工用 Copilot 写代码吧,所以我猜可能 Copilot 之后可能会推出企业本地部署的版本,也可能现在就有了但是我这种土鳖不知道。

第二点是 Copilot 缺失了 diff 功能。在我这几年的使用中,我发现 Copilot 通常只会关注“上文”,而基本不会去关心“下文”如何。比方说我要在已有代码之间插入一个条件判断逻辑,Copilot 会给我把后面不需要改动的函数体也复制粘贴一份,导致我要么 tab 全部接受然后回头删除冗余部分,要么狂按右箭头逐个 token 接受,体验并不是非常好。并且 Copilot 只能添加代码,不会删除过时或者不需要的代码,我还要多出一步判断哪段代码应该删除的思考过程,实际用下来心智负担依然还是比较重。

最后一点是见仁见智的,就是 Copilot 没有主动创建文件的能力。对于我这种经验不是很充足的人来说,可能我给出的代码框架不一定是最优的。Edit with Copilot 限制了代码编辑只能在给定的文件内进行,有可能需要抽象的部分没有抽象得特别具体。反过来限制了代码质量。而对于经验丰富的开发者来说又是另一个问题:他们知道自己需要什么样的代码结构,同时也会遇到更多具有挑战性和创造性的需求。而在这一点上我认识的一些经验比较丰富的开发者都发现现在的 AI 工具不一定能发现代码里的暗坑(甚至有的时候写出的代码自己就有坑),也不一定能完成一些比较有挑战性的需求。所以包括我在内,大部分人还是把编程助手当做一个辅助工具,还不认为它真的能够独立替代一个完整的中高级程序员。

Cursor: 说,我会守护用户体验的荣耀

Cursor 本质上是一个深度集成了 AI 功能的 VSCode,相比于作为插件集成进 VSCode 的 Copilot 来说,在 AI 辅助的用户体验细节上 Cursor 要做得更好。

比方说上面提到的上下文 diff 功能,Cursor 在体验上做得比 Copilot 要完善得多。Cursor 相较于 Copilot 的体验优化主要有两点:

  • diff。在模型生成补全代码后,Cursor 会对生成代码和现有代码进行 diff 比较,计算出生成代码需要插入的位置,精确到字符。这点直接解决了 Copilot 生成结果中需要删除的代码比实际新增的部分多得多的问题。同时基于 diff 的设计也使 Cursor 拥有了判断哪些代码是过时的应该删除的能力。
  • Cursor prediction。Cursor 生成代码之后还可以预测光标位置,按一下 Tab 就可以把光标移动到预测位置,再按一下 Tab 就可以继续接受生成代码。

经过这两点优化之后,针对一些结构比较固定的代码,Cursor 真的可以做到一路无脑 Tab 到底,根本不用碰其他按键。这也是我最喜欢的一个功能。

Cursor 的另一个亮点是基于代码库 RAG 的代码补全,并且以我的使用体验来看,Cursor 的参考资料库权重还针对用户场景做了优化。如果当前编辑器的 Layout 是左右布局的,左右两边各自打开了一个文件,那么 Cursor 会优先从当前激活的两个文件中搜索可用的代码。如果没有找到的话,则会次优先搜索当前打开的其他文件,最后才会在整个代码库中搜索。(题外话,他们向量检索用的是 TurboBuffer,看起来价格好像还行,之后打算试试看)

最后讲一讲 Cursor 自己对于 AI 辅助编程交出的模块性答卷,Cursor Composer 还有 Cursor Chat。Chat 这个功能基本上对标的是 Copilot Chat,不过添加了 Web Search 功能,可以自主搜索网络文档。像比较新的 Radash 这种工具库,你可以直接给出文档链接让 Cursor 自己看,或者让 Cursor 自己搜索相关的用法,这样生成代码的时候就不会被 lodash 的文档污染。代码生成后 Cursor 会自动生成一份和当前代码对比的 diff,用户可以逐个 diff 块选择 Accept 或者 Reject。

Composer 是 Cursor 重点宣传的一个功能,Edit with Copilot 基本上对标的就是 Composer。Composer 与 Chat 相比,开放了自由创建文件和写入代码的能力(Chat 必须手动 Apply),比起 Edit with Copilot 来说更加灵活,编辑和查询的范围不会局限于给定的文件(也会自行搜索整个 codebase),有时候也会自行选择生成指示外的文件来降低耦合度。我使用 Composer 大部分时候不是不会写,而是我先写好一版能跑但是抽象程度或者耦合度比较低的版本,然后让它进行整理和抽象。Composer 通常表现得很好,能把代码的功能和结构描述得比较清楚,偶尔拆分的颗粒度还会比我预想的更加精细一些。而对于赋予了生成模型更高的自由度这一点,可能有人会觉得给生成模型下方太多的编辑权限会污染代码库本来不需要更改的部分,这种情况我确实遇到过一次。当时我选择了 reject 相关代码并让它重新生成,不要碰我不想让它碰的文件名解决了这个问题,本质上也就加了几个字的事情,比跟产品经理对线好说话多了。

于是经过一段时间的使用之后,我发现 Cursor 确实对于 Copilot 当前的痛点提出了自己的解决方案:上下文理解使用了 RAG,还针对用户使用场景进行了权重优化;diff 功能精确到字符,该加的能加,该删的会删,修改完了还能帮你把光标移动到下一个应该修改的位置;这两点让我在修改代码时的体验上升了不少。Cursor Composer 的灵活性确实比 Edit with Copilot 来得高,更像一个有自己想法的助手,而不是一个只会按部就班干活的工具。

AI 辅助编程,是噱头还是刚需

不可否认,大语言模型的出现把编程的门槛降低到了前所未有的程度。只要你愿意充 20 刀乐变强,Claude 和 ChatGPT 就能按照你的需求生成质量还算不错的代码。如果你甚至不知道怎么把这些代码粘贴成一个可以用的文件,只要再充 20 刀乐,Cursor 甚至能贴心地帮你从零开始新建文件和生成代码。

于是一众公众号和营销号开始了狂欢。他们说程序员要失业了,AI 会取代程序员,程序员这个职业要被卷进历史的尘埃。他们说人人都能成为开发者,人人都能写代码。他们说有了 AI,人人都可以是产品经理,人人都可以靠自己的 idea 创业赚钱。他们开始宣传一个从来没有接触过编程的八岁小孩纯靠 Cursor 写出了一个能够完整运行的游戏,他们宣传一个普通人用 AI 创造出了一个价值百万的产品帝国。

然后他们开始卖课,卖 python 课,卖 AI 课,卖产品经理课。

但是从我这么几年写程序还有教其他几个人入门的情况来看,所谓“编程的门槛”——逻辑思考,以及发现、定位并解决问题的能力——并没有降低。AI 写出的程序不可能是百分百准确的,它目前最多是一个经常犯浑的中级程序员的水平。如果用户不知道如何调试程序,不知道怎么阅读和理解错误信息,那么他也大概率不能继续维护一段AI写出的代码;而如果用户不能真正抓住某个需求的真正痛点在哪里,他也大概率不会成为一个产品经理。

这就是 AI 辅助编程最大的局限性:它可以帮助快速验证一个想法,但是它做不到持续迭代一个想法。而第一版的代码永远不可能完美。用户会有新的需求,会遇到新的问题。而如何增加功能,如何解决问题,只能让人自己来想。

Powered by VitePress and Elysium UI
We improve our products and advertising by using Microsoft Clarity to see how you use our website. By using our site, you agree that we and Microsoft can collect and use this data.