Copilot 编辑(预览版)
使用 Copilot 编辑启动由 AI 驱动的代码编辑会话,您可以使用自然语言快速迭代代码更改。根据您的提示,Copilot 编辑会在您的工作区中的多个文件中提出代码更改。这些编辑直接在编辑器中应用,因此您可以在代码的完整上下文中快速就地查看它们。
Copilot 编辑非常适合迭代多个文件中的大型更改。它将 Copilot 聊天的对话流程和内联聊天的快速反馈结合在一个体验中。在侧边进行持续的多轮聊天对话,同时受益于内联代码建议。
您可以通过将 github.copilot.chat.edits.enabled 设置为 true
来启用 Copilot 编辑功能。
以下视频演示了如何使用 Copilot 编辑修改基本 Express 应用程序并添加新页面、实现导航栏以及修改设计以包含主题切换器。
Copilot 编辑功能目前处于预览状态。您可以在 我们的问题 中提供反馈并报告问题。
开始使用 Copilot 编辑
您可以使用 Copilot 编辑视图启动编辑会话。进行代码更改通常是一个迭代过程,并且在您对结果满意之前需要多个步骤。编辑会话包含向 Copilot 编辑发送的用于进行代码编辑的一系列请求(或轮次)。编辑会话可以持续任意时长,并且您可以根据需要发送任意数量的请求,以使代码达到您想要的状态。
有多种方法可以开始打开 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 编辑不会在工作集之外进行更改,除非建议创建新文件。
工作集当前限制为 10 个文件。
Copilot 编辑会自动将活动编辑器添加到工作集中。如果您有多个编辑器组,则每个组的活动编辑器都会添加到工作集中。要添加所有打开的编辑器,请选择添加文件...,然后从文件快速选择中选择打开的编辑器。
您有多种选择可以将文件添加到工作集中
-
选择添加文件... 或使用 图标(⌘/(Windows、Linux Ctrl+/)),然后在快速选择中选择文件。
提示要从快速选择中快速选择多个项目,请使用 向上 和 向下 键导航列表,使用 向右 键将项目添加为上下文,然后对其他项目重复此操作。
-
将编辑器选项卡或文件或文件夹从资源管理器视图、搜索视图或编辑器面包屑拖放到 Copilot 编辑视图上。
当您将文件夹拖放到 Copilot 编辑视图上时,该文件夹中的所有文件都会添加到工作集中。
-
右键单击资源管理器视图或搜索视图中的文件,然后选择将文件添加到 Copilot 编辑。
-
选择建议的文件。当您将一个或多个文件添加到工作集中时,Copilot 编辑会根据 Git 历史记录提出其他相关文件。
如果您不想看到这些建议,可以使用 github.copilot.chat.edits.suggestRelatedFilesFromGitHistory 设置禁用它们。
为了进一步帮助 Copilot 编辑提供更好的代码建议,您还可以将相关上下文添加到您的提示中,例如 #selection
或 #terminalSelection
。通过键入 #
符号或使用 图标(⌘/(Windows、Linux Ctrl+/))引用上下文。
您还可以使用 #
作为文件或符号建议的 IntelliSense 触发器,在提示中添加文件或符号引用。如果 Copilot 决定对您在提示中提到的文件进行更改,则它们会自动添加到您的工作集中。
请求代码编辑
添加相关文件后,使用自然语言输入有关您要进行的特定编辑的聊天提示。例如,“添加一个显示电子邮件、电话和邮政地址的联系页面”,或“将所有单元测试转换为 vitest”。
请具体说明您希望 Copilot 编辑进行的更改。如果您有更大的任务,请将其分解为较小的任务并经常迭代以将 Copilot 指向正确的方向。
为了响应您的提示,Copilot 编辑会列出已编辑的文件,并提供对更改的简短描述。此外,建议的编辑将应用于您的代码。当编辑流式传输时,Copilot 编辑会为受影响的文件打开编辑器选项卡。
当 Copilot 编辑为您的项目生成编辑时,它会以可视方式指示工作集中哪些文件已编辑。在工作集中选择一个文件以将其打开,并在编辑器中查看建议的编辑。
你可以在编辑会话中进一步迭代并发送更多请求。如果你对编辑结果不完全满意,你可以提出后续问题,例如“不要包含电话号码”或“使用 jest 而不是 vitest”。或者,你可以逐步进一步编辑你的代码。例如,在构建 Web 应用程序时,可以使用一系列提示,如“添加导航栏”、“添加主题切换器”、“将订单项以 JSON 格式存储在 MongoDB 中”。
保存生成的编辑
Copilot Edits 会在你的代码中就地显示生成的编辑内容,但不会自动将更改保存到磁盘(注意编辑器选项卡中的脏标记)。在查看编辑内容时,你可能会依赖于文件更改触发的自动化任务,例如构建或测试任务。你可以保存单个文件,也可以选择工作集中的全部保存(⌘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 Edits 视图中的请求上时使用撤消编辑(删除)控件来还原从该请求开始的所有编辑。
有时,Copilot 在生成编辑内容时会开始走错方向。一旦发生这种情况,就很难通过在对话中添加内容来说服它采用另一种方法。在这种情况下,请使用撤消上次编辑来返回到你同意 Copilot 响应的点。然后从那里开始使用改进的提示重新开始。
向 Copilot 编辑发送聊天请求
Copilot Chat 非常适合提出问题并探索关于你的项目或一般技术主题的想法和代码建议。当你准备好应用建议的代码更改时,你可以将聊天会话转移到 Copilot Edits。这样做的好处是,你可以让 Copilot Edits 在你的整个项目中应用所有更改,而无需从“聊天”视图中单独应用每个代码块。
在“聊天”视图中,选择聊天对话底部的使用 Copilot 编辑按钮,以使用 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 Notebook、其他自定义文本格式和二进制文件格式的支持。
- 工作集当前限制为 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 中自定义布局的信息。