🚀 在 VS Code 中

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 月版。此版本包含许多更新,我们希望您会喜欢。以下是一些主要亮点:

如果您想在线阅读这些发行说明,请访问 Updates 上的code.visualstudio.com内测人员: 想尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。

辅助功能

从辅助功能帮助对话框设置快捷键

辅助功能帮助对话框为您提供了功能或视图的重要命令概览。当命令缺少快捷键分配时,您现在可以从辅助功能帮助对话框中使用 ⌥K(Windows、Linux Alt+K配置它。

实验性功能:信号延迟设置

当启用 Debounce position changes 设置时,您可以使用 Signal options delays 设置自定义各种辅助功能信号的防抖时间。

工作台

编辑器标签多选

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

始终显示编辑器操作

我们正在引入 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 存储库中的示例扩展。

终端

⚠️ 移除 canvas 渲染器

canvas 渲染器在 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 Chat。

在聊天视图中,您可以提出诸如 @github What is the latest LTS of Node.js? #web 之类的问题以利用网络搜索。Copilot 引用的任何搜索结果都将显示在聊天回复的 Used References 部分中。

Web search results in Copilot Chat

您还可以直接从 VS Code 询问有关您企业的知识库的问题,这些知识库是包含文档的 Markdown 存储库的集合。只需键入 @github #kb 即可从您可用的知识库中选择。同样,Copilot 引用的任何知识库代码段都将显示在聊天回复的 Used References 部分中。

这使 Copilot Enterprise 用户可以通过使用现有的聊天变量(例如 #file#selection)将搜索结果和内部文档与编辑器上下文相结合。请试用它,并在 https://github.com/microsoft/vscode-copilot-release 上与我们分享您的反馈!

聊天代码块中的 IntelliSense

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

Hover IntelliSense in Copilot chat code block

支持的 IntelliSense 功能包括

  • 通过使用 ctrl 单击 / cmd 单击F12 转到定义
  • 悬停提示
  • 转到实现
  • 转到类型定义

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 的体验得到了改进,以提供更好的支持,以便在 pytest 的 cwd 与 VS Code 工作区根目录相邻时进行设置,并在跨类重复函数名称时在测试资源管理器上显示参数化测试。

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

实验性功能:带有 Intellisense 和语法高亮的 Python Native REPL

您现在可以在类似编辑器的 REPL 环境中运行您的 Python 代码,该环境配备了 Intellisense 和语法高亮等功能,以提高与 REPL 交互的效率。要启用此功能,请在您的 settings.json 文件中设置 "python.REPL.sendToNativeREPL": true。这将在 Shift+Enter运行选定内容/行中在 Python Native REPL 中执行代码。

您可以通过在您的 settings.json 中设置 "python.REPL.sendToNativeREPL": false 来选择使用终端内 Python REPL(>>>)。此外,如果您在 settings.json 文件中添加设置 "interactiveWindow.executeWithShiftEnter": false,则 Python Native REPL 将在 Enter 上智能执行,类似于 Python 的原始交互式解释器。

GitHub Pull Requests 和 Issues

GitHub Pull Requests 扩展上取得了更多进展,该扩展使您可以处理、创建和管理拉取请求和问题。查看扩展的 0.90.0 版本的更新日志,了解其他亮点。

VS Code 语音

我们为 VS Code 语音扩展添加了对文本到语音功能的支持。可以启用新的设置 accessibility.voice.autoSynthesize 以在语音也被用作输入时自动大声朗读 Copilot 聊天回复。

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

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

Text to Speech for a Chat Response

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

预览功能

PowerShell 的 VS Code 原生 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 版问题报告器

我们改进了 Web 版 VS Code 中的问题报告流程,使其与用户当前在桌面版上拥有的流程相匹配。选择帮助:报告问题会在新窗口中打开问题报告器页面,用户可以在其中选择错误类型、来源和扩展(如果需要)。扩展信息、系统信息以及更多内容会自动附加到在 GitHub 中创建的问题。

此功能当前在此版本中默认禁用,但请通过启用 issueReporter.experimental.webReporter 设置分享您对此功能的反馈。

扩展创作

为扩展使用 esbuild

用于 TypeScriptWebyo 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 聊天,该参与者可以在聊天输入字段中使用 @ 调用。参与者可以使用 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 Apps 扩展 GitHub Copilot

也可以通过贡献 GitHub App 来扩展 GitHub Copilot。此 GitHub App 可以在聊天视图中贡献一个聊天参与者,您可以使用 @ 调用该参与者。GitHub App 由服务支持,并且适用于所有 GitHub Copilot 表面,例如 github.com、Visual Studio 或 VS Code。GitHub Apps 没有对 VS Code API 的完全访问权限。要通过 GitHub App 扩展 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 来表示是否应增加或减少详细程度。

工程

跟踪启动时的内存效率

我们每天测量 Windows、macOS 和 Linux 上 VS Code insiders 版本的启动性能。我们主要关注的是启动速度,直到打开文本文件为止。

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

Memory consumption statistics for VS Code

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 的贡献者。

问题跟踪

对我们问题跟踪的贡献

拉取请求

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 的贡献