在 VS Code 中使用编辑模式
通过 Visual Studio Code 中的聊天编辑模式,你可以使用自然语言对项目中的多个文件进行编辑。这些编辑会直接应用于编辑器中,你可以在其中进行原地审查,并查看周围代码的完整上下文。
通过选择特定文件并提供清晰的上下文,你可以引导编辑模式进行有针对性的代码更改和改进。
先决条件
- 安装最新版本的 Visual Studio Code
- 访问 Copilot。使用 Copilot 免费计划 可获得每月完成和聊天交互的限制。
为何使用编辑模式?
编辑模式已针对对项目中多个文件进行代码编辑进行了优化。VS Code 会直接将代码更改应用于编辑器中,你可以在其中进行原地审查。你可以使用编辑模式来
- 重构代码库的某些部分,例如“使用 async/await 重构此代码”或“为数据库连接使用单例模式”。
- 向代码库添加新功能,例如“为应用添加登录表单”。
- 修复代码库中的错误,例如“当输入为空时排序函数失败,修复它”。
- 为代码编写单元测试,例如“使用 vitest 为计算器类添加单元测试”。
- 提高代码性能,例如“优化计算函数以提高效率”。
当您对要进行的更改以及要编辑的文件有很好的理解时,编辑模式对于编码任务特别有用。如果您有一个定义不明确的任务、一个高级别的需求,或者还需要运行终端命令和工具的更改,您可能希望改用代理模式。
使用编辑模式
在编辑模式下,您选择要编辑的文件并提供相关上下文和提示。VS Code 将根据您的提示建议代码编辑。
-
打开聊天视图 (⌃⌘I (Windows、Linux Ctrl+Alt+I)),然后从聊天模式选择器中选择编辑。
在 VS Code 稳定版 或 Insiders 版 中直接打开编辑模式。
-
选择添加上下文或 #-提及特定的工作区文件或上下文项,为您的提示提供额外的上下文。
通过添加上下文,您可以获得更相关的响应。例如,要询问特定于当前项目的问题,您可以使用
#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
)。
常见问题
为什么我应该使用编辑模式而不是代理模式?
选择编辑模式和代理模式时,请考虑以下标准
- 编辑范围:如果您的请求仅涉及代码编辑且您知道更改的精确范围,则可以使用编辑模式。
- 持续时间:代理模式涉及处理请求的多个步骤,因此可能需要更长时间才能获得响应。例如,确定相关上下文和要编辑的文件,确定行动计划等。
- 非确定性:代理模式会评估生成的编辑结果,并可能多次迭代。因此,代理模式可能比编辑模式更具非确定性。
- 请求配额:在代理模式下,根据任务的复杂性,一个提示可能会导致向后端发送许多请求。