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 上的更新Insiders:想尽快尝试新功能吗?您可以下载每晚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.focusNextInput, workbench.scm.action.focusPreviousInput
  • 聚焦于存储库内的下一个或上一个资源组:workbench.scm.action.focusNextResourceGroup, workbench.scm.action.focusPreviousResourceGroup

Notebook

在单元格选择中查找

在笔记本中,您现在可以使用“查找”控件在选定单元格的特定范围内进行搜索。

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 > 添加选区到聊天

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

VS Code 中的 GitHub Copilot Enterprise 用户现在可以提出问题,并辅以来自 Web 结果和企业知识库的上下文。要试用此功能,请安装 Copilot Chat 的最新预发布版本。

在聊天视图中,您可以询问诸如 @github Node.js 的最新 LTS 版本是什么? #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/issues

聊天代码块中的 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 Testing Rewrite 时,pytest 的体验得到了改进,更好地支持在 pytest 的 cwd 邻近 VS Code 工作区根目录时进行设置,并支持在函数名在类之间重复时在测试资源管理器中显示参数化测试。

此外,我们通过将系统配置脚本路径添加到 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 Pull Requests 扩展取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。查看该扩展 0.90.0 版本的更新日志,了解其他亮点。

VS Code Speech

我们为 VS Code Speech 扩展添加了文本转语音功能的支持。启用新设置 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 测试版博客文章迭代计划

要开始使用 TypeScript 5.5 测试版,请安装 TypeScript Nightly 扩展。请分享反馈,并让我们知道您在使用 TypeScript 5.5 时是否遇到任何错误。

Web 版问题报告器

我们改进了 VS Code for the Web 中的问题报告流程,以匹配用户目前在桌面版上所拥有的体验。选择 帮助:报告问题 会在一个新窗口中打开问题报告页面,用户可以在其中选择错误类型、来源和扩展(如有必要)。创建 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 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 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,允许按测试归因测试覆盖率。这让用户可以看到哪些测试运行了哪些代码,并过滤在编辑器和 测试覆盖率 视图中显示的覆盖率。查看 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 的贡献

© . This site is unofficial and not affiliated with Microsoft.