🚀 在 VS Code 中

在 VS Code 中使用编辑模式

借助 Visual Studio Code 中的聊天编辑模式,您可以使用自然语言在项目中的多个文件中进行编辑。编辑直接在编辑器中应用,您可以在编辑器中查看它们,并具有周围代码的完整上下文。

通过选择特定文件并提供清晰的上下文,您可以引导编辑模式进行有针对性的代码更改和改进。

提示

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

使用编辑模式

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

  1. 通过从 VS Code 标题栏的 Copilot 菜单中选择 打开聊天 来打开聊天视图,或者使用 ⌃⌘I(Windows、Linux Ctrl+Alt+I 键盘快捷键。

  2. 从聊天视图中的聊天模式下拉列表中选择 提问

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

  3. 选择 添加上下文 以提供指示您提示的相关上下文。

    为了确保 Copilot 具有您想要进行的更改的正确上下文,请向您的提示添加上下文,例如工作区中的文件或文件夹。了解更多关于 向 Copilot 提示添加上下文 的信息。

    活动编辑器会自动添加为上下文。当您添加文件时,可能会建议其他相关文件。

    提示

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

  4. 在聊天输入字段中输入您的提示,以指示您想要进行的编辑类型。

    尝试以下一些示例问题以开始使用

    • 重构 calculate 函数,使其更高效。
    • 向应用添加登录表单。使用 OAuth 进行身份验证。
    • 为 calculator 类添加单元测试。使用 vitest 作为测试框架。
  5. 请注意,Copilot 将建议的编辑直接流式传输到编辑器中。

    聊天视图以粗体文本显示已编辑文件的列表。编辑器叠加控件使您可以在建议的编辑之间导航。

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

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

  7. 继续迭代代码更改以改进编辑或实现其他功能。

接受或放弃编辑

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.

使用编辑器或聊天视图中的 保留撤消 控件来接受或拒绝单个或所有建议的编辑。

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

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

当您关闭 VS Code 时,待处理编辑的状态会被记住。当您重新打开 VS Code 时,待处理的编辑将恢复,您仍然可以接受或放弃编辑。

还原编辑

当您发送请求以对代码进行编辑时,您可能想要回滚其中一些更改,例如,因为您想要使用另一种实现策略,或者因为 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.

设置

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

  • chat.editing.confirmEditRequestRemoval - 在撤消编辑之前请求确认(默认值:true)。
  • chat.editing.confirmEditRequestRetry - 在执行重做上次编辑之前请求确认(默认值:true)。
  • chat.editing.autoAcceptDelay - 配置一个延迟,在此延迟之后,建议的编辑将自动接受,使用零禁用自动接受(默认值:0)。
  • github.copilot.chat.codesearch.enabled (预览) - 当您在提示中添加 #codebase 时,让 Copilot 查找正确的文件,类似于代理模式的工作方式(默认值:false)。
  • chat.implicitContext.enabled (实验性) - 配置是否应将活动编辑器自动添加为聊天提示的上下文。
  • github.copilot.chat.edits.suggestRelatedFilesFromGitHistory (实验性) - 在 Copilot 编辑中建议来自 git 历史记录的相关文件(默认值:false)。

键盘快捷键

以下列表包含与 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.codesearch.enabled (预览) 设置以获得改进的代理体验来查找文件,或者显式地将文件添加到您的提示以创建更好的结果。
  • 尚不支持或未测试对自定义文本格式和二进制文件格式的支持。

常见问题

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

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

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

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

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