GitHub Copilot vs Cursor vs Windsurf:哪个更适合你?
今年AI与代码编辑器结合的赛道竞争异常激烈,各家产品迭代迅速。本文并非简单介绍如何“用几小时通过 AI 编辑器实现一个 App”,而是从开发者的实际日常工作体验出发,对比主流的AI代码编辑器产品,帮助大家找到最适合自己的工具。
本文更新于2024年12月14日,所使用的产品版本如下:
- GitHub Copilot 1.2.0 + Visual Studio Code 1.93.1
- Cursor 0.43.6
- Windsurf 1.0.0
请根据自身实际情况参考本文。我们开始吧。🤟
### 模型对比
#### GitHub Copilot
GitHub Copilot 默认使用 GPT-4o 模型,目前在后台提供了 Preview 功能,开启后可支持 Claude 3.5 和 Sonnet 模型。
我尝试在我的账户中打开Claude 3.5 Sonnet模型,但未能在GitHub Copilot界面找到任何模型切换的选项。
我不确定是否是因为我当前处于试用期内的缘故所致。
### 可用模型列表
除了默认使用的模型外,还有一些可供选择:
- **o1-mini**
- **o1-preview**
#### 默认配置
Cursor 应用默认采用 Claude 3.5 Sonnet 模型。
#### 其他可用选项
您可以使用以下模型提供商的几乎所有模型:
- **openAI**
- **Anthropic**
#### 注意事项
如果您希望通过 API key 使用其他模型,请注意,某些功能(例如 Cursor 中的 Composer 功能)仅支持特定的模型(如 Claude 3.5 Sonnet)。
### Windsurf
Windsurf 默认使用 Claude 3.5 Sonnet 模型。
此外,还有一些其他模型可供选择:
- GPT-4o
- Cascade-base
其中,Cascade-base 是为 Windsurf 独家定制的模型。它基于 Llama 3.1 70B 模型进行微调,并且所有用户都可以免费使用该模型。
### 总结
目前来看,Cursor 可选模型最多,在主流编程辅助模型中,Claude 3.5 Sonnet 在编程领域表现最佳。因此,在选择 AI 编程助手时,可以优先考虑支持 Claude 3.5 Sonnet 模型的产品。
Tab键已经成为程序员最佳的编程伙伴。它不仅取代了Ctrl+C和Ctrl+V的操作,更实现了自动补全功能。
自动补全是AI编辑器的基础且最为常用的特性之一。例如,在GitHub Copilot中,编写一个摄氏温度转换器变得非常便捷。
我在编写函数名称时,发现 Copilot 能自动补全整个函数体。然而,在这里我发现一个错误:我把 `const` 错写成了其他形式,并且将单词 “convert” 错拼为 “conver”。遗憾的是,Copilot 并没有纠正我的错误,而是继续完成了函数体的补全。
Cursor
Cursor的自动补全功能确实很流畅。当我不小心写错 `const` 关键字时,Cursor 能够迅速检测并纠正错误,同时帮我完整地补全函数体。
—— windsurf
Windsurfing 的体验有点像使用 GitHub Copilot。
### HTML列表
- **GitHub Copilot**
- 提供智能代码补全
- 帮助提高编程效率
- 减少编码错误
我创建了一个 HTML 列表,并希望AI能够帮我补充剩余的类名和文本内容。然而,CoPilot并没有提供任何建议或帮助。
观察后发现,在这种光标位于同一行的情况以及跨行的情况下,CoPilot似乎无法给出相应的提示。
光标的定位确实影响了CoPilot的功能表现。
cursor 直接猜到了我想要的内容,并补全了剩余的代码。真是酷炫!
windsurf 的体验与 GitHub Copilot 类似,不再赘述。
总的来说,自动补全是 AI 编辑器的基础功能之一,也是最常用的功能。从体验上看,Cursor 显然更胜一筹。
在对话能力方面,这三家工具相差不大。你可以通过侧边栏唤起 chat 功能,与 AI 进行交流。
另外,也可以使用快捷键,在代码中直接唤起 chat 功能。
甚至可以在终端通过快捷键唤起行内 chat 功能。
GitHub Copilot
Copilot 提供了非常丰富的交互体验。例如:
- 使用 `/` 快捷键,你可以快速执行诸如 `/fix`, `/explain` 等指令。
- 通过 `@` 快捷键,你可以直接查询与 GitHub 和 VS Code 相关的具体领域内容。
这种设计极大提高了开发效率和代码质量。
**插件市场**
Copilot 拥有自己的插件市场,支持安装各类第三方插件。例如,你可以添加 Docker 和 StackOverflow 等实用工具来增强功能。
**Cursor 交互体验**
Cursor 提供了丰富的交互体验。其中,使用 @doc 可以插入具体文档作为光标上下文,对于那些不常用的库可以提供额外的帮助;而利用 @web 则可以让光标访问互联网,获取最新信息。
**Windsurf 简洁体验**
相比之下,windsurf 的界面设计极为简洁,并无特别亮点。这里不再赘述。
**总结对比**
三家工具的对话能力主要取决于其背后的模型。不过在交互体验方面各有特色。值得一提的是,Copilot 对话内容较为受限,只能回答编程相关的问题;而 Cursor 和 Windsurf 则非常乐于解答各类问题,例如做饭时询问西红柿炒鸡蛋的做法等。
### Composer简介
Composer最初由Cursor团队推出。这一功能允许用户通过自然语言指令来引导AI进行多文件修改,甚至是整个项目的创建和优化。
### 实验演示
接下来的实验基于GitHub上的一个实际项目。我使用自然语言指挥AI对该项目中的代码进行了修改。
### 新加功能
新添加的功能允许用户通过点击 Tab 栏切换不同的登录方式。目前支持邮箱和密码登录,现在又增加了账号密码登录选项。
---
### GitHub Copilot 的体验
GitHub Copilot 初始阶段不清楚具体的代码编写位置,在项目中错误地创建了一个名为 `pages` 的文件夹,并开始在此处写代码。
我纠正了它的方向后,手动为其提供了正确的修改路径 `src/app`。尽管如此,它仍在尝试将新代码放在 `pages` 文件夹内。
---
### Cursor 的表现
Cursor 在最初的阶段也遇到了同样的问题,在项目中创建了一个 `pages` 文件夹并开始编写代码。
在指正之后,我为它手动添加了正确的文件路径 `src/app`。这次,Cursor 能够正确地理解我的指导,并且成功将新代码写入指定位置。
此外,我发现 Cursor 在新生成的代码中引用了 antd 组件库,于是我告知其应直接使用 tailwindcss 来编写样式。
随后,Cursor 根据指示调整了样式的应用方式。最终,它成功地生成了一个完整的项目,其中包括登录和注册功能,并且在界面设计、交互体验以及简单的表单验证方面都达到了我的要求。
### Windsurf
Windsurf 主要的功能是其强大的代理功能。我们将在下一节详细介绍这一部分。
---
### 总结
在 Composer 能力方面,Cursor 明显优于 GitHub Copilot。
---
### 代理功能 (Agent)
代理功能是 Windsurf 的核心亮点,可以说是 Composer 功能的增强版。与代理进行对话时,可以明显感受到它的行为模式更接近人类:它会逐步思考,并且如果遇到错误,则会尝试纠正直到完成任务。
---
Windsurf 推出代理功能后,Cursor 也迅速跟进推出了自己的代理功能。这里我们将对比 Windsurf 和 Cursor 的代理能力。
---
以下是我要求 Windsurf 和 Cursor 分别生成的一个计算器项目示例:
由于这两款工具目前都支持上传图片作为参考,所以我也上传了一张 macOS 上的计算器应用截图进行参考。
Windsurf 发出指令后,我使用 `npx create-next-app` 命令创建了一个 Next.js 项目。点击接受之后,继续进行开发工作。在创建过程中,遇到了是否启用 Turbopack 的选项,但 Windsurf 没有给出明确选择,直接跳过了这一步。
过了一会儿,Windsurf 写完了代码,并请求我运行该项目。然而由于之前没有正确设置 Turbopack 选项,项目未能成功建立,在尝试执行时出现错误。
于是我们决定删除之前的代码,重新开始生成新的 Next.js 应用。这一次,通过使用 `npx create-next-app@latest . --tailwind --typescript --eslint --app --src-dir --use-npm --no-turbo --yes` 命令确保了项目能够顺利创建。
之后,Windsurf 再次完成了代码编写,并请求我执行新的应用。然而这次的结果显示样式代码未被正确引入。于是我提醒 Windsurf 需要将样式文件导入到项目中。经过修改后,最终的代码运行成功,效果非常不错。
这段经历让我们一起克服了创建过程中遇到的技术难题,并通过调整和优化,实现了满意的开发成果。
Cursor 接收到指令后,开始使用 `npx create-next-app` 命令创建一个 Next.js 项目。点击“运行命令”之后,它遇到了一个问题:在创建过程中出现了一个是否要使用 Turbopack 的选项。由于 Cursor 对此无能为力,便没有继续处理这个问题,而是直接开始了编写代码。
过了一会儿,Cursor 完成了代码的编写,并请求我运行这段代码。当我点击“运行命令”时,程序报错了,原因是上一步未能成功创建 Next.js 项目。于是 Cursor 请求删除现有的代码并重新生成项目。再次执行 `npx create-next-app` 命令时,尽管这一次与之前的尝试有所不同,Cursor 依旧卡在了是否使用 Turbopack 的选项上。
无奈之下,我手动运行了命令:
```shell
npx create-next-app@latest . --tailwind --typescript --eslint --app --src-dir --use-npm --no-turbo --yes
```
这成功创建了一个 Next.js 项目。Cursor 继续编写代码,并请求再次进行编译。
然而,第一次生成的样式看起来有些奇怪,于是我将截图发给了 Cursor,请它再做一次调整。尽管最终的效果还有一些瑕疵,但整体功能还算正常。
### 总结
在功能方面, windsurf 明显比 cursor 更智能一些。在这次对比中, windsurf 表现更优秀。
### 自定义规则
- **GitHub Copilot**: 可以通过 `.github/copilot-instructions.md` 文件来设定自定义规则。
- **Cursor**: 使用 `.cursorrules` 文件设置自定义规则。
- **Windsurf**: 使用 `.windsurfrules` 文件进行规则配置。
### 语言偏好
这里的“语言”特指自然语言。作为一名中文母语的开发者, 我更倾向于与 AI 进行中文交流。
- **Cursor** 支持最好的中文交互体验。
- **GitHub Copilot** 虽然可以设定优先使用中文,但实际操作中仍会频繁用英文回复。
- **Windsurf** 在处理部分问题时也会选择英文回应,这在一定程度上影响了用户体验。
### 价格比较
由于大模型的高昂成本, 这三款工具均采取付费订阅模式:
- **GitHub Copilot**: 最低定价为每月10美元,提供一个月免费试用期。
- **Cursor**: 起始价为20美元/月,并且有两周免费体验时间。
- **Windsurf**: 价格从最初的每月10美元调整至目前的15美元/月,但前期注册用户仍可享受原价优惠。
### 总结
从性价比来看, GitHub Copilot 最具吸引力。对于那些更在意成本效益比的开发者来说,GitHub Copilot 是一个不错的选择。然而,在我个人体验中,Cursor 展现出更强的功能与用户体验,其次是 Windsurf,最后是 GitHub Copilot。