Copilot 编辑(预览)
使用Copilot Edits启动一个由AI驱动的代码编辑会话,您可以通过使用自然语言快速迭代代码更改。根据您的提示,Copilot Edits会在您的工作区中跨多个文件提出代码更改建议。这些更改直接在编辑器中应用,因此您可以在完整的上下文环境中快速查看它们。
Copilot Edits 非常适合在多个文件上进行大规模更改的迭代。它将 Copilot Chat 的对话流程和 Inline Chat 的快速反馈结合在一起,提供了一种全新的体验。您可以在侧边进行持续的多轮聊天对话,同时受益于内联代码建议。
如果您还没有Copilot订阅,您可以通过注册Copilot免费计划免费使用Copilot,并获得每月一定数量的完成和聊天互动限制。
以下视频展示了如何使用Copilot Edits修改一个基本的Express应用程序,添加一个新页面,实现导航栏,并修改设计以包含主题切换器。
Copilot 编辑功能目前处于预览阶段。您可以在我们的问题页面提供反馈和报告问题。
开始使用Copilot编辑
您使用Copilot Edits视图来启动编辑会话。进行代码更改通常是一个迭代过程,并且在您对结果满意之前需要多个步骤。编辑会话由一系列请求(或轮次)组成,用于向Copilot Edits请求进行代码编辑。编辑会话可以持续任意长的时间,并且您可以发送任意数量的请求,以使代码达到您想要的状态。
有几种不同的方法可以开始打开Copilot编辑视图:
-
使用⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I)键盘快捷键
-
在命令中心打开Copilot菜单,然后选择打开Copilot编辑
-
使用视图:切换Copilot编辑或Copilot编辑:聚焦Copilot编辑视图命令在命令面板中(⇧⌘P (Windows, Linux Ctrl+Shift+P))
-
将之前的聊天对话移动到Copilot编辑中,通过在聊天视图中选择使用Copilot编辑
当你首次打开Copilot编辑视图或开始新的编辑会话时,会显示一条欢迎信息。
将文件添加到工作集
开始编辑会话的第一步是添加你想要处理的相关文件。这些文件也被称为编辑会话的工作集。Copilot Edits不会在工作集之外进行更改,除非建议创建新文件。
当前工作集限制为10个文件。
Copilot Edits 自动将活动编辑器添加到工作集中。如果您有多个编辑器组,每个组的活动编辑器都会被添加到工作集中。要添加所有打开的编辑器,请选择添加文件...,然后从文件快速选择中选择打开的编辑器。
您有多种选择可以将文件添加到工作集中:
-
选择添加文件...或使用图标(⌘/ (Windows, Linux Ctrl+/)),然后在快速选择中选择文件。
Tip要从快速选择中快速选择多个项目,请使用 上 和 下 键导航列表,使用 右 键将项目添加上下文,然后对其他项目重复此操作。
-
将编辑器标签、文件或文件夹从资源管理器视图、搜索视图或编辑器面包屑拖放到Copilot编辑视图。
当您将文件夹拖放到Copilot Edits视图时,该文件夹中的所有文件都将添加到工作集中。
-
在资源管理器视图或搜索视图中右键点击一个文件,然后选择将文件添加到Copilot编辑。
-
选择一个建议的文件。当您向工作集中添加一个或多个文件时,Copilot Edits 会根据 Git 历史记录提出其他相关文件。
如果您不想看到这些建议,可以通过github.copilot.chat.edits.suggestRelatedFilesFromGitHistory设置来禁用它们。
为了进一步帮助Copilot Edits提供更好的代码建议,您还可以在提示中添加相关上下文,例如#selection
或#terminalSelection
。通过输入#
符号或使用图标(⌘/ (Windows, Linux Ctrl+/))来引用上下文。
你也可以通过在提示中使用#
作为文件或符号建议的IntelliSense触发器来添加文件或符号引用。如果Copilot决定对你提示中提到的文件进行更改,它们会自动添加到你的工作集中。
请求代码编辑
在添加了相关文件后,使用自然语言输入一个聊天提示,说明你想要进行的特定编辑。例如,“添加一个显示电子邮件、电话和邮政地址的联系页面”,或者“将所有单元测试转换为vitest”。
具体而精确地描述你希望Copilot编辑所做的更改。如果你有一个较大的任务,将其分解为较小的任务,并经常迭代以引导Copilot朝正确的方向前进。
根据您的提示,Copilot Edits 列出了被编辑的文件,并提供了更改的简短描述。此外,建议的编辑将应用于您的代码。随着编辑的流入,Copilot Edits 会为受影响的文件打开编辑器标签。
当Copilot Edits为您的项目生成编辑时,它会直观地显示工作集中哪些文件被编辑。选择工作集中的文件以打开它并在编辑器中查看建议的编辑。
您可以在编辑会话中进一步迭代并发送更多请求。如果您对编辑不完全满意,您可以提出后续问题,例如“不包括电话号码”或“使用jest而不是vitest”。或者您可以逐步进一步编辑您的代码。例如,在构建Web应用程序时,使用一系列提示,如“添加导航栏”,“添加主题切换器”,“将订单项以JSON格式存储在MongoDB中”。
保存生成的编辑
Copilot 编辑会在你的代码中显示生成的编辑内容,但不会自动将更改保存到磁盘(注意编辑器标签中的脏标记)。作为审查编辑的一部分,你可能依赖于由文件更改触发的自动化任务,例如构建或测试任务。你可以保存单个文件或选择保存全部(⌘S(Windows, Linux Ctrl+S))在工作集中将编辑内容保存到磁盘。
当您保存包含AI生成更改的文件时,会显示一个确认对话框。在对话框中,您可以勾选选项以始终保存文件而不需要确认。勾选后,将不再显示“全部保存”控件。您可以通过使用chat.editing.alwaysSaveWithGeneratedChanges设置来重置确认。
保存文件并不意味着您自动接受更改。保存文件后,您仍然可以接受或丢弃生成的编辑。
接受或放弃编辑
Copilot Edits 为您提供了一个代码审查流程,您可以接受或丢弃每个由AI生成的编辑。当您接受AI生成的编辑时,文件更改将在工作集中得到确认。如果您丢弃这些编辑,文件将恢复到之前接受的状态。
您可以使用编辑器覆盖控件在项目的不同编辑之间导航。使用接受和丢弃控件来接受或拒绝给定文件的所有更改。
为了更精细地控制您想要接受或拒绝文件中的哪个编辑,请将鼠标悬停在代码编辑上,并选择撤销控件以拒绝更改。
或者,您也可以接受或放弃工作集中的更改:
-
选择接受(⌘Enter(Windows, Linux Ctrl+Enter))或丢弃(⌘Backspace(Windows, Linux Ctrl+Backspace))在工作集标题栏中接受或丢弃工作集中的所有编辑
-
在工作集中选择接受或丢弃图标,以将操作限制在该特定文件上
撤销编辑
当您发送请求以编辑代码时,您可能希望回滚其中一些更改,例如因为您想使用另一种实现策略。
您可以使用Copilot Edits视图标题栏中的撤销上次编辑控件来撤销上次的编辑并返回到发送上次请求之前的状态。在执行撤销上次编辑后,您可以通过使用Copilot Edits视图标题栏中的重做上次编辑控件再次重做这些编辑。
你也可以在悬停在Copilot编辑视图中的请求上时使用撤销编辑(删除)控件,以恢复从该请求开始所做的所有编辑。
有时Copilot在生成编辑时开始走错路。一旦发生这种情况,通过继续对话很难说服它采用另一种方法。在这种情况下,使用撤销最后一次编辑回到你同意Copilot响应的点。然后从那里重新开始,使用更精确的提示。
向Copilot Edits发送聊天请求
Copilot Chat非常适合询问问题并探索关于您的项目或技术主题的想法和代码建议。一旦您准备好应用建议的代码更改,您可以将聊天会话转移到Copilot Edits。这样做的优势在于,您可以让Copilot Edits在您的项目中应用所有更改,而不必从Chat视图中逐个应用每个代码块。
在聊天视图中,选择聊天对话底部的使用Copilot编辑按钮,以应用Copilot编辑建议的代码更改。如果聊天会话中有多个聊天请求,您可以选择要转移到Copilot编辑的请求。
将聊天请求移动到Copilot Edits后,聊天请求将从聊天视图中的聊天对话中移除。
设置
以下列表包含与Copilot编辑相关的设置。您可以通过设置编辑器(⌘, (Windows, Linux Ctrl+,))配置设置。
- chat.editing.confirmEditRequestRemoval - 在撤销编辑之前请求确认(默认值:
true
) - chat.editing.confirmEditRequestRetry - 在执行最后一次编辑的重做之前请求确认(默认值:
true
) - chat.editing.alwaysSaveWithGeneratedChanges - 自动将 Copilot 编辑生成的更改保存到磁盘(默认值:
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+/) - 将上下文附加到您的提示中
- ⌘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编辑视图的操作的键盘快捷键,你需要在when
子句中包含以下条件:chatLocation == 'editing-session'
。
限制
- 尚不支持多个同时进行的编辑会话。
- 在编辑会话中,尚不支持使用
@workspace /new
来搭建新项目。目前,请使用Copilot Chat进行初始搭建。 - 尽管
#codebase
在查找与您的查询相关的上下文方面表现出色,但后续生成的编辑质量参差不齐。显式地将文件添加到您的工作集中会产生更好的结果。 - 对Jupyter笔记本、其他自定义文本格式和二进制文件格式的支持缺失或未经测试。
- 当前工作集限制为10个文件。
- Copilot 编辑功能每10分钟限制为7次编辑请求。
常见问题
Copilot Edits 与 Copilot Chat 有何不同?
无论是Copilot Chat还是Copilot Edits都使用了对话界面,您可以使用自然语言提示来获取AI驱动的建议。Copilot Edits和Copilot Chat之间存在几个明显的区别。
Copilot Edits 让你进入代码编辑的上下文,你可以启动一个编辑会话并使用提示来对你的代码库进行更改。Copilot Edits 可以直接在你的代码库中的多个文件中生成并应用代码更改。你可以立即在你的代码上下文中预览生成的编辑。
聊天视图为您提供了一个更通用的聊天界面,用于询问有关您的代码或技术主题的问题。Copilot还可以提供代码建议并生成代码块作为聊天对话的一部分。您需要手动应用每个代码块到项目中的不同文件以评估其有效性。
Inline Chat 通过提供编辑器中的聊天界面,让您保持在编码流程中,您可以直接在代码上下文中预览生成的代码建议。Inline Chat 的范围仅限于启动它的编辑器,因此它只能为单个文件提供代码建议。您还可以使用 Inline Chat 来询问一般性问题。
Copilot Edits 还为您提供了一个代码审查流程,您可以轻松审查生成的编辑并决定接受或丢弃它们。Copilot Chat 没有这种代码审查机制。此外,您可以撤销过去的编辑并回滚更改到之前接受的状态。
下表展示了每种体验能力的比较。
Capability | Copilot Edits | Chat view | Inline Chat | Quick Chat |
---|---|---|---|---|
Multi-file edits | ✅ | ✅* | ✅* | |
Preview code edits | ✅ | ✅ | ||
Code review flow | ✅ | |||
Roll back changes | ✅ | |||
Attach context | ✅ | ✅ | ✅ | ✅ |
Use participants & commands | ✅ | ✅ | ||
Generate shell commands | ✅ | ✅ | ||
General-purpose chat | ✅ | ✅ | ✅ |
* 代码块包含在聊天对话中,需要手动应用到正确的文件中
我可以更改Copilot编辑视图的位置吗?
您可以将Copilot编辑视图拖放到活动栏中,以在主侧边栏中显示它。您也可以将其移动到辅助侧边栏。了解更多关于自定义布局在VS Code中的信息。