🚀 在 VS Code 中

Copilot 编辑

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

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

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

代理模式目前为预览版,仅在 VS Code Insiders 中可用。在 Copilot 存储库 中提供反馈并报告问题。

重要

如果您正在使用笔记本,则 Copilot 编辑支持当前受到限制。我们建议您在 VS Code 中将 Copilot 聊天内联聊天 与笔记本一起使用。

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

提示

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

启动 Copilot 编辑会话

您可以通过 Copilot 编辑视图访问 Copilot 编辑,您可以在其中输入自然语言提示以获取编辑建议。默认情况下,Copilot 编辑视图在辅助侧边栏中可用。

Screenshot showing the Copilot Edits view and welcome message.

要访问 Copilot 编辑视图

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

  • 打开 VS Code 标题栏中的 Copilot 菜单,然后选择打开 Copilot 编辑

    Screenshot showing the Copilot menu in VS Code title bar, highlighting the Open Edit Session item.

  • 使用命令面板中的视图:切换 Copilot 编辑Copilot 编辑:聚焦于 Copilot 编辑视图 命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))

由于进行代码更改可能是一个迭代过程,因此 Copilot 编辑中的编辑会话可以包含一系列请求(或轮次)。您可以根据需要发送任意数量的请求,以使代码达到您想要的状态。

使用编辑模式

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

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

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

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

  3. 使用添加文件将文件添加到工作集

    工作集指示工作区中可以由 Copilot 编辑编辑的文件。

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

    Copilot 编辑在编辑器中流式传输编辑。在工作集中,由 Copilot 编辑的文件以粗体标记。

    提示

    通过在提示中添加 #codebase,让 Copilot 自动查找正确的文件。确保启用 github.copilot.chat.edits.codesearch.enabled (预览版) 设置以获得最佳结果。

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

  6. 迭代代码更改

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

使用代理模式(预览版)

在代理模式下,Copilot 编辑以更自主和动态的方式运行,以实现期望的结果。为了处理请求,Copilot 循环执行以下步骤并根据需要多次迭代

  • 自主确定要编辑的相关上下文和文件。
  • 提供代码更改和终端命令以完成任务。例如,Copilot 可能会编译代码、安装包、运行测试等等。
  • 监视代码编辑和终端命令输出的正确性,并迭代以纠正问题。

Copilot 编辑代理模式使用一组 工具 来完成这些任务。这些工具可以并行运行以完成请求的任务。

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

  1. 通过将 chat.agent.enabled 设置设置为 true 来启用代理模式。

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

  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 是否可以运行建议的终端命令

    作为用户,您可以控制对项目所做的更改,并且可以 查看生成的编辑,并需要确认要运行的终端命令。

    Screenshot showing the Copilot Edits view, highlighting the terminal command that Copilot wants to run.

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

    Screenshot showing the Copilot Edits view, highlighting that Copilot verified the code edits for errors.

    注意

    chat.agent.maxRequests 设置控制 Copilot 编辑在代理模式下可以发出的最大请求数。

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

注意

Copilot 编辑的代理模式目前仅在 VS Code Insiders 中可用。

管理工作集

工作集是您希望 Copilot 编辑在编辑会话中处理的文件集。Copilot 编辑不会在工作集之外进行更改,除非建议创建新文件。当您使用代理模式时,Copilot 会自主确定要编辑的文件并将它们添加到工作集中。

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

重要

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

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

您有许多选项可以将文件添加到工作集

  • 选择添加文件...或使用附加 图标 (⌘/ (Windows, Linux Ctrl+/)),然后在“快速选择”中选择文件。

    提示

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

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

  • 通过在提示中添加 #codebase,让 Copilot 自动查找正确的文件。

    确保启用 github.copilot.chat.edits.codesearch.enabled (预览版) 设置以获得最佳结果。

  • 将编辑器选项卡或资源管理器视图、搜索视图或编辑器面包屑中的文件或文件夹拖放到 Copilot 编辑视图上。

    当您将文件夹拖放到 Copilot 编辑视图上时,该文件夹中的所有文件都会添加到工作集中。

  • 右键单击资源管理器视图或搜索视图中的文件,然后选择将文件添加到 Copilot 编辑

  • 选择建议的文件。当您向工作集添加一个或多个文件时,Copilot 编辑会根据 Git 历史记录建议其他相关文件。

    如果您不想看到这些建议,可以使用 github.copilot.chat.edits.suggestRelatedFilesFromGitHistory 设置禁用它们。

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

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

接受或放弃编辑

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

使用编辑器叠加控件,您可以使用 控件在建议的编辑之间导航。使用接受放弃按钮来接受或拒绝给定文件的编辑。

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

要接受或放弃文件中的特定编辑,请将鼠标悬停在代码编辑上,然后使用该编辑的接受放弃控件。

或者,您也可以从 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 编辑视图标题栏中的重做上次编辑控件再次重做这些编辑。

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

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

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

提示

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

向 Copilot 编辑发送聊天请求

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

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

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

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

代理模式工具

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

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

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

设置

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

  • chat.editing.confirmEditRequestRemoval - 在撤消编辑之前请求确认(默认值:true
  • chat.editing.confirmEditRequestRetry - 在执行重做上次编辑之前请求确认(默认值:true
  • chat.editing.alwaysSaveWithGeneratedChanges - 自动将 Copilot 编辑生成的更改保存到磁盘(默认值:false
  • chat.agent.enabled - 在 Copilot 编辑中启用或禁用代理模式(默认值:false
  • chat.editing.autoAcceptDelay - 配置延迟,在此延迟之后,建议的编辑将自动接受,使用零禁用自动接受(默认值:0)
  • github.copilot.chat.edits.codesearch.enabled (预览版) - 通过在提示中添加 #codebase,让 Copilot 查找正确的文件,类似于代理模式的工作方式(默认值:false
  • chat.agent.maxRequests - Copilot 编辑在代理模式下可以发出的最大请求数(Copilot 免费用户默认为 5,其他用户默认为 15)

键盘快捷方式

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

  • ⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I) - 打开 Copilot 编辑视图
  • ⌥⌘Enter (Windows, Linux Ctrl+Alt+Enter) - 将聊天视图中的提示发送到 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 聊天进行初始搭建。
  • 虽然 #codebase 非常擅长查找与您的查询相关的上下文,但后续生成的编辑质量参差不齐。尝试使用 github.copilot.chat.edits.codesearch.enabled (预览版) 设置,以获得改进的、代理式的体验来查找文件,或者显式将文件添加到您的工作集以创建更好的结果。
  • 尚无或未经测试对 Jupyter 笔记本、其他自定义文本格式和二进制文件格式的支持。
  • 工作集当前限制为 10 个文件。
  • Copilot 编辑限制为每 10 分钟 7 个编辑请求。

常见问题解答

Copilot 编辑与 Copilot 聊天有何不同?

Copilot 聊天和 Copilot 编辑都使用对话式界面,您可以在其中使用自然语言提示来获得 AI 驱动的建议。Copilot 编辑和 Copilot 聊天之间存在几个明显的差异。

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

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

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

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

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

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

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

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

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

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

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

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

我可以在笔记本中使用 Copilot 编辑吗?

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

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