现已发布!阅读 10 月份的更新和修复。

Copilot 编辑

使用 Copilot 编辑启动 AI 驱动的代码编辑会话,您可以通过使用自然语言快速迭代代码更改。根据您的提示,Copilot 编辑会建议在工作区中的多个文件中进行代码更改。这些编辑直接应用于编辑器,因此您可以快速在原地查看它们,并了解周围代码的完整上下文。

Copilot 编辑非常适合迭代跨多个文件的大型更改。它将 Copilot 聊天的对话流程和内联聊天的快速反馈结合在一个体验中。在旁边进行持续的多轮聊天对话,同时受益于内联代码建议。

您可以通过将 github.copilot.chat.edits.enabled 设置设置为 true 来启用 Copilot 编辑功能。

以下视频演示了如何使用 Copilot 编辑修改基本的 Express 应用程序,并添加新页面、实现导航栏以及修改设计以包含主题切换器。

注意

Copilot 编辑功能目前处于预览阶段。您可以在 我们的问题 中提供反馈和报告问题。

使用 Copilot 编辑

添加新功能、修复错误或重构现有代码通常是一个增量过程。使用 Copilot 编辑,您可以启动一个编辑会话,在该会话中您可以拉取多个相关文件,并通过发送聊天提示来迭代代码更改。

有不同的方法可以启动编辑会话

  • 使用 ⇧⌘I (Windows Ctrl+Shift+I,Linux Ctrl+Shift+Alt+I) 键盘快捷键

  • 在命令中心打开 Copilot 菜单,然后选择 **打开 Copilot 编辑**

    Screenshot showing the Copilot menu in the Command Center, highlighting the Open Edit Session item

  • 在命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 中使用 **视图:切换 Copilot 编辑** 或 **Copilot 编辑:专注于 Copilot 编辑视图** 命令

当您第一次打开 Copilot 编辑视图或启动新的编辑会话时,会显示欢迎消息。Copilot 编辑视图有一个输入字段用于输入您的提示,以及您要处理的文件列表(工作集)。

Screenshot showing the Copilot Edits view and welcome message.

将文件添加到工作集

启动编辑会话时的第一步是添加您要使用的相关文件。这些文件也被称为编辑会话的工作集。Copilot 编辑不会在工作集之外进行更改,除非建议创建新文件。

重要

工作集目前限制为 10 个文件。

Screenshot of Copilot Edits, showing the working set contains 3 files, including the currently opened file.

Copilot 编辑会自动将打开的编辑器添加到工作集。如果您有多个 编辑器组,则每个组的打开编辑器都会被添加到工作集。要添加所有打开的编辑器,请选择 **添加文件...**,然后从文件快速选择中选择 **打开的编辑器**。

您可以通过选择 **添加文件...** 按钮或 图标 (⌘/ (Windows、Linux Ctrl+/)),然后在快速选择中选择文件来将文件添加到工作集。

提示

要快速从快速选择中选择多个项目,请使用 向上向下 键导航列表,使用 向右 键添加项目作为上下文,然后对其他项目重复此操作。

Screenshot showing the Copilot Edits view and the file search Quick Pick, highlighting the buttons to add context.

您还可以通过将文件或编辑器选项卡拖放到 Copilot 编辑视图来将文件添加到工作集。

为了帮助 Copilot 编辑提供更好的代码建议,您可以在提示中添加相关上下文,例如 #selection#terminalSelection。通过键入 # 符号或使用附加上下文控件 (⌘/ (Windows、Linux Ctrl+/)) 来引用上下文。

您还可以通过在提示中使用 # 作为文件建议的 IntelliSense 触发器来添加文件引用。如果 Copilot 决定更改提示中提到的文件,它们会自动添加到您的工作集。

请求代码编辑

添加完相关文件后,使用自然语言输入聊天提示,说明您要进行的具体编辑。例如,“添加一个显示电子邮件、电话和邮政地址的联系页面”,或“将所有单元测试转换为 vitest”。

提示

请详细说明您希望 Copilot 编辑进行的更改。如果您有更大的任务,请将其分解成更小的任务,并经常迭代以引导 Copilot 朝正确的方向发展。

响应您的提示,Copilot 编辑会确定工作集中的哪些文件需要更改,并添加对更改的简短描述。请注意,Copilot 编辑会为受影响的文件打开编辑器选项卡,其中编辑开始流入。更改以内联方式显示在代码中,显示之前和之后的情况。使用 **查看更改** 控件以多文件差异视图查看所有编辑。

Screen capture showing the edits from Copilot Edits stream into the open editor.

当 Copilot 编辑为您的项目生成编辑时,它会以视觉方式指示工作集中的哪些文件被编辑。在工作集中选择一个文件以将其打开并在编辑器中查看建议的编辑。

Screenshot showing the Copilot Edits response for "Add a feedback field in the contact page" and showing the diff in the editor.

Copilot 编辑在您的代码中以内联方式显示生成的编辑,但不会自动将更改保存到磁盘(请注意编辑器选项卡中的脏标记)。在查看编辑时,您可能依赖于由文件更改触发的自动化任务,例如构建或测试任务。您可以保存单个文件,也可以选择工作集中的 **全部保存** (⌘S (Windows、Linux Ctrl+S)) 来将编辑保存到磁盘。

