2024 年 5 月(版本 1.90)
更新 1.90.2:此更新解决了这些 问题。
更新 1.90.1:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel 硅 | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 的 2024 年 5 月版本。此版本有许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 编辑器选项卡多选 - 同时选择多个选项卡并执行操作。
- 配置文件 - 使用您首选的配置文件打开新窗口。
- 编辑器操作 - 立即访问各个编辑器组的编辑器操作。
- Copilot 可扩展性 - 使用聊天和语言模型 API 将 AI 构建到您的扩展中。
- VS Code 语音 - 使用文本到语音自动读出 Copilot 聊天响应。
- 在笔记本中查找 - 将搜索限制在笔记本中选定的单元格。
- 聊天上下文 - 在聊天中快速附加不同类型的上下文。
- 聊天响应中的 IntelliSense - 通过 IntelliSense 更好地理解生成的代码。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。内部人员:想尽快尝试新功能吗?您可以下载夜间 内部人员构建版本,并尽快尝试最新的更新。
辅助功能
从辅助功能帮助对话框设置键绑定
辅助功能帮助对话框为您提供了某个功能或视图的重要命令的概述。当某个命令缺少键绑定分配时,您现在可以使用 ⌥K (Windows, Linux Alt+K) 从辅助功能帮助对话框中配置它。
实验性功能:信号延迟设置
启用设置 Debounce position changes
后,您可以使用设置 Signal options delays
自定义各种辅助功能信号的防抖时间。
工作台
编辑器选项卡多选
您现在可以同时选择多个选项卡,从而能够一次将操作应用于多个编辑器。这项新功能使您可以使用单个操作移动、固定或关闭多个选项卡。要将另一个选项卡添加到您的选择中,请使用 Ctrl + 单击
(macOS 上为 Cmd + 单击
)。要选择一系列选项卡,请使用 Shift + 单击
。
始终显示编辑器操作
我们正在引入 Always Show Editor Actions
设置。当您启用此设置时,无论编辑器是否处于活动状态,都会始终显示每个编辑器组的编辑器标题操作。
当未启用该设置(默认值)时,仅当编辑器处于活动状态时才会显示编辑器操作
如果您启用该设置,即使编辑器未处于活动状态,编辑器操作也始终可用
将 disable-lcd-text 设置为运行时参数
使用 disable-lcd-text
,您可以禁用 Windows 上的 RGB 子像素渲染。disable-lcd-text
设置现在在 argv.json
文件中作为运行时参数受支持。以前,它仅作为未记录的 CLI 标志可用。使用 首选项:配置运行时参数 命令配置运行时参数。
在下面的图像中,您可以看到一个并排比较,其中左侧的 disable-lcd-text
为 true
,右侧为 false
。
主题:浅粉色(在 vscode.dev 上预览)
为新窗口配置自定义配置文件
以前,当您打开新的 VS Code 窗口时,它会使用活动窗口的配置文件,如果没有活动窗口,则使用默认配置文件。您现在可以通过配置 window.newWindowProfile
设置来指定打开新窗口时应使用的配置文件。
源代码管理
焦点输入/资源组命令
在此里程碑中,我们添加了几个工作台命令,以便您可以为它们创建键盘快捷键
- 聚焦到下一个或上一个源代码管理输入字段:
workbench.scm.action.focusNextInput
、workbench.scm.action.focusPreviousInput
- 聚焦到存储库中的下一个或上一个资源组:
workbench.scm.action.focusNextResourceGroup
、workbench.scm.action.focusPreviousResourceGroup
笔记本
在单元格选择中查找
当您在笔记本中时,现在可以使用“查找”控件在选定单元格的特定范围内搜索。
将 notebook.experimental.find.scope.enabled
设置为 true
后,在单元格选择中查找切换将在“查找”控件中可用。然后,您可以选择一系列单元格,然后打开“查找”控件,或者,如果它已打开,则选择“在单元格选择中查找”按钮。
笔记本格式化代码操作
笔记本现在支持一种新的代码操作类型,它使用 notebook.format
代码操作类型前缀定义。可以通过显式格式化请求(使用命令 笔记本:格式化笔记本)或保存时格式化请求自动触发这些代码操作。
这些可用于通过使用工作区编辑和笔记本编辑提供更强大的格式化。要开始使用,请查看 vscode-extension-samples 存储库中的示例扩展。
终端
⚠️ 删除画布渲染器
画布渲染器在 VS Code 1.89 版本中已弃用,现在已完全删除。这意味着在少数不支持 WebGL2 的计算机上,终端现在使用基于 DOM 的渲染器。您可以在终端文档中阅读有关 GPU 加速的更多信息。
在终端中重新缩放重叠的字形
作为 VS Code 1.88 版本中的预览功能引入的设置 terminal.integrated.rescaleOverlappingGlyphs
现在默认启用。此功能会重新缩放重叠的字形,这些字形会覆盖旨在覆盖宽度模糊字符的后续单元格,并且这些单元格的字体字形可能与后备 pty/unicode 版本认为的字形不匹配。
例如,在大多数字体中,罗马数字 unicode 字符 (U+2160+
) 通常会占用多个单元格,因此启用此设置后,它们会水平重新缩放。
不重新缩放
重新缩放后
扩展贡献
GitHub Copilot
将上下文附加到聊天
为了使您的聊天提示更具体,您可以向聊天消息添加上下文。您现在可以将更多类型的上下文附加到聊天消息,例如工作区符号。以前,您使用“#”符号来引用文件或当前选择。现在,您可以通过选择“聊天”视图输入字段中的 📎 图标,或键入 ⌘/ (Windows, Linux Ctrl+/) 来将上下文附加到聊天消息。
提示:在保持上下文选择器打开的情况下,使用右箭头键快速在后台附加上下文。当您在编辑器中时,还可以右键单击选择并选择 Copilot > 将选择添加到聊天。
使用必应搜索和企业知识库提出问题
VS Code 中的 GitHub Copilot 企业版用户现在可以提出问题,这些问题会使用来自 Web 结果和您企业的 知识库的上下文进行丰富。要试用此功能,请安装 Copilot 聊天版的最新预发行版本。
在“聊天”视图中,您可以提出诸如 @github Node.js 的最新 LTS 是什么?#web
之类的问题,以利用 Web 搜索。Copilot 引用的任何搜索结果都会显示在聊天响应的 使用的引用
部分中。
您还可以提出有关您企业的知识库的问题,这些知识库是包含文档的 Markdown 存储库的集合,可以直接在 VS Code 中使用。只需键入 @github #kb
即可从您可用的知识库中进行选择。同样,Copilot 引用的任何知识库代码段都会显示在聊天响应的 使用的引用
部分中。
这使 Copilot 企业版用户可以通过使用现有的聊天变量(例如 #file
和 #selection
)将搜索结果和内部文档与编辑器上下文结合起来。请试用一下,并在 https://github.com/microsoft/vscode-copilot-release 上与我们分享您的反馈!
聊天代码块中的 IntelliSense
我们现在支持 Copilot 生成的代码块中的基本 IntelliSense。这使您可以使用您可能已经在编辑器中使用的许多相同的 IntelliSense 工具,并且可以帮助您更好地理解生成的代码。
受支持的 IntelliSense 功能包括
- 通过使用 ctrl 单击 / cmd 单击 或 F12 转到定义
- 悬停
- 转到实现
- 转到类型定义
IntelliSense 甚至可以与 @workspace
一起使用,以了解 Copilot 响应中使用的任何工作区符号。
TypeScript、JavaScript、HTML 和 CSS 代码块的 IntelliSense 开箱即用。对于其他语言支持,请尝试安装该语言的扩展,尽管并非每个语言扩展都已支持代码块 IntelliSense。请为尚未支持此功能的任何语言提交功能请求。
改进了聊天响应中的链接
我们通过添加文件名和符号的链接来改进聊天响应。通过选择这些链接,您可以在编辑器中导航到相应的文件或符号。
在内联聊天和“聊天”视图之间漫游活动聊天
您现在可以将已完成或仍在活动的聊天请求从内联聊天移到“聊天”视图。您可以使用此功能来清理内联聊天,并将对话移到更持久的位置。要移动请求,请选择聊天输入框旁边的聊天图标。
自动重命名建议
如果您使用 Copilot Chat 扩展,现在当您重命名符号时,由 Copilot 驱动的重命名建议会自动触发。您可以使用设置 github.copilot.renameSuggestions.triggerAutomatically
来关闭此功能。
Python
测试错误修复
改进了使用 Python Testing Rewrite 时 pytest 的体验,以便在 pytest 的当前工作目录与 VS Code 工作区根目录相邻时提供更好的支持,并在类中重复函数名称时在测试资源管理器上显示参数化测试。
此外,我们通过将系统配置脚本路径添加到 PATH 中,以便为测试执行启用 shell,从而减少了一些测试发现失败的情况。
实验性功能:带有智能感知和语法高亮的 Python 原生 REPL
您现在可以在类似编辑器的 REPL 环境中运行 Python 代码,该环境配备了智能感知和语法高亮等功能,以提高与 REPL 的交互效率。要启用此功能,请在您的 settings.json
文件中设置 "python.REPL.sendToNativeREPL": true
。这将会在按下 Shift+Enter 和执行“运行选择/行”时在 Python 原生 REPL 中执行代码。
您可以通过在您的 settings.json
文件中设置 "python.REPL.sendToNativeREPL": false
来选择使用终端内的 Python REPL(>>>)。此外,如果您在 settings.json
中添加设置 "interactiveWindow.executeWithShiftEnter": false
,Python 原生 REPL 将会在按下 Enter 时智能执行,类似于 Python 原始的交互式解释器。
GitHub Pull Requests 和 Issues
在 GitHub Pull Requests 扩展方面取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。请查看该扩展的 0.90.0 版本更新日志,以了解其他亮点。
VS Code 语音
我们为 VS Code 语音 扩展添加了文本转语音功能。可以启用新的设置 accessibility.voice.autoSynthesize
,以便在语音也用作输入时自动朗读 Copilot Chat 的回复。
请注意,输入字段中的麦克风图标会发生变化,表示正在朗读文本。要中断合成,请选择该图标或按 Escape。
每个聊天回复还会显示一个新的扬声器图标,以便您可以选择性地朗读回复
您可以通过现有的 accessibility.voice.speechLanguage
设置来更改用于文本转语音的语言。
预览功能
PowerShell 的 VS Code 原生智能感知
除了几项可靠性改进之外,我们还对终端中的 PowerShell 智能感知进行了以下更改:
terminal.integrated.shellIntegration.suggestEnabled
已更改为terminal.integrated.suggest.enabled
- 新的
terminal.integrated.suggest.quickSuggestions
控制在您在空格后键入时是否显示建议 - 新的
terminal.integrated.suggest.suggestOnTriggerCharacters
控制在您键入/
、\
或-
时是否显示建议
TypeScript 5.5
我们继续改进对即将发布的 TypeScript 5.5 版本的支持。请查看 TypeScript 5.5 beta 博文 和 迭代计划,以了解有关此版本的详细信息。
要开始使用 TypeScript 5.5 beta,请安装 TypeScript Nightly 扩展。请分享反馈,并告知我们您是否遇到任何关于 TypeScript 5.5 的错误。
Web 的问题报告器
我们改进了 VS Code for Web 中的问题报告流程,使其与用户当前在桌面上的体验相匹配。选择“帮助: 报告问题”会在新窗口中打开问题报告器页面,用户可以在其中选择错误类型、来源和扩展(如果需要)。扩展信息、系统信息等会自动附加到在 GitHub 中创建的问题中。
此功能目前在此版本中默认禁用,但请通过启用 issueReporter.experimental.webReporter
设置来分享对此功能的反馈。
扩展开发
使用 esbuild 来构建扩展
用于 TypeScript
和 Web
的 yo code
扩展生成器现在可以选择使用 esbuild
作为捆绑器。当您选择 esbuild
时,这会创建一个 esbuild.js
构建脚本,并在 package.json
中添加脚本条目,并在 .vscode/tasks.json
中添加构建任务。
要在现有扩展中使用 esbuild
,请查看捆绑扩展和 Web 扩展 指南。
您可以在 vscode-extension-samples/esbuild-sample 中找到示例项目。
聊天和语言模型 API
我们已经完成了允许扩展参与聊天并访问语言模型的 API。有关详细信息,请参阅扩展示例和聊天扩展文档页面,或者观看我们在 Microsoft Build 大会上发表的使用 GitHub Copilot 增强 VS Code 扩展演讲。
重要说明:这些 API 已最终确定,但目前仅在 VS Code Insiders 中可用。
聊天参与者
聊天参与者 API 使扩展能够通过聊天参与者来扩展 GitHub Copilot Chat,该参与者可以在聊天输入字段中使用 @
调用。参与者可以使用 Markdown、文件树、运行 VS Code 命令的按钮或其他类型的内容来回复用户请求。
语言模型
语言模型 API 允许访问 Copilot 的聊天模型,例如 gpt-3.5 和 gpt-4。此 API 可用于聊天参与者,也可用于丰富其他功能。该 API 基于 LanguageModelChat
对象构建,这些对象用于聊天请求和计算标记。
访问聊天对象的唯一方法是使用 vscode.lm.selectChatModels
函数。该函数接受一个选择器来缩小聊天模型的不同属性,例如按供应商、系列、版本或标识符。这些值相对自由,必须在提供这些值的扩展的文档中查找。目前,只有 Copilot Chat 扩展贡献了聊天模型。它使用 copilot
供应商,当前的系列是 gpt-3.5-turbo
和 gpt-4
,但可能会发生更改。
该代码片段显示了如何选择来自 copilot
供应商的所有聊天模型
const models = await vscode.lm.selectChatModels({
vendor: 'copilot'
});
if (models.length === 0) {
// no models available
return;
}
调用 selectChatModels
时,有两件事非常重要:
- 如果没有可用的模型,该函数将返回一个空数组,扩展必须处理这种情况。
- Copilot 的聊天模型需要用户的同意才能被扩展使用。同意通过身份验证对话框实现。因此,应该作为用户发起的动作(如命令)的一部分调用
selectChatModels
,而不是“凭空”调用。
有了聊天对象,扩展现在可以使用它来发送聊天请求。以下代码片段显示了如何发送聊天请求并处理响应流。
// take the first model and say "Hello"
const [chat] = models;
const messages = [vscode.LanguageModelChatMessage.User('Hello')];
const response = await chat.sendRequest(messages);
// the response is always an async iterable that can be consumed with for-await
for await (const part of response.text) {
console.log(part);
}
这就是语言模型 API 的要点。有关更完整的示例,请参阅扩展示例。请继续关注更多示例、文档和 API 的进一步扩展。
VS Code 的 Java 扩展已经在使用语言模型 API 来为您的 Java 代码提供基于 Copilot 的重写功能。在Visual Studio Code 中的 Java 2024 年 5 月更新博文中了解有关这些更新的更多信息。
@vscode/prompt-tsx
库
为了帮助开发 VS Code 的 GitHub Copilot 扩展,我们开发并发布了一个基于 TSX 的库,用于声明复杂的提示并将它们转换为聊天消息,这取决于您的 LLM 的上下文窗口限制。在开发过程中,我们从 Anysphere 的 priompt
库中汲取了灵感。如果您是计划使用聊天和语言模型 API 的扩展作者,请考虑试用此库的最新 alpha 版本:@vscode/prompt-tsx。
通过 GitHub 应用程序扩展 GitHub Copilot
也可以通过贡献 GitHub 应用程序来扩展 GitHub Copilot。此 GitHub 应用程序可以在聊天视图中贡献一个聊天参与者,您可以使用 @
调用它。GitHub 应用程序由服务支持,并且可以在所有 GitHub Copilot 界面(例如 github.com、Visual Studio 或 VS Code)中使用。GitHub 应用程序不能完全访问 VS Code API。要通过 GitHub 应用程序扩展 GitHub Copilot,您应该加入Copilot 合作伙伴计划。您可以通过观看我们在 Microsoft Build 大会上发表的扩展 GitHub Copilot 演讲来了解更多信息。
调试堆栈焦点 API
VS Code 现在通过新的 API 公开调试视图中聚焦的堆栈帧和线程。vscode.debug.activeStackItem
检索当前聚焦的堆栈项(线程或堆栈帧),vscode.debug.onDidChangeActiveStackItem
是在该项更改时触发的事件。
这与扩展 VS Code 调试功能的 API(例如使用 DebugAdapterTracker
的 API)结合使用非常有用。了解有关创建调试器扩展的更多信息。
TestRunRequest.preserveFocus
API
以前,由扩展触发的测试运行永远不会像 UI 发起的运行一样将焦点移动到测试结果视图中。现在可以通过在创建 TestRunRequest
时设置的 preserveFocus
标志来配置此行为。此标志默认为 true
,以保持向后兼容性。
提议的 API
可归属的测试覆盖率
我们正在开发一个 API,该 API 能够基于每个测试来归属测试覆盖率。这让用户可以看到哪些测试运行了哪些代码,从而过滤编辑器中显示的覆盖率和“测试覆盖率”视图中显示的覆盖率。请查看 vscode#212196 以获取更多信息和更新。
悬停详细程度
在上一个里程碑中,提出了一个新的 API,用于提供可以增加或减少详细程度的悬停。在此里程碑中,API 已更改,使 HoverVerbosityRequest
使用 verbosityDelta
来指示悬停详细程度的相对增加或减少。以前,HoverVerbosityRequest
使用枚举 HoverVerbosityAction
来指示应该增加还是减少详细程度。
工程
跟踪启动时的内存效率
我们每天都会测量 VS Code Insiders 在 Windows、macOS 和 Linux 上的启动性能。我们主要关注的是打开文本文件之前的启动速度。
本月,我们添加了另一个我们计划改进的指标,以使启动速度更快:我们消耗多少内存,以及其中有多少内存最终被 V8 垃圾回收。如果我们能够降低这个数字,启动时间将不会受到 V8 垃圾回收运行的太大影响。
Electron 29 更新
在此里程碑中,我们将 Electron 29 更新推广到稳定版本的用户。此更新包含 Chromium 122.0.6261.156 和 Node.js 20.9.0。我们要感谢所有在 Insiders 版本上自托管并提供早期反馈的用户。
值得注意的修复
- 212386 本地历史记录:不保留之前已删除文件的条目
- 213645 辅助窗口在 Firefox 中不起作用
- vscode-js-debug#2000/2002 JavaScript 调试器更快,尤其是在处理源映射重命名时
感谢
最后但同样重要的是,非常感谢 VS Code 的贡献者。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @RedCMD (RedCMD)
- @starball5 (starball)
- @ArturoDent (ArturoDent)
拉取请求
对 vscode
的贡献
- @BrunoSoaresEngineering: feat(markdown-language-features): #208398 添加 avif 作为图像扩展名 PR #212547
- @bsShoham (Shoham Ben Shitrit): 删除全局启用消息 PR #213128
- @CharlesHGong (Hanning Gong (Charles)): 修复 defaultLinesDiffComputer 未传入超时变量的问题 PR #213035
- @cpendery (Chapman Pendery): refactor:支持在 Windows 上进行动态终端提示符检测,无需正则表达式 PR #211382
- @DatN99 (Dat Nguyen): 为笔记本单元格 Markdown 行高添加设置 PR #212531
- @gjsjohnmurray (John Murray)
- 在从 Webview 编辑器切换后使代码透镜正常工作(修复 #198309)PR #211999
- 如果在
TimelineProvider.onDidChange
事件中传入,则恢复TimelineChangeEvent.uri
PR #212927
- @kdy1 (Donny/강동윤): feat:为 SWC 使用官方 json 架构 PR #212158
- @mahmoudsalah1993 (Mahmoud Salah): 如果有任何执行类型被重新注册,则触发 onDidRegisterAllSupported executions PR #212163
- @Maximetinu (Miguel Medina Ballesteros): 添加
AccessibilitySignal.terminalCommandSucceeded
和success.mp3
(问题 #178989)PR #204430 - @OccasionalDebugger
- 在 getTopStackFrame 中考虑 stackframe deemphasize PR #211855
- 从插件传递完整函数断点选项 PR #211895
- @pouyakary (Pouya Kary ✨): 特性:更粗体的字体 + 可配置的 Minimap 部分标题标签的字母间距 ✨ PR #209990
- @sean-mcmanus (Sean McManus): 将 /** */ 添加到 cpp/language-configurations.json PR #211202
- @SimonSiefke (Simon Siefke)
- 修复:在源列渲染器中处理模板数据可处理对象 PR #202618
- 特性:启用 TypeScript 隔离模块 PR #212913
- 添加 editor.findMatchForeground PR #213497
- 修复当 editor findMatchForeground 未定义时颜色错误的问题 PR #213686
- @walkerdb (Walker Boyle): 修复:当日志路径包含空格时,tsserver 不再崩溃 PR #212752
- @wenfangdu (Wenfang Du): 在 WorkspacesHistoryMainService 中将“git-rebase-todo”添加到 COMMON_FILES_FILTER PR #211614
- @Yesterday17 (Yesterday17): 修复:如果扩展程序由其他源安装,则删除临时目录 PR #213379
对 vscode-eslint
的贡献
- @sapegin (Artem Sapegin): 特性:允许 eslint.rules.customizations 定位所有可修复的规则 PR #1841
对 vscode-extension-samples
的贡献
- @moushicheng (某时橙): 修复:lsp-embedded-language-serviceadd 添加 activationEvents 以调用客户端 PR #936
对 vscode-generator-code
的贡献
- @1chooo (Hugo ChunHo Lin): 删除
ext-command-ts/vsc-extension-quickstart.md
中的不必要空格 PR #467 - @k35o (k8o): 将
templates
文件夹中vscode
文件夹中的文件中的空格转换为制表符 PR #458
对 vscode-hexeditor
的贡献
- @lorsanta (Lorenzo Santangelo): 添加以不同格式复制选定内容和粘贴十六进制字符串支持 PR #498
- @tomilho (Tomás Silva): 添加 copyOffsetAsHex/Dec PR #521
对 vscode-languageserver-node
的贡献
- @hyangah (Hyang-Ah Hana Kim): 添加 SemanticTokenTypes.label PR #1423
- @imbant (imbant): 修复“未按升序排列的语义令牌将不会被突出显示”的问题 PR #1467
- @rchiodo (Rich Chiodo): 支持为笔记本提取诊断信息 PR #1465
对 vscode-mypy
的贡献
- @hamirmahal (Hamir Mahal): 修复:已弃用的文档获取用法 PR #302
对 vscode-remote-try-dotnet
的贡献
- @cmaneu (Christopher MANEU): 将演示应用程序迁移到 .NET 6 PR #31
对 language-server-protocol
的贡献
- @asukaminato0721 (Asuka Minato): 添加-make-lsp PR #1941
- @fbricon (Fred Bricon): 将 LSP4IJ 客户端添加到 tools.md PR #1940
- @macnetic (Magnus Oksbøl Therkelsen): 为 SystemVerilog 添加 Verible 语言服务器 PR #1929
- @ssbarnea (Sorin Sbarnea): 更正 Ansible 语言服务器的链接 PR #1930
- @wiremoons (Simon Rowe): 更新 servers.md - 为 Odin 语言添加 OLS PR #1931
- @ybiquitous (Masafumi Koba): 将 Ruby 中的 LanguageServer::Protocol 添加到 SDK PR #1937
对 monaco-editor
的贡献
- @htcfreek (Heiko): 将扩展名添加到
csp.contribution.ts
PR #4504 - @jakebailey (Jake Bailey): 在内部 EmitOutput 诊断中调用 clearFiles,向下传递参数 PR #4482
- @johnyanarella (John Yanarella): 在所有项目(包括供应商文件)中将 TypeScript 更新到 TS 5.4.5 PR #4305
- @samstrohkorbatt: 添加 Python f 字符串语法支持 PR #4401