编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider

news/2025/2/4 17:12:10/

系列文章:

编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客

编程AI深度实战:自己的AI,必会LangChain-CSDN博客

编程AI深度实战:给vim装上AI-CSDN博客

编程AI深度实战:火的编程AI,都在用语法树(AST)-CSDN博客

编程AI深度实战:让verilog不再是 AI 的小众语言-CSDN博客

我从 2022 年初到 2024 年年中使用 GitHub Copilot,并在 2024 年初切换到 Cursor。在此过程中,我已经测试了 Sourcegraph CodySupermaven。目前,我只将 Cursor 用于我的所有开发工作,由 Claude 3.5 Sonnet (New) 提供支持。我还计划将 Aider Chat 整合到我的工作流程中,并在 Zed Editor 支持 Windows 后密切关注它。

GitHub Copilot 时代

GitHub Copilot 通过其 AI 驱动的自动完成彻底改变了编码。尽管批评者认为它“只是一个花哨的自动完成”,但正是这种简单性使它变得强大。神奇之处不仅在于节省了几次击键 - 还在于消除了编码和文档/StackOverflow 搜索之间不断的上下文切换。

Copilot 擅长:

  • 在光标位置准确建议您需要的内容

  • 自然地理解代码上下文

  • 回应简单的评论,例如 with accurate implementations// do xyz

  • 在编码时保持流程,不中断

当 GitHub 后来添加聊天和其他集成等功能时,他们感觉自己已经被固定住了。我安装了它们,但发现自己被 ChatGPT 和 Claude 等专用聊天服务所吸引。

Enter Cursor:游戏规则改变者

Cursor 作为一个全面的解决方案出现,它改变了我处理 AI 辅助编码的方式。它的杀手锏?Ctrl+K 命令。这个简单的快捷方式支持强大的代码修改:

  1. 选择代码(通常是整个文件)

  2. 按 Ctrl+K

  3. 描述您要更改的内容

  4. 在优雅的差异视图中查看更改,其中添加的内容为绿色,删除内容为红色

  5. 单击即可接受或拒绝

虽然 Cursor 最初将“Copilot++”作为其自动完成解决方案,但我发现它令人困惑 - 它会同时建议不同文件位置的多个更改。我坚持在 Cursor 中使用 GitHub Copilot(这是可能的,因为 Cursor 本质上是一个 VSCode 分支)。

自动完成功能的演变

自动完成环境已经发生了重大变化:

  • Supermaven 成为 GitHub Copilot 的卓越替代品

  • Cursor 的新“Tab”功能已经明显成熟,取代了他们早期的 Copilot++

  • 我现在已经删除了 GitHub Copilot 和 Supermaven,仅使用 Cursor 的 Tab 功能

其他著名球员

来源图 Cody

Cody 提供与 Cursor 类似的功能,但作为 VSCode 插件。虽然功能齐全,但它在两个关键方面存在不足:

  • 与 Cursor 的 Ctrl+K 相比,代码修改的可靠性较低

  • 由于 VSCode 插件限制,差异可视化受限

Zed 编辑器

由 Atom 和 Tree-sitter 背后的团队创建,Zed 凭借其内置的 AI 功能看起来很有前途。但是,它目前对 Windows 用户不可用。

当前设置和未来方向

我目前的设置是简化的:

  • 所有内容的光标:

  • 自动完成的 Tab 键功能

  • Ctrl+K 用于代码修改

  • 聊天功能(尽管我仍然更喜欢 Claude Web 界面进行复杂的讨论)

  • Claude 3.5 Sonnet (New) 作为我的首选模型

展望未来:Cursor Composer 和 Aider

有两个工具对未来特别有趣:

Cursor Composer 显示出希望,但需要改进:

  • 一次性更改多个文件

  • 目前感觉有些混乱

  • 需要提高运营透明度

Aider Chat 是一个令人兴奋的 CLI 替代方案:

  • 成熟且开源

  • 基于命令行

  • 需要更深入的心智模型,但提供强大的功能

  • 非常适合喜欢基于终端的工作流程的用户

深入探究

光标

标签

Cursor 的 Tab 功能是他们的代码自动完成解决方案,取代了他们早期的 Copilot++ 实现。与 GitHub Copilot 的仅插入方法不同,Tab 可以修改光标位置周围的代码,包括编辑现有行。它的工作范围为光标上方一行到光标下方两行。

您可以通过以下方式与 Tab 建议交互:

  • 按 Tab 键接受

  • 使用 Esc 拒绝

  • 按 Ctrl/⌘ → 逐字接受

  • 只需继续键入即可忽略建议

系统会监视您的击键和光标移动以提出上下文建议,但有时它会确定不需要任何建议。这有助于防止编辑过程中出现杂色。

Ctrl + K 组合键

