🚀 在 VS Code 中

Copilot 编辑

使用 Copilot 编辑启动 AI 驱动的代码编辑会话,并通过使用自然语言跨多个文件快速迭代代码更改。Copilot 编辑直接在编辑器中应用编辑,您可以在其中在上下文中查看它们,并具有周围代码的完整上下文。

Copilot 编辑可以在两种模式下运行

  • 编辑模式:选择要编辑的文件,提供相关上下文和提示,Copilot 将建议代码编辑。
  • 代理模式(预览版):让 Copilot 自主规划实现请求所需的任务和相关文件。Copilot 将应用代码编辑并建议终端命令,并将持续迭代以解决出现的任何问题。
重要提示

如果您正在使用笔记本电脑,则 Copilot 编辑支持目前受到限制。我们建议您在 VS Code 中将 Copilot Chat内联 Chat 与笔记本电脑结合使用。

以下视频演示了如何使用 Copilot 编辑扩展基本 Express 应用,例如添加新页面、导航栏和主题切换器。

提示

如果您还没有 Copilot 订阅,则可以通过注册 Copilot 免费计划来免费使用 Copilot,并获得每月的补全和 Chat 交互次数限制。

编辑模式与代理模式(预览版)

Copilot 可以在两种模式下运行:编辑模式代理模式。这些模式迎合了不同的用户偏好和工作流程,从而允许在代码编辑和迭代方式方面具有灵活性。

在编辑模式下,您可以提供您希望 Copilot 处理的相关上下文和文件。Copilot 将根据您的提示建议代码编辑,您可以手动迭代代码更改,方法是提供后续提示。

在代理模式下,Copilot 自主确定相关上下文和文件,确定需要执行的任务,并提供代码更改和终端命令以完成请求。然后,它独立迭代以实现期望的结果,并修复出现的问题。

Copilot 编辑代理模式使用一组 工具,这些工具允许它执行特定任务,例如编辑文件、运行和监视终端命令或验证代码。这些工具可以并行运行以完成请求的任务。

在这两种模式下,您都可以查看生成的编辑,并决定保留还是拒绝它们。

使用编辑模式

在编辑模式下,您可以选择要编辑的文件并提供相关上下文和提示。Copilot 将根据您的提示建议代码编辑。

  1. 打开 Copilot 编辑视图 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。

    • 从 VS Code 标题栏中的 Copilot 菜单中选择打开 Copilot 编辑 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。

    • 或者,选择视图 > 外观 > 辅助侧边栏 (⌥⌘B (Windows、Linux Ctrl+Alt+B)) 以打开辅助侧边栏,然后选择 Copilot 编辑视图。

  2. 从模式下拉列表中选择编辑

    Screenshot showing the Copilot Edits view, highlighting edit mode selected.

  3. 使用添加文件来指示 Copilot 提示的相关上下文。

    您还可以将文件、文件夹或编辑器选项卡拖放到 Copilot 编辑视图中,以将它们添加为上下文。

    Copilot 会自动添加活动编辑器作为上下文。使用 chat.implicitContext.enabled 设置来配置是否应自动添加活动编辑器。

    当您向提示添加一个或多个文件时,Copilot 编辑会根据 Git 历史记录建议其他相关文件。使用 github.copilot.chat.edits.suggestRelatedFilesFromGitHistory 设置来配置此项。

    提示

    通过在提示中添加 #codebase,让 Copilot 自动查找正确的文件。确保启用 github.copilot.chat.codesearch.enabled (预览版) 设置以获得最佳结果。了解有关向 Copilot 提示添加上下文的更多信息。

  4. 输入提示以请求代码编辑。具体和准确地说明您想要的更改,并将较大的任务分解为较小的任务。

    Copilot 编辑在编辑器中流式传输编辑,并在 Copilot 编辑视图中显示已更改文件的列表。

  5. 查看建议的编辑并接受或放弃建议的编辑。

    作为用户,您可以控制对项目所做的更改,并且可以查看生成的编辑

  6. 迭代代码更改。

    如果您对编辑不太满意,可以提出后续问题,例如“不要包含电话号码”或“使用 jest 而不是 vitest”。或者您可以进一步增量编辑代码。例如,在构建 Web 应用时,使用一系列提示,例如“添加导航栏”、“添加主题切换器”、“以 JSON 格式将订单项存储在 MongoDB 中”。

使用代理模式(预览版)

在代理模式下,Copilot 编辑以更自主和动态的方式运行,以实现期望的结果。Copilot 代理模式确定相关上下文,提供代码更改和终端命令,并迭代以纠正问题。为了执行这些任务,代理模式使用一组 工具

