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