Ctrl+K(在 macOS 上为 Cmd+K)有两个主要用途:

  1. 未选择文本时生成新代码

  2. 选择文本时修改现有代码

该命令将打开一个提示栏,您可以在其中描述要执行的作。生成后,您可以使用后续说明优化您的请求。更改显示在差异视图中,清楚地显示添加和删除。

默认情况下,Cursor 会尝试包含相关上下文,如相关文件和最近的视图,您可以使用对特定文件或代码部分的 @ 引用来补充这些上下文。

聊天

聊天界面位于主边栏对面的 AI 窗格中(使用 Ctrl/⌘ + L 切换)。每个聊天都会保留其上下文和历史记录,您可以通过以前的聊天 (Ctrl/⌘ + Alt/Option + L) 重新访问。

聊天的上下文系统通过多种机制工作:

  • 默认包含当前文件(可以禁用)

  • @ 文件、文件夹、代码片段的符号引用

  • 代码库搜索(Ctrl/⌘ + Enter 或 @codebase)

  • Web 搜索 (@web)

  • 文档参考资料 (@docs)

  • Git 信息(提交/差异/PR 的@git)

聊天响应中生成的代码可以通过 “Apply” 按钮直接应用于您的文件,更改以 diff 格式显示。

终端 Ctrl+K

在 Cursor 的终端中,Ctrl+K 提供自然语言到 shell 命令的转换。它会考虑您最近的终端历史记录和命令上下文。可以使用 Esc 接受命令,也可以使用 Ctrl/⌘ + Enter 立即执行命令。

艾德

核心工作流程

Aider 作为命令行工具运行,可在您的终端中创建 AI 对编程环境。首先将其指向特定文件:.这些文件成为 “chat session” 的一部分,允许 AI 查看和编辑它们。aider <file1> <file2> ...

Aider 的一个关键原则是只添加需要编辑的文件 - 它通过其存储库映射系统自动从存储库中的相关文件中提取上下文。这样可以保持上下文的集中性和效率。

命令和控制

Aider 使用 / 命令系统进行作:

  • /add:将文件添加到聊天会话

  • /drop:删除文件以释放上下文

  • /diff:显示自上次消息以来的更改

  • /run:执行 shell 命令并可选择将输出添加到聊天

  • /undo:还原上次 AI 制作的 git 提交

  • /commit:提交外部编辑

  • /ask:提出问题而不进行更改

  • /architect:在进行更改之前讨论高级设计

该工具支持 Emacs 和 Vim 键绑定(使用 --vim 标志激活),并允许通过多种方法进行多行输入:

  • 直接粘贴

  • 使用 { 和 } 作为分隔符

  • 新行的 Meta-ENTER

  • /paste用于剪贴板内容的命令

Git 集成

Git 集成是 Aider 工作流程的核心。AI 所做的每项更改都会自动提交,并显示一条描述性消息。这创建了 AI 辅助更改的清晰历史记录,并在需要时可以轻松还原修改。该命令专门用于回滚上次的 AI 提交。/undo

模型支持和聊天模式

Aider 与 GPT-4 和 Claude 3.5 Sonnet 配合得最好,但几乎可以连接到任何 LLM。它为不同的任务提供了不同的聊天模式:

  • code:直接修改代码

  • architect:在进行更改之前提出解决方案

  • ask:无需更改代码的问题和分析

  • help:工具使用指南

架构师模式特别有趣,因为它使用两个 LLM 调用 - 一个用于设计解决方案,另一个用于实现它,尽管速度较慢,但通常会产生更好的结果。

光标 vs Aider

这些工具之间的主要区别不在于它们的能力——两者都可以在 AI 的帮助下有效地修改代码——而是它们的方法和工作流程。

工作流

Cursor 直接集成到您的 IDE 中。它的功能始终可以通过键盘快捷键使用,AI 辅助感觉就像是标准 IDE 功能的扩展。这使得它特别适合以下开发人员:

  • 首选 GUI 环境

  • 希望将 AI 帮助无缝集成到他们的编辑器中

  • 键入时需要实时建议

  • 在 IDE 界面中频繁处理多个文件

Aider 采取了不同的方法,将 AI 协助视为一个重点终端会话。这更适合以下开发人员:

  • 首选命令行界面

  • 喜欢在专注的会议中工作,而不是持续的帮助

  • 感谢每个 AI 更改的自动 git 提交

上下文管理

这两种工具处理代码库上下文的方式不同:

  • Cursor 通过其索引系统维护持久上下文,并通过其 @ 符号系统提供多种引用代码的方法

  • Aider 专注于显式文件添加和存储库映射,具有更直接但可能更精确的上下文模型

