现已推出!阅读 10 月份的新功能和修复。

2024 年 5 月(版本 1.90)

更新 1.90.2:此更新解决了这些 问题

更新 1.90.1:此更新解决了这些 问题

下载:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap


欢迎使用 Visual Studio Code 的 2024 年 5 月版。此版本中有许多更新,我们希望您会喜欢,以下是一些主要亮点:

如果您想在线阅读这些发行说明,请访问 更新 页面,该页面位于 code.visualstudio.com 网站上。内部人员:想要尽快尝试新功能?您可以下载夜间 内部人员 版本,并在新功能可用时立即尝试。

无障碍

从无障碍帮助对话框设置键绑定

无障碍帮助对话框提供了有关功能或视图的重要命令的概述。当命令缺少键绑定分配时,您现在可以使用 ⌥K(Windows、Linux Alt+K 从无障碍帮助对话框内对其进行配置。

实验性:信号延迟设置

Debounce position changes 设置启用时,您可以使用 Signal options delays 设置自定义各种无障碍信号的去抖时间。

工作区

编辑器选项卡多选

您现在可以同时选择多个选项卡,从而能够一次对多个编辑器应用操作。此新功能使您能够通过单个操作移动、固定或关闭多个选项卡。要将另一个选项卡添加到您的选择中,请使用 Ctrl + Click(在 macOS 上使用 Cmd + Click)。要选择一系列选项卡,请使用 Shift + Click

始终显示编辑器操作

我们正在引入 Always Show Editor Actions 设置。当您启用此设置时,每个编辑器组的编辑器标题操作将始终显示,无论编辑器是否处于活动状态。

当设置未启用(默认值)时,只有在编辑器处于活动状态时才会显示编辑器操作。

Editor Actions of each group when the setting is disabled

如果启用该设置,则即使编辑器未处于活动状态,编辑器操作也将始终可用。

Editor Actions of each group when the setting is enabled

将 disable-lcd-text 设置为运行时参数

使用 disable-lcd-text,您可以在 Windows 上禁用 RGB 次像素渲染。disable-lcd-text 设置现在在 argv.json 文件中作为运行时参数受支持。以前,它仅作为未记录的 CLI 标志可用。使用首选项:配置运行时参数命令配置运行时参数。

在下图中,您可以看到一个并排比较,左侧 disable-lcd-texttrue,右侧为 false

Comparison showing that disable-lcd-text disables RGB subpixel rendering

主题:浅粉色(在 vscode.dev 上预览)

为新窗口配置自定义配置文件

以前,当您打开一个新的 VS Code 窗口时,它会使用活动窗口的 配置文件,或者如果没有活动窗口,则使用默认配置文件。您现在可以通过配置 window.newWindowProfile 设置来指定在打开新窗口时应使用哪个配置文件。

Configure custom profile for new window

源代码管理

聚焦输入/资源组命令

在本里程碑中,我们添加了几个工作区命令,以便您可以为它们创建键盘快捷键。

  • 聚焦下一个或上一个源代码管理输入字段:workbench.scm.action.focusNextInputworkbench.scm.action.focusPreviousInput
  • 聚焦存储库中的下一个或上一个资源组:workbench.scm.action.focusNextResourceGroupworkbench.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+)通常占用多个单元格,因此在启用此设置时它们会在水平方向上重新调整大小。

不进行重新调整

Before the glyphs for Ⅷ and Ⅻ depending on the font would always overlap the following cells

进行重新调整

After the glyphs for Ⅷ and Ⅻ depending on the font are rescaled horizontally to fit a single cell

对扩展的贡献

GitHub Copilot

将上下文附加到聊天

