Windsurf 与 Cursor 的初步想法
在一些随机的无聊导致某件事发生的时候,由一个同样随机的 YouTube 短片触发,该短片介绍了热门的新基于 AI 的 IDE(Cursor),我决定是时候从我的 VS Code + Copilot 设置升级,并体验一下围绕这些新时代 VS Code 分支的炒作,这些分支承诺通过无缝的 AI 集成提供更好的开发人员体验。
Afsheen之前曾简短地谈过如何使用Cursor,但我什么都不记得了,所以我联系了她,想了解一下这款 IDE 的第一手使用体验。这次讨论让我顺便看了看 YouTube 视频(毕竟谁不喜欢看别人用工具呢?),然后我偶然发现了另一个工具(Windsurf),几个陌生人都说它比 Cursor 好用。我感到很困惑:我应该试试 Cursor 还是 Windsurf?(剧透预警:我决定两个都试试)。
我想象(并希望)这是我使用 Windsurf 和 Cursor 的一系列比较体验。
我的第一个技巧是,我需要在一个看起来很老旧的代码库中添加一些前端功能,这个代码库包含一些我近年来见过的最复杂的 React 代码。由于我最近才被调到这个团队,对这个代码库还很陌生,总共接触了大约一周的时间。我之所以这么说,是想说明一下,如果你问我在哪里进行修改,我需要花几分钟找到具体的文件,然后再花一些时间来解读编写代码的开发人员的内心独白和逻辑。
本来计划是用 Windsurf 完成任务,但那天是周五晚上,瓢泼大雨打乱了出门计划,所以我决定用 Cursor 重复一遍,然后对比一下。以下是我目前找到的。
风帆冲浪感觉更快
在两门课程中,由于 Claude 3.5 Sonnet 是 LLM 课程的主要学习对象,Windsurf 在生成回复和完成任务方面都感觉更快。在 Windsurf 中,全局聊天(Cmd + L,Windsurf 称之为Cascade)的响应非常快,但在 Cursor 中则明显存在延迟。
并不是说需要速度(正确性更重要),但如果最终的答案和建议更加严谨和正确,那么缓慢的速度是可以容忍的,但正如在这个特定的冒险中所证明的那样,Cursor 的建议与 Windsurf 的建议不相上下,从来没有更好,有时甚至更糟。
Windsurf 的“写入”模式胜过 Cursor + 在较小的框架中验证代码建议很难!
Cursor 很礼貌——当收到明确的指令(在主聊天窗口中)时,例如“在这里,修改我的文件”,Cursor 仍然只会在其聊天侧边栏中提供建议(当然,为了方便起见,您可以展开它),然后您可以通过点击每个代码块顶部的小“应用”选项来验证并提交。另一方面,Windsurf 则很大胆:在聊天窗口中使用“写入”模式,它会继续为您做出决定,无论是在操作发生位置附近的目录中创建新文件,还是修改现有文件。(注:我听说 Cursor 的专业版也有类似的行为,但我尚未验证。)
这种大胆的设计让代码库的引入体验更加快捷。而且也更加便捷,因为在狭小的侧边栏中验证大段代码往好了说是痛苦的,往坏了说几乎是不可能的。通过将更改写入文件,Windsurf 允许您直接在主窗口中验证/检查代码建议,从而带来更佳的体验。
在 Cursor 中添加文件上下文更加容易
在 Cursor 中添加文件上下文相对容易。想指示它使用整个代码库?@codebase
这招很管用。想在编辑器中合并两个打开的文件?它只会@files
显示最近打开的文件(同时还允许您包含其他未打开的文件)。这个简单的操作在 Windsurf 中很难实现(或者说我还没找到方法)。[文档] 建议 Windsurf 的上下文默认包含打开的文件,而且它本身就拥有整个代码库的上下文,这或许解释了为什么 Windsurf 能够比 Cursor 更好地找到正确的文件。但 Cursor 在聊天窗口中明确添加上下文,让 AI 在提出解决方案之前对被要求查看的内容更有信心。
风帆冲浪通常是正确的
我实现该功能最早的步骤之一就是确定在哪里进行编辑。我让 Windsurf 和 Cursor 告诉我在哪里进行更改。Windsurf 第一次尝试就找到了文件;Cursor 需要额外的提示和关键词才能找到正确的文件。
在后续步骤中,我要求 IDE 为我编写一个包含日期时间选择器的表单。Windsurf 即使是第一次尝试,也使用了项目现有的自定义日期时间选择器组件。Cursor 即使尝试了多次,也未能成功。起初,它使用了一个原生组件。当我要求它在代码库中查找并使用该组件时,Cursor 认为我必须从代码库中安装一个自定义日期选择器组件npm
并使用它。最终,经过几次尝试,我决定将文件指向该组件,只有这样,Cursor 才能找到我正在寻找的正确代码。
风帆冲浪“主动出击”,全力以赴
我被要求添加的功能,我把它外包给了AI,是一个简单的小菜单项,它会调用GraphQL的变更。现在,我给IDE的指令根本没有提到变更。相反,我只是说了类似“嘿,我需要添加一个执行这个操作的菜单项。”之类的话,然后让IDE逐步迭代。
Cursor 确实设法在模型中添加了菜单项、模式和表单(这是日期选择器恶作剧发生的地方),但它无法为这一事件提供一个合适的结局,因为它无法弄清楚如何将菜单项与(即使是错误的) GraphQL 调用联系起来。
另一方面,Windsurf 似乎记住了该功能的主要目标,并提出了一个几乎正确的实现,最后也使用了 GraphQL 调用。自从我开始使用 Windsurf 以来,当我用完它时,感觉它的功能几乎已经完善了。
这是因为 token 大小不同还是其他原因?我还不清楚。
—
目前看来,Windsurf 似乎占据了主导地位。它的用户体验绝对比 Cursor 更好。我感觉用它效率更高。在接下来的几天里,我希望这两个 IDE 都能涵盖更多开发需求,以便更好地了解它们的工作原理以及各自在哪些方面更胜一筹。
文章来源:https://dev.to/druchan/windsurf-vs-cursor-initial-thoughts-40b6