Copilot 编辑
使用 Copilot 编辑启动 AI 驱动的代码编辑会话,并通过使用自然语言跨多个文件快速迭代代码更改。Copilot 编辑直接在编辑器中应用编辑,您可以在其中在上下文中查看它们,并具有周围代码的完整上下文。
Copilot 编辑可以在两种模式下运行
- 编辑模式:选择要编辑的文件,提供相关上下文和提示,Copilot 将建议代码编辑。
- 代理模式(预览版):让 Copilot 自主规划实现请求所需的任务和相关文件。Copilot 将应用代码编辑并建议终端命令,并将持续迭代以解决出现的任何问题。
如果您正在使用笔记本电脑,则 Copilot 编辑支持目前受到限制。我们建议您在 VS Code 中将 Copilot Chat 或 内联 Chat 与笔记本电脑结合使用。
以下视频演示了如何使用 Copilot 编辑扩展基本 Express 应用,例如添加新页面、导航栏和主题切换器。
如果您还没有 Copilot 订阅,则可以通过注册 Copilot 免费计划来免费使用 Copilot,并获得每月的补全和 Chat 交互次数限制。
编辑模式与代理模式(预览版)
Copilot 可以在两种模式下运行:编辑模式和代理模式。这些模式迎合了不同的用户偏好和工作流程,从而允许在代码编辑和迭代方式方面具有灵活性。
在编辑模式下,您可以提供您希望 Copilot 处理的相关上下文和文件。Copilot 将根据您的提示建议代码编辑,您可以手动迭代代码更改,方法是提供后续提示。
在代理模式下,Copilot 自主确定相关上下文和文件,确定需要执行的任务,并提供代码更改和终端命令以完成请求。然后,它独立迭代以实现期望的结果,并修复出现的问题。
Copilot 编辑代理模式使用一组 工具,这些工具允许它执行特定任务,例如编辑文件、运行和监视终端命令或验证代码。这些工具可以并行运行以完成请求的任务。
在这两种模式下,您都可以查看生成的编辑,并决定保留还是拒绝它们。
使用编辑模式
在编辑模式下,您可以选择要编辑的文件并提供相关上下文和提示。Copilot 将根据您的提示建议代码编辑。
-
打开 Copilot 编辑视图 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。
-
从 VS Code 标题栏中的 Copilot 菜单中选择打开 Copilot 编辑 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。
-
或者,选择视图 > 外观 > 辅助侧边栏 (⌥⌘B (Windows、Linux Ctrl+Alt+B)) 以打开辅助侧边栏,然后选择 Copilot 编辑视图。
-
-
从模式下拉列表中选择编辑。
-
使用添加文件来指示 Copilot 提示的相关上下文。
您还可以将文件、文件夹或编辑器选项卡拖放到 Copilot 编辑视图中,以将它们添加为上下文。
Copilot 会自动添加活动编辑器作为上下文。使用 chat.implicitContext.enabled 设置来配置是否应自动添加活动编辑器。
当您向提示添加一个或多个文件时,Copilot 编辑会根据 Git 历史记录建议其他相关文件。使用 github.copilot.chat.edits.suggestRelatedFilesFromGitHistory 设置来配置此项。
提示通过在提示中添加
#codebase
,让 Copilot 自动查找正确的文件。确保启用 github.copilot.chat.codesearch.enabled (预览版) 设置以获得最佳结果。了解有关向 Copilot 提示添加上下文的更多信息。 -
输入提示以请求代码编辑。具体和准确地说明您想要的更改,并将较大的任务分解为较小的任务。
Copilot 编辑在编辑器中流式传输编辑,并在 Copilot 编辑视图中显示已更改文件的列表。
-
查看建议的编辑并接受或放弃建议的编辑。
作为用户,您可以控制对项目所做的更改,并且可以查看生成的编辑。
-
迭代代码更改。
如果您对编辑不太满意,可以提出后续问题,例如“不要包含电话号码”或“使用 jest 而不是 vitest”。或者您可以进一步增量编辑代码。例如,在构建 Web 应用时,使用一系列提示,例如“添加导航栏”、“添加主题切换器”、“以 JSON 格式将订单项存储在 MongoDB 中”。
使用代理模式(预览版)
在代理模式下,Copilot 编辑以更自主和动态的方式运行,以实现期望的结果。Copilot 代理模式确定相关上下文,提供代码更改和终端命令,并迭代以纠正问题。为了执行这些任务,代理模式使用一组 工具。
如果您是 Copilot Business 或 Enterprise 用户,则您组织的管理员必须选择使用 Copilot 编辑器预览功能。了解有关管理组织中 Copilot 策略的更多信息。
要在 Copilot 编辑中使用代理模式
-
在 VS Code Insiders 中打开您的项目。
注意代理模式目前为预览版,在 VS Code Insiders 中可用。向 VS Code Stable 的逐步推广正在进行中,一旦为您启用代理模式,您将在 Copilot 编辑视图中看到模式下拉列表。
-
打开 Copilot 编辑视图 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))
-
从 VS Code 标题栏中的 Copilot 菜单中选择打开 Copilot 编辑 (⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))。
-
或者,选择视图 > 外观 > 辅助侧边栏 (⌥⌘B (Windows、Linux Ctrl+Alt+B)) 以打开辅助侧边栏,然后选择 Copilot 编辑视图。
-
-
从模式下拉列表中选择代理
-
输入提示以请求代码编辑。
您无需指定要处理的文件。在代理模式下,Copilot 编辑自主确定要编辑的相关上下文和文件。
Copilot 编辑在编辑器中流式传输编辑,并更新已更改文件的列表。此外,Copilot 还可能建议要运行的终端命令。例如,运行测试或构建应用程序。
-
查看建议的代码编辑,并确认 Copilot 是否可以运行建议的终端命令。
作为用户,您可以控制对项目所做的更改,并且可以查看生成的编辑。
Copilot 在运行终端命令之前请求确认。您可以选择修改响应中建议的终端命令,然后选择继续以运行它。
如果您的项目在
tasks.json
中配置了任务,则代理模式会尝试运行适当的任务。例如,如果您定义了生成任务,则代理模式将在运行应用程序之前运行生成任务。使用 github.copilot.chat.agent.runTasks 设置启用或禁用运行工作区任务。 -
Copilot 编辑检测代码编辑和终端命令中的问题和错误,并将迭代并执行其他操作以解决它们。
例如,代理模式可能会因代码编辑而运行单元测试。如果测试失败,Copilot 会使用测试结果来解决问题。
-
继续提出后续问题,并迭代 Copilot 编辑提供的代码更改。
Copilot 编辑代理模式会多次迭代以解决问题和错误。chat.agent.maxRequests 设置控制 Copilot 编辑在代理模式下可以发出的最大请求数。
接受或放弃编辑
Copilot 编辑为您提供代码审查流程,您可以在其中接受或拒绝每个 AI 生成的编辑。如果您拒绝编辑,则修改后的文件将恢复到其先前接受的状态。
Copilot 列出已在已更改文件列表中编辑的文件。具有挂起的 Copilot 编辑的文件在资源管理器视图和编辑器选项卡中也具有指示器。
借助编辑器覆盖控件,您可以使用向上 () 和向下 () 控件在建议的编辑之间导航。使用保留或撤消按钮接受或拒绝给定文件的编辑。
要接受或拒绝文件中的特定编辑,请将鼠标悬停在代码编辑上,并使用该编辑的保留或撤消控件。
或者,您还可以从 Copilot 编辑视图中的已更改文件列表中接受或拒绝更改
-
在已更改文件列表中选择保留 (⌘Enter (Windows、Linux Ctrl+Enter)) 或撤消 (⌘Backspace (Windows、Linux Ctrl+Backspace)) 以接受或放弃所有编辑。
-
在单个文件上选择保留或撤消图标以将操作应用于该特定文件
使用 chat.editing.autoAcceptDelay 设置,您可以配置延迟,在此延迟之后,建议的编辑将自动接受。将鼠标悬停在编辑器覆盖控件上以取消自动接受倒计时。
当您关闭 VS Code 时,将记住挂起的编辑的状态。当您重新打开 VS Code 时,将还原挂起的编辑,您仍然可以接受或放弃编辑。
中断代理模式请求
要中断正在进行的请求,您可以暂停它或取消它。当您暂停请求时,Copilot 将停止处理请求并等待您的输入。
当您暂停请求时,您可以选择输入新提示(这将取消当前请求),也可以选择恢复当前请求。
当您取消请求时,Copilot 将中断并结束活动请求。您仍然可以查看并接受或拒绝到目前为止所做的更改。
撤消编辑
当您发送请求以对代码进行编辑时,您可能想要回滚其中一些更改,例如,因为您想要使用另一种实现策略。
您可以使用 Copilot 编辑视图标题栏中的撤消上次编辑控件来还原上次编辑,并返回到发送上次请求之前的状态。在您执行撤消上次编辑操作后,您可以使用 Copilot 编辑视图标题栏中的重做上次编辑控件再次重做这些编辑。
您还可以使用悬停在 Copilot 编辑视图中的请求上时显示的撤消编辑(删除)控件(x 图标)来还原从该请求开始所做的所有编辑。
有时,Copilot 在生成编辑时会开始走错路。一旦发生这种情况,就很难通过添加到对话中来说服它采用另一种方法。在这种情况下,请使用撤消上次编辑,直到您同意 Copilot 的响应为止。然后从那里使用改进的提示重新开始。
向 Copilot 编辑发送聊天请求
Copilot Chat 非常适合提出问题和探索有关您的项目或一般技术主题的想法。与其将 Copilot Chat 中的每个代码块都应用到您的代码中,不如将 Chat 会话转移到 Copilot 编辑。Copilot 编辑针对代码编辑进行了优化,可以同时跨多个文件直接在您的代码中应用代码建议。
在 Chat 视图中,选择 Chat 对话底部的使用 Copilot 编辑按钮,以使用 Copilot 编辑应用建议的代码更改。如果 Chat 会话中有多个 Chat 请求,您可以选择要转移到 Copilot 编辑的请求。
在将 Chat 请求移动到 Copilot 编辑后,Chat 请求将从 Chat 视图中的 Chat 对话中删除。
代理模式工具
为了完成请求,Copilot 编辑使用一组工具来完成单个任务。将这些工具视为 Copilot 可以用来执行特定任务的专用实用程序。此类任务的示例包括列出目录中的文件、编辑工作区中的文件、运行终端命令、从终端获取输出等。
根据工具的结果,Copilot 可能会调用其他工具来完成总体请求。例如,如果代码编辑导致文件出现语法错误,则 Copilot 可能会探索另一种方法并建议不同的代码更改。
尽管代理模式可以以自主方式运行,但您仍然可以控制生成的编辑和运行的终端命令。
设置
以下列表包含与 Copilot 编辑相关的设置。您可以通过设置编辑器配置设置
- chat.editing.confirmEditRequestRemoval - 在撤消编辑之前请求确认 (默认值:
true
) - chat.editing.confirmEditRequestRetry - 在执行重做上次编辑之前请求确认 (默认值:
true
) - chat.implicitContext.enabled (预览版) - 配置是否应自动将活动编辑器作为上下文添加到 Chat 提示。
- chat.editing.autoAcceptDelay - 配置延迟,在此延迟之后,建议的编辑将自动接受,使用零禁用自动接受 (默认值: 0)
- github.copilot.chat.codesearch.enabled (预览版) - 当您向提示添加
#codebase
时,让 Copilot 查找正确的文件,类似于代理模式的工作方式 (默认值:false
) - chat.agent.maxRequests - Copilot 编辑在代理模式下可以发出的最大请求数 (Copilot 免费用户默认值: 5,其他用户默认值: 15)
- github.copilot.chat.edits.suggestRelatedFilesFromGitHistory(实验性) - 在 Copilot 编辑中建议来自 git 历史记录的相关文件 (默认值:
false
) - github.copilot.chat.agent.runTasks - 在 Copilot 编辑中使用代理模式时运行工作区任务 (默认值:
true
)
键盘快捷方式
以下列表包含与 Copilot 编辑相关的默认键盘快捷方式。您可以使用键盘快捷方式编辑器修改任何默认键盘快捷方式
- ⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I) - 打开 Copilot 编辑视图
- ⌥⌘Enter (Windows、Linux Ctrl+Alt+Enter) - 将 Chat 视图中的提示发送到 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 Chat 进行初始搭建。 - 虽然
#codebase
非常适合查找与您的查询相关的上下文,但后续生成的编辑质量差异很大。试验 github.copilot.chat.codesearch.enabled (预览版) 设置,以获得改进的代理体验来查找文件,或显式地将文件添加到您的提示以创建更好的结果。 - 缺少或未测试对 Jupyter Notebook、其他自定义文本格式和二进制文件格式的支持。
- Copilot 编辑限制为每 10 分钟 7 个编辑请求。
常见问题
Copilot 编辑与 Copilot Chat 有何不同?
Copilot Chat 和 Copilot 编辑都使用对话界面,您可以在其中使用自然语言提示来获取 AI 驱动的建议。Copilot 编辑和 Copilot Chat 之间有几个明显的区别。
Copilot 编辑将您置于代码编辑的上下文中,您可以在其中启动编辑会话并使用提示来更改您的代码库。Copilot 编辑可以直接跨代码库中的多个文件生成和应用代码更改。您可以立即在代码上下文中预览生成的编辑。
Chat 视图为您提供更通用的 Chat 界面,用于询问有关您的代码或一般技术主题的问题。Copilot 还可以提供代码建议并生成代码块作为 Chat 对话的一部分。您需要手动应用每个代码块到项目中的不同文件,以评估其有效性。
行内聊天 通过在编辑器中提供聊天界面,让您保持编码流程,您可以在代码上下文中直接预览生成的代码建议。行内聊天的范围仅限于启动它的编辑器,因此它只能为单个文件提供代码建议。您还可以使用行内聊天来询问通用问题。
Copilot 编辑还为您提供代码审查流程,您可以在其中轻松审查生成的编辑内容,并决定接受或放弃它们。Copilot 聊天没有此代码审查机制。此外,您可以撤消过去的编辑,并将更改回滚到之前的接受状态。
下表显示了每种体验的功能比较。
功能 | Copilot 编辑 | 聊天视图 | 行内聊天 | 快速聊天 |
---|---|---|---|---|
多文件编辑 | ✅ | ✅* | ✅* | |
预览代码编辑 | ✅ | ✅ | ||
代码审查流程 | ✅ | |||
回滚更改 | ✅ | |||
附加上下文 | ✅ | ✅ | ✅ | ✅ |
使用参与者和命令 | ✅ | ✅ | ||
生成 shell 命令 | ✅ | ✅ | ||
通用聊天 | ✅ | ✅ | ✅ |
* 代码块包含在聊天对话中,需要手动应用到正确的文件
我可以更改 Copilot 编辑视图的位置吗?
您可以将 Copilot 编辑视图拖放到活动栏中,以在主侧边栏中显示它。您也可以将其移动到辅助侧边栏。了解更多关于 VS Code 中的 自定义布局 的信息。
为什么我要使用编辑模式而不是代理模式?
考虑以下标准来选择编辑模式和代理模式
- 编辑范围:如果您的请求仅涉及代码编辑,并且您知道更改的精确范围,则可以使用编辑模式。
- 预览功能:代理模式仍处于预览阶段,可能不适用于所有场景。
- 持续时间:代理模式涉及处理请求的多个步骤,因此可能需要更长的时间才能获得响应。例如,确定相关的上下文和要编辑的文件,确定行动计划等等。
- 非确定性:代理模式评估生成的编辑结果,并可能多次迭代。因此,代理模式可能比编辑模式更具非确定性。
- 请求配额:在代理模式下,根据任务的复杂性,一个提示可能导致对后端的许多请求。
我可以在笔记本电脑上使用 Copilot 编辑吗?
当您使用笔记本时,Copilot 编辑支持受到限制。例如,代理模式不适用于在 VS Code 中使用笔记本。
我们建议您在 VS Code 中将 Copilot 聊天 或 行内聊天 与笔记本一起使用。