为了使您的聊天提示更具体,您可以将上下文添加到您的聊天消息中。您现在可以将更多类型的上下文附加到聊天消息,例如工作区符号。以前,您使用 '#' 符号引用文件,或者使用当前选择。现在,您可以通过选择聊天视图输入字段中的 📎 图标,或键入 ⌘/(Windows、Linux Ctrl+/ 将上下文附加到聊天消息。

提示:使用向右箭头键在后台快速附加上下文,同时保持上下文选择器打开。当您在编辑器中时,您也可以右键单击选择并选择Copilot > 将选择添加到聊天

使用 Bing 搜索和企业知识库提问

VS Code 中的 GitHub Copilot Enterprise 用户现在可以提出问题,这些问题会通过来自网页结果和您企业的 知识库 的上下文进行丰富。要尝试此功能,请安装最新的 Copilot 聊天预发布版。

在聊天视图中,您可以提出类似于 @github What is the latest LTS of Node.js? #web 这样的问题,以利用网络搜索。Copilot 引用的任何搜索结果都会显示在聊天回复的“已使用参考”部分。

Web search results in Copilot Chat

您也可以直接从 VS Code 中询问有关您企业知识库的问题,这些知识库是包含文档的 Markdown 存储库的集合。只需键入 @github #kb 即可从可用的知识库中进行选择。类似地,Copilot 引用的任何知识库片段都会显示在聊天回复的“已使用参考”部分。

这使 Copilot 企业用户能够通过使用现有的聊天变量(例如 #file#selection)将搜索结果和内部文档与编辑器上下文结合起来。请试用它并将您的反馈发送至 https://github.com/microsoft/vscode-copilot-release!

聊天代码块中的 IntelliSense

我们现在支持在 Copilot 生成的代码块中使用基本的 IntelliSense。这使您能够使用您可能已经在编辑器中使用的许多相同的 IntelliSense 工具,并可以帮助您更好地理解生成的代码。

Hover IntelliSense in Copilot chat code block

支持的 IntelliSense 功能包括

  • 通过使用 ctrl click / cmd clickF12 转到定义
  • 悬停
  • 转到实现
  • 转到类型定义

IntelliSense 甚至可以与 @workspace 一起使用,以了解 Copilot 响应中使用的任何工作区符号。

TypeScript、JavaScript、HTML 和 CSS 代码块的 IntelliSense 功能开箱即用。要获得其他语言支持,请尝试安装该语言的扩展,尽管并非所有语言扩展都已支持代码块 IntelliSense。请为尚未支持此功能的任何语言提交功能请求。

我们通过为文件名和符号添加链接来改进聊天回复。通过选择这些链接,您可以在编辑器中导航到相应的文件或符号。

Clickable links for symbols used with /explain

Clickable file and symbol links for an @workspace question

在内联聊天和聊天视图之间漫游活动聊天

您现在可以将已完成或仍在活动的聊天请求从内联聊天移动到聊天视图。您可能使用此功能来清理内联聊天并将对话移动到更持久的位置。要移动请求,请选择聊天输入框旁边的聊天图标。

Move a chat conversation from inline chat to the Chat view

自动重命名建议

如果您使用 Copilot Chat 扩展,那么当您重命名符号时,Copilot 提供的重命名建议现在会自动触发。您可以使用设置 github.copilot.renameSuggestions.triggerAutomatically 关闭此功能。

Python

测试错误修复

使用 Python 测试重写时使用 pytest 的体验得到了改进,以便更好地支持在 VS Code 工作区根目录相邻时设置 pytest 的 cwd,以及在测试资源管理器中显示参数化测试(即使函数名称在不同的类中重复)。

此外,我们通过将系统配置脚本路径添加到 PATH 中来减少一些测试发现失败的情况,以便为测试执行启用 shell。

实验性:带有 IntelliSense 和语法高亮的 Python 本机 REPL

您现在可以在配备了 IntelliSense 和语法高亮等功能的类似编辑器的 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 拉取请求和问题

GitHub 拉取请求 扩展有了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。查看扩展的 0.90.0 版本的变更日志 以了解其他亮点。

VS Code 语音

我们为 VS Code 语音 扩展添加了对文本到语音功能的支持。可以启用新设置 accessibility.voice.autoSynthesize 以自动朗读 Copilot Chat 响应,前提是语音也用作输入。

请注意输入字段中的麦克风图标如何变化,表示文本正在被朗读。要中断合成,请选择图标或按 Escape

每个聊天回复还显示一个新的扬声器图标,以便您可以选择性地朗读回复。

Text to Speech for a Chat Response

您可以通过现有的 accessibility.voice.speechLanguage 设置更改用于文本到语音的语言。

预览功能

VS Code 原生 PowerShell IntelliSense

除了若干可靠性改进之外,我们还对终端中的 PowerShell IntelliSense 做出了以下更改

  • 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

yo code 扩展生成器(用于 TypeScriptWeb)现在可以选择使用 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 命令的按钮或其他类型的內容来回复用户请求。

Chat Participant example in the Chat view

语言模型

语言模型 API 使您能够访问 Copilot 的聊天模型,例如 gpt-3.5 和 gpt-4。此 API 可用于聊天参与者,也可用于丰富其他功能。该 API 是围绕 LanguageModelChat 对象构建的,这些对象用于聊天请求和计量令牌。

访问聊天对象的唯一方式是 vscode.lm.selectChatModels 函数。该函数接受一个选择器,以缩小聊天模型的不同属性范围,例如按供应商、系列、版本或标识符。这些值相对自由格式,必须在提供它们的扩展的文档中查找。目前,只有 Copilot Chat 扩展贡献了聊天模型。它使用 copilot 供应商,当前的系列是 gpt-3.5-turbogpt-4,但可能会发生变化。

该代码片段展示了如何从 copilot 供应商中选择所有聊天模型。

const models = await vscode.lm.selectChatModels({
  vendor: 'copilot'
});

if (models.length === 0) {
  // no models available
  return;
}

调用 selectChatModels 时有两点非常重要

  1. 如果没有任何模型可用,该函数将返回一个数组,扩展必须处理这种情况。
  2. 在扩展可以使用 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,使能够基于每个测试归属测试覆盖率。这使用户能够看到哪些测试运行了哪些代码,从而过滤编辑器中显示的覆盖率和**测试覆盖率**视图中显示的覆盖率。查看 vscode#212196 以获取更多信息和更新。

悬停详细程度

在最后一个里程碑中,提出了一个新的 API,用于提供可以增加或减少详细程度的悬停。在本里程碑中,API 已更改,因此 HoverVerbosityRequest 使用 verbosityDelta 来指示悬停详细程度的相对增加或减少。以前,HoverVerbosityRequest 使用枚举 HoverVerbosityAction 来指示是否应增加或减少详细程度。

工程

跟踪启动时的内存效率

我们每天在 Windows、macOS 和 Linux 上测量 VS Code 预览版的启动性能。我们主要关注的是打开文本文件之前的启动速度。

本月,我们添加了另一个指标,我们计划对其进行改进以使启动速度更快:我们消耗了多少内存以及其中多少内存最终被 V8 回收。如果我们可以降低这个数字,启动时间将受到 V8 垃圾回收运行的影响更小。

Memory consumption statistics for VS Code

Electron 29 更新

在本里程碑中,我们正在将 Electron 29 更新推广给稳定版用户。此更新附带 Chromium 122.0.6261.156 和 Node.js 20.9.0。我们要感谢所有在预览版版本上进行自托管并提供早期反馈的人。

值得注意的修复

  • 212386 本地历史记录:不保留以前删除文件的条目
  • 213645 辅助窗口在 Firefox 中无法正常工作
  • vscode-js-debug#2000/2002 JavaScript 调试器更快,尤其是在处理源映射重命名方面

感谢

最后但并非最不重要的是,对 VS Code 贡献者表示衷心的感谢!

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-eslint 的贡献

vscode-extension-samples 的贡献

vscode-generator-code 的贡献

vscode-hexeditor 的贡献

vscode-languageserver-node 的贡献

vscode-mypy 的贡献

vscode-remote-try-dotnet 的贡献

language-server-protocol 的贡献

monaco-editor 的贡献