用例优化

  • Cursor 擅长在正常开发工作中进行快速编辑和实时帮助

  • Aider 在专注的结对编程课程中大放异彩,在这些课程中,你正在解决特定问题或实施计划的更改

GitHub 副驾驶

自动完成

Copilot 的核心功能是其自动完成系统。键入时,它会以重影文本的形式显示建议,这些建议可以通过 Tab 键接受、按 Esc 拒绝或继续键入来忽略。您可以使用 Alt+[ 和 Alt-](或 Mac 上的 Option+[ 和 Option-])循环显示替代建议。

这些建议来自分析当前文件、打开的编辑器和项目上下文。特别有效的是使用 comments 来获取特定的实现。编写 or 通常会为您提供与项目模式匹配的合理验证或解析代码。// validate email// parse json response

如果要一次查看多个建议,请在建议出现时按 Ctrl+Enter 以打开包含多个选项的新选项卡。要进行更精细的控制,您可以使用 Ctrl/Cmd+→ 逐字接受建议,这在建议中只有一部分与您想要的内容匹配时非常有用。

在实践中,自动完成最适合增量编码 - 添加新函数、实现接口或编写标准模式(如数据验证)。它特别擅长匹配代码库中的现有模式,这有助于保持一致性,但也可以传播现有的反模式(如果存在)。

聊天界面

在 VS Code 中,可以通过多种方式访问聊天功能:

  • 按 Ctrl+Shift+I 打开专用聊天侧边栏

  • 按 Ctrl+I 直接在编辑器中进行内联聊天

  • 按 Shift+Ctrl+I 打开快速聊天下拉列表

要使用聊天命令:

  1. 在编辑器中选择一些代码

  2. 按 Ctrl+I 打开内联聊天

  3. 键入 / 可查看可用命令,如 /explain、/tests 或 /fix

  4. 按 Enter 键执行命令

或者,您可以右键单击所选代码,然后从上下文菜单中选择 Copilot > Explain 或 Copilot > Generate Tests。

聊天以多种方式理解上下文。它会自动看到您当前文件的内容,并可以理解选定的代码。对于较大的更改或有关多个文件的问题,您需要通过选择或打开相关文件来显式共享上下文。

与 Cursor 的聊天感觉更对话不同,Copilot 的聊天更注重任务。它最适合特定请求,例如解释代码、提出改进建议或生成测试,而不是关于体系结构或设计的开放式讨论。

GitHub 功能

Copilot 以多种方式与 GitHub 的 Web 界面集成:

对于拉取请求:

  1. 导航到拉取请求

  2. 单击页面右下角的 Copilot 图标

  3. 在打开的聊天面板中,您可以询问更改或获取摘要

  4. 对于特定的文件更改,请单击 Files Changed 选项卡,然后使用任何已更改文件旁边的 Copilot 图标

对于问题:

  1. 在 GitHub 上打开问题

  2. 单击右下角的 Copilot 图标

  3. 询问有关问题的问题或请求修复建议

对于探索代码库:

  1. 导航到任何存储库文件

  2. 单击文件视图右上角的 Copilot 图标

  3. 键入诸如 “explain this file” 或 “what does this function do” 之类的问题

  4. 对于特定代码部分,请先选择行,然后单击出现的 Copilot 图标

在探索不熟悉的代码或尝试了解复杂的更改时,这些集成效果最佳。PR 摘要对于快速代码审查上下文特别有用,尽管您仍然需要仔细查看实际更改。

CLI 集成

CLI 通过 GitHub 的命令行工具工作。首先,您需要:

  1. 安装 GitHub CLI

  2. 安装 Copilot 扩展gh extension install github/gh-copilot

然后,您可以使用:

  • gh copilot suggest "your request"- 获取命令建议

  • gh copilot explain "command"- 获取命令的解释

例如:

 
 

gh copilot suggest "find large files in current directory" gh copilot explain "docker ps -a"

当 Copilot 建议命令时,您可以:

  • 按 Enter 键直接执行

  • 按 Tab 键可在执行前对其进行修改

  • 按 Esc 键将其复制到剪贴板而不执行

CLI 集成对于您不经常使用的复杂 shell 命令特别有用,例如特定的 git作或系统管理任务。

IDE 支持

Copilot 通过插件跨多个 IDE 工作。在 VS Code 中,所有内容都可以通过键盘快捷键或命令面板 (Ctrl+Shift+P) 进行访问。JetBrains 实现使用其标准快捷方式:

  • Ctrl+Shift+Space 用于基本完成

  • Alt+\ 用于下一个建议

  • Ctrl+Shift+I 用于聊天

Visual Studio 使用 Alt+/ 进行内联聊天,并维护与 VS Code 类似的 UI,但使用 Microsoft 的标准键盘映射。

Neovim 集成需要在 init.vim/init.lua 中进行配置,并提供基本命令,如 :Copilot enable 和 :Copilot disable,以及您可以自定义的映射。