重要提示

如果您是 Copilot Business 或 Enterprise 用户,则您组织的管理员必须选择使用 Copilot 编辑器预览功能。了解有关管理组织中 Copilot 策略的更多信息。

要在 Copilot 编辑中使用代理模式

  1. VS Code Insiders 中打开您的项目。

    注意

    代理模式目前为预览版,在 VS Code Insiders 中可用。向 VS Code Stable 的逐步推广正在进行中,一旦为您启用代理模式,您将在 Copilot 编辑视图中看到模式下拉列表。

  2. 打开 Copilot 编辑视图 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))

    • 从 VS Code 标题栏中的 Copilot 菜单中选择打开 Copilot 编辑 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。

    • 或者,选择视图 > 外观 > 辅助侧边栏 (⌥⌘B (Windows、Linux Ctrl+Alt+B)) 以打开辅助侧边栏,然后选择 Copilot 编辑视图。

  3. 从模式下拉列表中选择代理

    Screenshot showing the Copilot Edits view, highlighting agent mode selected.

  4. 输入提示以请求代码编辑。

    您无需指定要处理的文件。在代理模式下,Copilot 编辑自主确定要编辑的相关上下文和文件。

    Screenshot showing the Copilot Edits view, highlighting that Copilot searched the codebase for relevant files.

    Copilot 编辑在编辑器中流式传输编辑,并更新已更改文件的列表。此外,Copilot 还可能建议要运行的终端命令。例如,运行测试或构建应用程序。

  5. 查看建议的代码编辑,并确认 Copilot 是否可以运行建议的终端命令。

    作为用户,您可以控制对项目所做的更改,并且可以查看生成的编辑

    Copilot 在运行终端命令之前请求确认。您可以选择修改响应中建议的终端命令,然后选择继续以运行它。

    如果您的项目在 tasks.json 中配置了任务,则代理模式会尝试运行适当的任务。例如,如果您定义了生成任务,则代理模式将在运行应用程序之前运行生成任务。使用 github.copilot.chat.agent.runTasks 设置启用或禁用运行工作区任务。

  6. Copilot 编辑检测代码编辑和终端命令中的问题和错误,并将迭代并执行其他操作以解决它们。

    例如,代理模式可能会因代码编辑而运行单元测试。如果测试失败,Copilot 会使用测试结果来解决问题。

  7. 继续提出后续问题,并迭代 Copilot 编辑提供的代码更改。

Copilot 编辑代理模式会多次迭代以解决问题和错误。chat.agent.maxRequests 设置控制 Copilot 编辑在代理模式下可以发出的最大请求数。

接受或放弃编辑

Copilot 编辑为您提供代码审查流程,您可以在其中接受或拒绝每个 AI 生成的编辑。如果您拒绝编辑,则修改后的文件将恢复到其先前接受的状态。

Copilot 列出已在已更改文件列表中编辑的文件。具有挂起的 Copilot 编辑的文件在资源管理器视图和编辑器选项卡中也具有指示器。

Screenshot that shows the Copilot Edits view, highlighting the changed files list and the indicator in the Explorer view and editor tabs.

借助编辑器覆盖控件,您可以使用向上 () 和向下 () 控件在建议的编辑之间导航。使用保留撤消按钮接受或拒绝给定文件的编辑。

Screenshot showing the Editor with proposed changes, highlighting the review controls in the editor overlay controls.

要接受或拒绝文件中的特定编辑,请将鼠标悬停在代码编辑上,并使用该编辑的保留撤消控件。

或者,您还可以从 Copilot 编辑视图中的已更改文件列表中接受或拒绝更改

  • 在已更改文件列表中选择保留 (⌘Enter (Windows、Linux Ctrl+Enter)) 或撤消 (⌘Backspace (Windows、Linux Ctrl+Backspace)) 以接受或放弃所有编辑。

  • 在单个文件上选择保留撤消图标以将操作应用于该特定文件

Screenshot showing the Copilot Edits view, highlighting the Accept All and Discard All buttons.

使用 chat.editing.autoAcceptDelay 设置,您可以配置延迟,在此延迟之后,建议的编辑将自动接受。将鼠标悬停在编辑器覆盖控件上以取消自动接受倒计时。

当您关闭 VS Code 时,将记住挂起的编辑的状态。当您重新打开 VS Code 时,将还原挂起的编辑,您仍然可以接受或放弃编辑。

注意

在代理模式下,编辑会自动保存到磁盘,无论是否启用了自动保存 (files.autoSave)。您仍然可以查看编辑,并选择在需要时拒绝它们。

