阅读(98) 书签 (0)

Copilot Edits

2024-11-28 18:41 更新

Copilot 编辑 (Copilot Edits)

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

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

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

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

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


使用 Copilot 进行编辑

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

启动编辑会话有多种方法:

  • 使用 Ctrl+Shift+I 键盘快捷键
  • 打开命令中心的 Copilot 菜单,然后选择“打开 Copilot 编辑”Screenshot showing the Copilot menu in the Command Center, highlighting the Open Edit Session item
  • 在命令面板 (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 编辑会自动将打开的编辑器添加到工作集中。如果您有多个编辑器组,则每个组的打开编辑器都会添加到工作集中。要添加所有打开的编辑器,请选择“添加文件...”,然后从“文件”快速选择中选择“打开的编辑器”。

您可以通过选择“添加文件...”按钮或图标 (Ctrl+/),然后在快速选择中选择文件来向工作集添加文件。

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

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

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

为了帮助 Copilot 编辑提供更好的代码建议,您可以向提示添加相关的上下文,例如 #selection 或 #terminalSelection。通过键入 # 符号或使用“附加上下文”控件 (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 编辑会在代码中就地显示生成的编辑,但不会自动将更改保存到磁盘(请注意编辑器选项卡中的脏指示器)。作为查看编辑的一部分,您可能依赖于由文件更改触发的自动化任务,例如构建或测试任务。您可以保存各个文件,或选择工作集中的“全部保存”(Ctrl+S) 以将编辑保存到磁盘。

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

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

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

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


接受或放弃编辑

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

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

  • 选择工作集标题栏中的“接受”(Ctrl+Enter) 或“放弃”(Ctrl+Backspace) 以接受或放弃工作集中的所有编辑
  • 选择工作集中单个文件上的“接受”或“放弃”图标以将操作限制为该特定文件

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

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

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

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

您可以使用 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 Edits 发送聊天请求

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

在聊天视图中,您可以输入聊天提示并将其直接发送到 Copilot 编辑,同时保留附加的上下文。选择“发送”按钮选项菜单,然后选择“发送到 Copilot 编辑”选项(或按 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 编辑视图会打开,并且您的提示和附加的上下文会从聊天视图转移过来并立即提交。


设置

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

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

快捷键

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

  • Ctrl+Shift+I - 打开 Copilot 编辑视图
  • Ctrl+Alt+Enter - 将提示从聊天视图发送到 Copilot 编辑
  • Ctrl+/ - 向提示附加上下文
  • Ctrl+S - 将所有编辑的文件保存到磁盘
  • Ctrl+Enter - 接受所有编辑
  • Ctrl+Backspace - 放弃所有编辑
  • Shift+Alt+F5 - 导航到文件中的上一个编辑
  • Alt+F5 - 导航到文件中的下一个编辑
提示:
如果您想更改特定于 Copilot 编辑视图的操作的快捷键,则需要在 when 子句中包含以下条件:chatLocation == 'editing-session'

限制

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

常见问题

Copilot Edits 与 Copilot Chat 有何不同?

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

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

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

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

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

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

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

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

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

您可以将 Copilot 编辑视图拖放到活动栏中,以将其显示在主侧边栏中。您也可以将其移动到辅助侧边栏。