Screenshot showing the Copilot Edits view, highlighting the Save All button.

当您保存包含 AI 生成的更改的文件时,会显示一个确认对话框。在对话框中,您可以选中始终保存文件而不询问确认的选项。选中后,将不再显示全部保存控件。您可以使用 chat.editing.alwaysSaveWithGeneratedChanges 设置重置确认。

注意

保存文件并不意味着您自动接受更改。保存文件后,您仍然可以选择接受或放弃生成的编辑。

您可以在编辑会话中继续迭代并发送更多请求。如果您对编辑不完全满意,可以提出后续问题,例如“不要包含电话号码”或“使用 jest 而不是 vitest”。或者,您可以进一步逐步编辑代码。例如,在构建 Web 应用程序时,使用一系列提示,例如“添加导航栏”、“添加主题切换器”、“将订单项以 JSON 格式存储在 MongoDB 中”。

接受或放弃编辑

Copilot Edits 会在您的代码中就地显示生成的编辑,并为您提供代码审查流程,您可以在其中接受或放弃每个 AI 生成的编辑。当您接受 AI 生成的编辑时,文件更改将在工作集中确认并保存到磁盘。如果您放弃编辑,则文件将恢复到之前接受的状态。

要接受或放弃 Copilot Edits 生成的编辑

  • 在工作集标题栏中选择**接受**(⌘Enter(Windows,Linux Ctrl+Enter))或**放弃**(⌘Backspace(Windows,Linux Ctrl+Backspace)),以接受或放弃工作集中的所有编辑

  • 选择工作集中单个文件上的**接受**或**放弃**图标,将操作限制到该特定文件

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

在查看文件的编辑时,可以使用向上(⇧⌥F5(Windows,Linux Shift+Alt+F5))和向下(⌥F5(Windows,Linux Alt+F5))控件快速导航到文件中的上一个或下一个编辑。然后,您可以使用**接受聊天编辑**和**拒绝聊天编辑**控件对文件中的单个编辑进行操作。

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

在向代码发送编辑请求时,您可能希望回滚其中一些更改,例如因为您想要使用其他实现策略。

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

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

您也可以在将鼠标悬停在 Copilot Edits 视图中的请求上时使用**撤消编辑(删除)**控件,以恢复从该请求开始的所有编辑。

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

提示

有时,Copilot 在生成编辑时会走错路。发生这种情况后,很难通过添加对话来让它接受另一种方法。在这种情况下,使用**撤消上一步编辑**,直到您同意 Copilot 的响应。然后从那里重新开始,并提供更精确的提示。

向 Copilot 编辑发送聊天请求

Copilot Chat 非常适合询问有关项目或一般技术主题的问题,以及探索想法和代码建议。当您准备过渡到 Copilot Edits 并应用代码更改时,将聊天对话中的附加上下文转移到 Copilot Edits 可能很有用。

在聊天视图中,您可以输入聊天提示并将其直接发送到 Copilot Edits,同时保留附加的上下文。选择**发送**按钮选项菜单,然后选择**发送到 Copilot Edits**选项(或按⌥⌘Enter(Windows,Linux Ctrl+Alt+Enter)))。

Screenshot of the Chat view, showing the send button options menu and the option to send the prompt to Copilot Edits.

请注意,Copilot Edits 视图将打开,并且您的提示和附加上下文将从聊天视图转移到 Copilot Edits 视图并立即提交。

设置

以下列表包含与 Copilot Edits 相关的设置。您可以通过设置编辑器(⌘,(Windows,Linux Ctrl+,))配置设置。

  • github.copilot.chat.edits.enabled - 启用或禁用 Copilot Edits
  • chat.editing.confirmEditRequestRemoval - 在撤消编辑之前询问确认(默认值:true
  • chat.editing.confirmEditRequestRetry - 在执行上一步编辑的重做操作之前询问确认(默认值:true
  • chat.editing.alwaysSaveWithGeneratedChanges - 自动将 Copilot Edits 生成的更改保存到磁盘(默认值:false

键盘快捷键

以下列表包含与 Copilot Edits 相关的默认键盘快捷键。您可以使用键盘快捷键编辑器(⌘K ⌘S(Windows,Linux Ctrl+K Ctrl+S))修改任何默认键盘快捷键。

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

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

限制

  • 目前尚不支持多个同时编辑会话。
  • 目前尚不支持在编辑会话中使用@workspace /new来搭建新项目。目前,请使用 Copilot Chat 进行初始搭建。
  • 虽然#codebase非常适合查找与您的查询相关的上下文,但后续生成的编辑质量差异很大。明确将文件添加到工作集中会生成更好的结果。
  • 尚不支持对 Jupyter 笔记本、其他自定义文本格式和二进制文件格式的支持,或者这些格式未经测试。
  • 工作集目前限制为 10 个文件。
  • Copilot Edits 每 10 分钟限制为 7 个编辑请求。

常见问题解答

Copilot Edits 与 Copilot Chat 有什么区别?

两者Copilot Chat和 Copilot Edits 都使用对话界面,您可以在其中使用自然语言提示来获取 AI 支持的建议。Copilot Edits 和 Copilot Chat 之间存在一些明显的区别。

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

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

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

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

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

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

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

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

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