中断代理模式请求

要中断正在进行的请求,您可以暂停它或取消它。当您暂停请求时,Copilot 将停止处理请求并等待您的输入。

当您暂停请求时,您可以选择输入新提示(这将取消当前请求),也可以选择恢复当前请求。

当您取消请求时,Copilot 将中断并结束活动请求。您仍然可以查看并接受或拒绝到目前为止所做的更改。

撤消编辑

当您发送请求以对代码进行编辑时,您可能想要回滚其中一些更改,例如,因为您想要使用另一种实现策略。

您可以使用 Copilot 编辑视图标题栏中的撤消上次编辑控件来还原上次编辑,并返回到发送上次请求之前的状态。在您执行撤消上次编辑操作后,您可以使用 Copilot 编辑视图标题栏中的重做上次编辑控件再次重做这些编辑。

Screenshot showing the Copilot Edits view, highlighting the Undo and Redo actions in the view title bar.

您还可以使用悬停在 Copilot 编辑视图中的请求上时显示的撤消编辑(删除)控件(x 图标)来还原从该请求开始所做的所有编辑。

Screenshot showing the Copilot Edits view, highlighting the Undo Edits control for a specific request.

提示

有时,Copilot 在生成编辑时会开始走错路。一旦发生这种情况,就很难通过添加到对话中来说服它采用另一种方法。在这种情况下,请使用撤消上次编辑,直到您同意 Copilot 的响应为止。然后从那里使用改进的提示重新开始。

向 Copilot 编辑发送聊天请求

Copilot Chat 非常适合提出问题和探索有关您的项目或一般技术主题的想法。与其将 Copilot Chat 中的每个代码块都应用到您的代码中,不如将 Chat 会话转移到 Copilot 编辑。Copilot 编辑针对代码编辑进行了优化,可以同时跨多个文件直接在您的代码中应用代码建议。

在 Chat 视图中,选择 Chat 对话底部的使用 Copilot 编辑按钮,以使用 Copilot 编辑应用建议的代码更改。如果 Chat 会话中有多个 Chat 请求,您可以选择要转移到 Copilot 编辑的请求。

Screenshot highlighting the Edit with Copilot button in the Chat view to move a chat conversation to Copilot Edits.

在将 Chat 请求移动到 Copilot 编辑后,Chat 请求将从 Chat 视图中的 Chat 对话中删除。

代理模式工具

为了完成请求,Copilot 编辑使用一组工具来完成单个任务。将这些工具视为 Copilot 可以用来执行特定任务的专用实用程序。此类任务的示例包括列出目录中的文件、编辑工作区中的文件、运行终端命令、从终端获取输出等。

根据工具的结果,Copilot 可能会调用其他工具来完成总体请求。例如,如果代码编辑导致文件出现语法错误,则 Copilot 可能会探索另一种方法并建议不同的代码更改。

尽管代理模式可以以自主方式运行,但您仍然可以控制生成的编辑和运行的终端命令。

设置

以下列表包含与 Copilot 编辑相关的设置。您可以通过设置编辑器配置设置

  • chat.editing.confirmEditRequestRemoval - 在撤消编辑之前请求确认 (默认值: true)
  • chat.editing.confirmEditRequestRetry - 在执行重做上次编辑之前请求确认 (默认值: true)
  • chat.implicitContext.enabled (预览版) - 配置是否应自动将活动编辑器作为上下文添加到 Chat 提示。
  • chat.editing.autoAcceptDelay - 配置延迟,在此延迟之后,建议的编辑将自动接受,使用零禁用自动接受 (默认值: 0)
  • github.copilot.chat.codesearch.enabled (预览版) - 当您向提示添加 #codebase 时,让 Copilot 查找正确的文件,类似于代理模式的工作方式 (默认值: false)
  • chat.agent.maxRequests - Copilot 编辑在代理模式下可以发出的最大请求数 (Copilot 免费用户默认值: 5,其他用户默认值: 15)
  • github.copilot.chat.edits.suggestRelatedFilesFromGitHistory(实验性) - 在 Copilot 编辑中建议来自 git 历史记录的相关文件 (默认值: false)
  • github.copilot.chat.agent.runTasks - 在 Copilot 编辑中使用代理模式时运行工作区任务 (默认值: true)

键盘快捷方式

