在 VS Code 中使用编辑模式
通过 Visual Studio Code 中的聊天编辑模式,您可以使用自然语言对项目中的多个文件进行编辑。这些编辑会直接应用在编辑器中,您可以在原地结合周围代码的完整上下文来审查它们。
通过选择特定文件并提供清晰的上下文,您可以引导编辑模式进行有针对性的代码更改和改进。
先决条件
- 安装最新版本的 Visual Studio Code
- 访问 Copilot。Copilot 免费计划并获得每月补全和聊天交互的限制。
为何使用编辑模式?
编辑模式专为跨项目多个文件进行代码编辑而优化。VS Code 直接将代码更改应用在编辑器中,您可以在原地审查它们。您可以使用编辑模式来:
- 重构部分代码库,例如“使用 async/await 重构此代码”或“为数据库连接使用单例模式”。
- 向您的代码库添加新功能,例如“向应用添加一个登录表单”。
- 修复代码库中的错误,例如“当输入为空时,排序函数会失败,请修复它”。
- 为您的代码编写单元测试,例如“使用 vitest 为计算器类添加单元测试”。
- 提高代码的性能,例如“优化 calculate 函数以提高其效率”。
当您对要进行的更改以及要编辑的文件有清晰的了解时,编辑模式对于编码任务特别有用。如果您有一个定义不那么明确的任务、一个高层次的需求,或者更改还需要运行终端命令和工具,您可能需要改用代理模式。
使用编辑模式
在编辑模式下,您可以选择要编辑的文件并提供相关的上下文和提示。VS Code 会根据您的提示建议代码编辑。
-
打开聊天视图 (⌃⌘I (Windows、Linux 为 Ctrl+Alt+I)) 并从聊天模式选择器中选择编辑。
-
选择添加上下文或通过 #-提及特定的工作区文件或上下文项,为您的提示提供额外的上下文。
通过添加上下文,您可以获得更相关的响应。例如,要询问特定于当前项目的问题,您可以使用
#codebase
上下文项。在聊天输入框中键入#
可查看可用的上下文项列表。活动编辑器会自动作为上下文添加。当您添加文件时,系统可能会建议其他相关文件。
-
在聊天输入框中输入您的提示,以指明您想进行的编辑类型。
尝试以下示例问题以开始使用:
重构 calculate 函数以提高其效率。
向应用添加一个登录表单。使用 OAuth 进行身份验证。
为计算器类添加单元测试。使用 vitest作为测试框架。
-
请注意,VS Code 会将建议的编辑直接流式传输到编辑器中。
聊天视图会以粗体文本显示被编辑的文件列表。编辑器浮层控件可让您在建议的编辑之间导航。
-
审查建议的编辑,然后接受或放弃建议的编辑。
-
继续迭代代码更改,以完善编辑或实现其他功能。
接受或放弃编辑
VS Code 在聊天视图的已更改文件列表中列出被编辑的文件。有待处理编辑的文件在资源管理器视图和编辑器选项卡中也会有指示标记。
通过编辑器浮层控件,您可以使用向上箭头 () 和向下箭头 () 控件在建议的编辑之间导航。使用保留或撤销按钮来接受或拒绝给定文件的编辑。
使用编辑器或聊天视图中的保留或撤销控件来接受或拒绝单个或所有建议的编辑。
通过 chat.editing.autoAcceptDelay 设置,您可以配置一个延迟时间,超过该时间后,建议的编辑将自动被接受。将鼠标悬停在编辑器浮层控件上可以取消自动接受的倒计时。
当您关闭 VS Code 时,待处理编辑的状态会被记住。当您重新打开 VS Code 时,待处理的编辑会被恢复,您仍然可以接受或放弃这些编辑。
还原编辑
当您发送请求以编辑代码时,您可能希望回滚其中的一些更改,例如因为您想使用另一种实现策略,或者因为 AI 在生成编辑时走错了方向。
您可以使用聊天视图标题栏中的撤销上次编辑控件来还原上次的编辑,并返回到发送上一个请求之前的状态。在您执行撤销上次编辑后,您可以通过聊天视图标题栏中的重做上次编辑控件再次重做那些编辑。
您也可以在聊天视图中将鼠标悬停在某个请求上时,使用撤销编辑(删除)控件(x 图标)来还原从该请求开始所做的所有编辑。
使用指令来获得遵循您编码风格的 AI 编辑
要获得遵循您的编码风格、偏好的框架和其他偏好的 AI 生成的代码编辑,您可以使用指令文件。指令文件允许您在 Markdown 文件中描述您的编码风格和偏好,AI 会使用这些文件来生成符合您要求的代码编辑。
您可以手动将指令文件作为上下文附加到您的聊天提示中,也可以配置指令文件以自动应用。
以下代码片段展示了一个描述您的编码风格和偏好的指令文件示例:
---
applyTo: "**"
---
# Project general coding standards
## Naming Conventions
- Use PascalCase for component names, interfaces, and type aliases
- Use camelCase for variables, functions, and methods
- Prefix private class members with underscore (_)
- Use ALL_CAPS for constants
## Error Handling
- Use try/catch blocks for async operations
- Implement proper error boundaries in React components
- Always log errors with contextual information
了解更多关于使用指令文件的信息。
设置
以下列表包含与编辑模式相关的设置。您可以通过设置编辑器 (⌘, (Windows、Linux 为 Ctrl+,)) 配置设置。
- chat.editing.confirmEditRequestRemoval - 在撤销编辑前请求确认(默认为:
true
)。 - chat.editing.confirmEditRequestRetry - 在重做上次编辑前请求确认(默认为:
true
)。 - chat.editing.autoAcceptDelay - 配置一个延迟时间,超过该时间后建议的编辑将自动被接受,使用零来禁用自动接受(默认为:0)。
- github.copilot.chat.codesearch.enabled (预览版) - 当您向提示中添加
#codebase
时,让 VS Code 找到正确的文件,类似于代理模式的工作方式(默认为:false
)。
常见问题
为什么我会选择使用编辑模式而不是代理模式?
考虑以下标准来在编辑模式和代理模式之间做出选择:
- 编辑范围:如果您的请求仅涉及代码编辑,并且您知道更改的精确范围,则可以使用编辑模式。
- 持续时间:代理模式处理一个请求涉及多个步骤,因此可能需要更长的时间才能得到响应。例如,确定相关的上下文和要编辑的文件,确定行动计划等。
- 非确定性:代理模式会评估生成编辑的结果,并可能多次迭代。因此,代理模式可能比编辑模式更具非确定性。
- 请求配额:在代理模式下,根据任务的复杂性,一个提示可能会导致对后端的多次请求。