Copilot vs Cursor vs Aider

以增量方式编写代码时,Copilot 的自动完成功能比 Cursor 的 Tab 功能更具可预测性。它建议遵循项目模式的代码,并且很少试图过于聪明。Cursor 的建议可能更激进,有时当您只想完成当前行时,会尝试修改多行。

对于更大的更改,Copilot 无法满足这两种选择。虽然您可以使用聊天来请求更改,但没有等同于 Cursor 的 Ctrl+K 命令。您最终会复制聊天的建议并手动应用它,而 Cursor 会向您显示清晰的差异,并让您一键应用更改。Aider 通过自动 git 提交更进一步,尽管它需要切换到终端。

上下文处理因工具而异。Copilot 可以处理您打开的任何文件 - 没有明确的方法可以告诉它“将此文件用于上下文,但不要修改它”。Cursor 的 @ 引用为您提供了更多控制权,让您明确指向相关文件或函数。Aider 将文件显式添加到会话的方法是最直接的,但需要更多的设置。

选择通常取决于您的特定需求:

  • 如果您主要希望在键入和跨不同 IDE 工作时完成代码,Copilot 会以非常可预测的方式执行此作。

  • 如果您经常进行较大的更改并希望保留在 GUI 编辑器中,则 Cursor 的 Ctrl+K 工作流程效率更高。虽然 Cursor 的 Tab 可能更激进,但它也可能更有用。这更多的是品味问题。最棒的是您可以简单地尝试一下。Cursor 是一个 VSCode 分支,您可以安装扩展,例如 GitHub Copilot。

  • 如果你想要显式的 git 集成并且不介意使用终端,Aider 可以提供更好的更改控制。这是一种不同的做事模式,但可以非常高效。

每个工具都会将您推向不同的工作流程。Copilot 鼓励以增量方式编写具有大量小补全的代码。当您规划较大的更改并使用 Ctrl+K 实现这些更改时,光标效果会更好。Aider 最适合您明确需要 AI 帮助的重点编程会话。

Cursor 的一个缺点似乎是,道听途说,它对所有查询都使用了大量的上下文,因此会消耗大量精力,而且,如果不使用本地模型,最终会赚钱(比如说像 ChatGPT 这样流行的 OpenAI 模型)。


http://www.ppmy.cn/news/1569283.html

相关文章

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

Android Studio:视图绑定的岁月变迁(2/100)

一、博文导读 本文是基于Android Studio真实项目&#xff0c;通过解析源码了解真实应用场景&#xff0c;写文的视角和读者是同步的&#xff0c;想到看到写到&#xff0c;没有上帝视角。 前期回顾&#xff0c;本文是第二期。 private Unbinder mUnbinder; 只是声明了一个 接口…

笔试-业务逻辑4

应用 小明在玩一个数字加减游戏&#xff0c;输入4个正整数&#xff1a;s、t、a、b&#xff0c;其中s>1&#xff0c;b<105&#xff0c;a!b。只使用加法或者减法&#xff0c;使得st。 每回合&#xff0c;小明用当前的数字&#xff0c;加上或减去一个数字&#xff1b;目前有…

亚博microros小车-原生ubuntu支持系列:18 Cartographer建图

Cartographer简介 Cartographer是Google开源的一个ROS系统支持的2D和3D SLAM&#xff08;simultaneous localization and mapping&#xff09;库。基于图优化&#xff08;多线程后端优化、cere构建的problem优化&#xff09;的方法建图算法。可以结合来自多个传感器&#xff0…

《 C++ 点滴漫谈: 二十五 》空指针,隐秘而危险的杀手:程序崩溃的真凶就在你眼前!

摘要 本博客全面解析了 C 中指针与空值的相关知识&#xff0c;从基础概念到现代 C 的改进展开&#xff0c;涵盖了空指针的定义、表示方式、使用场景以及常见注意事项。同时&#xff0c;深入探讨了 nullptr 的引入及智能指针在提升代码安全性和简化内存管理方面的优势。通过实际…

STM32标准库移植RT-Thread nano

STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接&#xff1a;STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码&#xff08;最好带有点灯和串口&#xff09;RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生&#xff0c;正在学习阶段&a…

刷题记录 贪心算法-4:53. 最大子数组和

题目&#xff1a;53. 最大子数组和 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()&qu…

XML DOM - 访问节点

通过 DOM&#xff0c;您能够访问 XML 文档中的每个节点。 尝试一下 - 实例 下面的实例使用 XML 文件 books.xml。 函数 loadXMLDoc()&#xff0c;位于外部 JavaScript 中&#xff0c;用于加载 XML 文件。 使用节点列表中的索引号来访问节点 本例使用 getElementsByTagname() …