以下列表包含与 Copilot 编辑相关的默认键盘快捷方式。您可以使用键盘快捷方式编辑器修改任何默认键盘快捷方式

  • ⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I) - 打开 Copilot 编辑视图
  • ⌥⌘Enter (Windows、Linux Ctrl+Alt+Enter) - 将 Chat 视图中的提示发送到 Copilot 编辑
  • ⌘/ (Windows、Linux Ctrl+/) - 将上下文附加到您的提示
  • - 将所有编辑的文件保存到磁盘
  • ⌘Enter (Windows、Linux Ctrl+Enter) - 接受所有编辑
  • ⌘Backspace (Windows、Linux Ctrl+Backspace) - 放弃所有编辑
  • ⇧⌥F5 (Windows、Linux Shift+Alt+F5) - 导航到文件中的上一个编辑
  • ⌥F5 (Windows、Linux Alt+F5) - 导航到文件中的下一个编辑
提示

如果您想要更改特定于 Copilot 编辑视图的操作的键盘快捷方式,则需要在 when 子句中包含以下条件:chatLocation == 'editing-session'

限制

  • 尚不支持多个同步编辑会话。
  • 在编辑会话中尚不支持使用 @workspace /new 来搭建新项目。目前,请使用 Copilot Chat 进行初始搭建。
  • 虽然 #codebase 非常适合查找与您的查询相关的上下文,但后续生成的编辑质量差异很大。试验 github.copilot.chat.codesearch.enabled (预览版) 设置,以获得改进的代理体验来查找文件,或显式地将文件添加到您的提示以创建更好的结果。
  • 缺少或未测试对 Jupyter Notebook、其他自定义文本格式和二进制文件格式的支持。
  • Copilot 编辑限制为每 10 分钟 7 个编辑请求。

常见问题

Copilot 编辑与 Copilot Chat 有何不同?

Copilot Chat 和 Copilot 编辑都使用对话界面,您可以在其中使用自然语言提示来获取 AI 驱动的建议。Copilot 编辑和 Copilot Chat 之间有几个明显的区别。

Copilot 编辑将您置于代码编辑的上下文中,您可以在其中启动编辑会话并使用提示来更改您的代码库。Copilot 编辑可以直接跨代码库中的多个文件生成和应用代码更改。您可以立即在代码上下文中预览生成的编辑

Chat 视图为您提供更通用的 Chat 界面,用于询问有关您的代码或一般技术主题的问题。Copilot 还可以提供代码建议并生成代码块作为 Chat 对话的一部分。您需要手动应用每个代码块到项目中的不同文件,以评估其有效性。

行内聊天 通过在编辑器中提供聊天界面,让您保持编码流程,您可以在代码上下文中直接预览生成的代码建议。行内聊天的范围仅限于启动它的编辑器,因此它只能为单个文件提供代码建议。您还可以使用行内聊天来询问通用问题。

Copilot 编辑还为您提供代码审查流程,您可以在其中轻松审查生成的编辑内容,并决定接受或放弃它们。Copilot 聊天没有此代码审查机制。此外,您可以撤消过去的编辑,并将更改回滚到之前的接受状态。

下表显示了每种体验的功能比较。

功能 Copilot 编辑 聊天视图 行内聊天 快速聊天
多文件编辑 ✅* ✅*
预览代码编辑
代码审查流程
回滚更改
附加上下文
使用参与者和命令
生成 shell 命令
通用聊天

* 代码块包含在聊天对话中,需要手动应用到正确的文件

我可以更改 Copilot 编辑视图的位置吗?

您可以将 Copilot 编辑视图拖放到活动栏中,以在主侧边栏中显示它。您也可以将其移动到辅助侧边栏。了解更多关于 VS Code 中的 自定义布局 的信息。

为什么我要使用编辑模式而不是代理模式?

考虑以下标准来选择编辑模式和代理模式

  • 编辑范围:如果您的请求仅涉及代码编辑,并且您知道更改的精确范围,则可以使用编辑模式。
  • 预览功能:代理模式仍处于预览阶段,可能不适用于所有场景。
  • 持续时间:代理模式涉及处理请求的多个步骤,因此可能需要更长的时间才能获得响应。例如,确定相关的上下文和要编辑的文件,确定行动计划等等。
  • 非确定性:代理模式评估生成的编辑结果,并可能多次迭代。因此,代理模式可能比编辑模式更具非确定性。
  • 请求配额:在代理模式下,根据任务的复杂性,一个提示可能导致对后端的许多请求。

我可以在笔记本电脑上使用 Copilot 编辑吗?

当您使用笔记本时,Copilot 编辑支持受到限制。例如,代理模式不适用于在 VS Code 中使用笔记本。

我们建议您在 VS Code 中将 Copilot 聊天行内聊天 与笔记本一起使用。