2024年4月(版本1.89)

更新 1.89.1: 本次更新解决了这些问题

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


欢迎来到2024年4月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:

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

可访问性

进度可访问性信号

设置项 accessibility.signals.progress 使屏幕阅读器用户能够在用户界面中任何显示进度条的地方听到进度提示。信号在三秒后播放,然后每五秒循环一次,直到进度条完成。信号可能播放的示例包括:搜索工作区时、等待聊天响应时、笔记本单元格运行时等。

改进的编辑器可访问性信号

现在有单独的可访问性信号,用于指示某行是否有错误或警告,或者光标是否位于错误或警告上。

我们支持在编辑器中分别自定义在行和列之间导航时的辅助功能信号的延迟。此外,aria警报信号在播放前的延迟比音频提示信号更长。

当建议控件显示时,内联建议不再触发可访问性信号。

可访问视图

可访问视图 (⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)) 使屏幕阅读器用户能够检查工作台功能。

终端改进

现在,当您在终端可访问视图中导航到下一个(⌥↓ (Windows, Linux Alt+Down))或上一个(⌥↑ (Windows, Linux Alt+Up))命令时,您可以听到当前命令是否失败。此功能可以通过设置 accessibility.signals.terminalCommandFailed 来切换。

当从启用了 shell 集成的终端打开此视图时,VS Code 会提示终端命令行以提供更好的体验。

聊天代码块导航

当您处于聊天响应的可访问视图中时,您现在可以在下一个(⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown))和上一个(⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp))代码块之间导航。

评论视图

当安装了提供评论的扩展并且评论视图处于焦点时,您可以在无障碍视图中检查和导航视图中的评论。也可以在无障碍视图中执行评论上可用的扩展提供的操作。

工作台

语言模型使用报告

对于使用语言模型的扩展,您现在可以在扩展编辑器和运行时扩展编辑器中跟踪它们的语言模型使用情况。例如,您可以查看语言模型请求的数量,如下面的截图中展示的Copilot Chat扩展所示:

Copilot Chat扩展的运行时状态截图,显示了语言模型请求的数量。

本地工作区扩展

本地工作区扩展,首次在VS Code 1.88版本中引入,现已全面可用。您现在可以直接在工作区中包含一个扩展,并仅为该工作区安装它。此功能旨在满足您特定的工作区需求,并提供更加定制化的开发体验。

要使用此功能,您需要将扩展放在工作区内的.vscode/extensions文件夹中。VS Code 随后会在扩展视图的工作区推荐部分显示此扩展,用户可以从那里安装它。VS Code 仅会为该工作区安装此扩展。本地工作区扩展要求用户在安装和运行此扩展之前信任工作区。

例如,考虑VS Code 仓库中的vscode-selfhost-test-provider扩展。此扩展插件提供了测试功能,使贡献者能够直接在工作区中查看和运行测试。以下截图显示了扩展视图的工作区推荐部分中的vscode-selfhost-test-provider扩展及其安装能力。

截图显示在资源管理器视图中的.vscode文件夹中可用的本地工作区扩展。

请注意,您应该将解压后的扩展包含在.vscode/extensions文件夹中,而不是VSIX文件。您也可以仅包含扩展的源代码,并将其作为工作区设置的一部分进行构建。

快速打开中的自定义编辑器标签

上个月,我们介绍了自定义标签,它允许您个性化编辑器标签的标签。此功能旨在帮助您更轻松地区分具有相同名称的文件标签,例如index.tsx文件。

在此基础上,我们已将自定义标签的使用扩展到了快速打开(⌘P (Windows, Linux Ctrl+P))。现在,您可以使用您创建的自定义标签来搜索文件,使文件导航更加直观。

截图展示了在快速打开中使用自定义标签来区分多个'index.jsx'文件。

自定义快捷键

我们使得自定义用户界面操作的键绑定变得更加简单。在工作台中右键点击任何操作项,然后选择自定义键绑定。如果操作有when子句,它会自动包含在内,使得按照你的需求设置键绑定变得更加容易。

在树中查找的快捷键

我们解决了一个问题,即树控件的查找控件经常被无意中打开。例如,当查找控件出现在资源管理器视图中而不是在编辑器中搜索时。

为了减少这些意外激活,我们已经将树控件中打开查找控件的默认键绑定更改为 ⌥⌘F (Windows, Linux Ctrl+Alt+F)。如果您更喜欢之前的设置,可以使用键盘快捷键编辑器轻松恢复到 list.find 命令的原始键绑定。

自动检测系统颜色模式改进

如果您希望您的主题跟随系统的颜色模式,您可以通过启用设置 window.autoDetectColorScheme 来实现这一点。

启用后,当前主题在暗模式下由workbench.preferredDarkColorTheme设置定义,在亮模式下由workbench.preferredLightColorTheme设置定义。

在这种情况下,workbench.colorTheme 设置将不再被考虑。它仅在 window.autoDetectColorScheme 关闭时使用。

在这个里程碑中,新增的功能是主题选择对话框(首选项:颜色主题 命令)现在能够识别系统的颜色模式。请注意,当系统处于暗模式时,主题选择仅显示暗色主题:

截图显示了为暗模式配置主题的主题选择对话框。

对话框还有一个新按钮,可以直接带您到window.autoDetectColorScheme设置:

截图显示了主题选择对话框,突出显示了配置autoDetectColorScheme设置的按钮。

在评论控件的输入编辑器中,粘贴链接的行为与在Markdown文件中粘贴链接的行为相同。会显示粘贴选项,您可以选择粘贴Markdown链接,而不是您复制的原始链接。

评论控件的截图,显示粘贴链接的上下文菜单。

源代码控制

切换分支时保存/恢复打开的编辑器

在这个里程碑中,我们解决了一个长期存在的功能请求,即在切换源代码控制分支时保存和恢复编辑器。使用scm.workingSets.enabled设置来启用此功能。

要在首次切换到分支时控制打开的编辑器,可以使用scm.workingSets.default设置。您可以选择没有打开的编辑器(empty),或者使用当前打开的编辑器(current,默认值)。

用于查看更改的专用命令

为了在多文件差异编辑器中更容易查看特定类型的更改,我们在命令面板中添加了一组新命令:Git: 查看暂存更改Git: 查看更改Git: 查看未跟踪更改

笔记本

最小错误渲染器

您可以使用设置notebook.output.minimalErrorRendering来为笔记本错误渲染器使用新的布局。这个新布局只显示错误和消息,以及一个控件来展开完整的错误堆栈。

禁用大型笔记本的备份

为了减少将文件写入磁盘所花费的时间,现在已对大笔记本文件禁用定期文件备份。可以通过设置notebook.backup.sizeLimit来调整此限制。我们还在试验一个选项,以避免在使用notebook.experimental.remoteSave保存笔记本文件时阻塞渲染器,从而可以在不影响性能的情况下进行自动保存。

修复大纲/粘性滚动性能回归问题

在过去的几个月里,我们收到了关于笔记本编辑器性能退化的反馈。这些退化难以精确定位且不易复现。感谢社区持续提供日志和反馈,我们能够确定这些退化是由于我们在添加新功能时引入的大纲和粘性滚动功能引起的。这些问题已在此次发布中修复。

我们感谢社区的反馈和耐心,我们将继续改进Notebook Editor的性能。如果您继续遇到性能问题,请不要犹豫,在VS Code repo中提交一个新问题。

快速搜索功能使您能够快速在工作区文件中执行文本搜索。快速搜索不再处于实验阶段,因此请尝试使用命令面板中的搜索:快速搜索命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))!✨🔍

主题: Night Owl Light (在 vscode.dev 上预览)

请注意,所有快速搜索命令和设置在其标识符中不再包含“experimental”关键字。例如,命令ID workbench.action.experimental.quickTextSearch 变为 workbench.action.quickTextSearch。如果您有使用这些旧ID的设置或键绑定,这可能与您相关。

搜索树递归扩展

我们有一个新的上下文菜单选项,使您能够在搜索树中递归打开选定的树节点。

主题: Night Owl Light (在 vscode.dev 上预览)

终端

默认启用的Git Bash shell集成

Git Bash 的 Shell 集成现已自动启用。这为 Git Bash 带来了许多功能,例如命令导航粘性滚动快速修复等。

配置中键点击以粘贴

在大多数Linux发行版中,中键点击会粘贴选中的内容。现在,通过将terminal.integrated.middleClickBehavior配置为paste,可以在其他操作系统上启用类似的行为,这会在中键点击时粘贴常规剪贴板的内容。

通过OSC 8 转义序列创建的ANSI超链接以前仅支持httphttps协议,但现在可以与任何协议一起使用。默认情况下,出于安全原因,只有使用filehttphttpsmailtovscodevscode-insiders协议的链接会被激活,但您可以通过terminal.integrated.allowedLinkSchemes设置添加更多协议。

终端的新图标选择器

从终端选项卡的上下文菜单中选择更改图标现在会打开为配置文件构建的新图标选择器:

截图显示新的图标选择器,展示了图标的预览和ID以及一个过滤框

主题: Sapphire (在 vscode.dev 上预览)

支持窗口大小报告

终端现在响应以下转义序列请求:

  • CSI 14 t 用于报告终端的窗口大小(以像素为单位)
  • CSI 16 t 用于报告终端的单元格大小(以像素为单位)
  • CSI 18 t 用于报告终端的窗口大小(以字符为单位)

⚠️ 弃用 canvas 渲染器

终端具有三种不同的渲染器:DOM渲染器、WebGL渲染器和canvas渲染器。我们一直想要移除canvas渲染器,但由于DOM渲染器的性能不可接受以及WebKit未实现webgl2,我们被阻止了。现在这两个问题都已经解决了!

在这个版本中,我们从回退链中移除了画布渲染器,因此它仅在terminal.integrated.gpuAcceleration设置显式设置为"canvas"时启用。我们计划在下一个版本中完全移除画布渲染器。如果您在terminal.integrated.gpuAcceleration设置为"on""off"时遇到问题,请告知我们。

调试

JavaScript 调试器

JavaScript 调试器现在会自动查找出现在 node_modules/.bin 文件夹中的二进制文件,这些文件位于 runtimeExecutable 配置中。现在,它会自动按名称解析它们。

请注意,在以下示例中,您可以仅引用mocha,而无需指定二进制文件的完整路径。

{
	"name": "Run Tests",
	"type": "node",
	"request": "launch",
-	"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/mocha",
-	"windows": {
-		"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/mocha.cmd"
-	},
+	"runtimeExecutable": "mocha",
}

语言

Markdown路径补全中的图像预览

VS Code 内置的 Markdown 工具为您的 Markdown 中的链接和图像提供了路径补全功能。当补全图像或视频文件的路径时,我们现在直接在补全详情中显示一个小预览。这可以帮助您更轻松地找到所需的图像或视频。

截图显示Markdown路径补全中的图像预览

悬停以预览Markdown中的图片和视频

想要在不打开完整的Markdown预览的情况下快速预览Markdown中的图片或视频吗?现在你可以将鼠标悬停在图片或视频路径上,查看其小预览:

截图显示悬停在图像路径上以预览它

改进的Markdown标题重命名

你知道吗,VS Code 内置的 Markdown 支持允许你使用 F2 重命名标题?这很有用,因为它还会自动更新所有指向该标题的链接。在这个版本中,我们改进了在 Markdown 文件中有重复标题时的重命名处理。

考虑Markdown文件:

# Readme
- [Example 1](#_example)
- [Example 2](#_example-1)

## Example
...

## Example
...

两个## Example标题具有相同的文本,但可以通过使用唯一的ID(#example#example-1)分别链接到每个标题。以前,如果您将第一个## Example标题重命名为## First Example#example链接将正确更改为#first-example,但#example-1链接不会更改。然而,在重命名后,#example-1不再是一个有效的链接,因为不再有重复的## Example标题。

我们现在正确处理这种情况。例如,如果您将上述文档中的第一个## Example标题重命名为## First Example,新文档将是:

# Readme
- [Example 1](#_first-example)
- [Example 2](#_example)

## First Example
...

## Example
...

请注意,两个链接现在都已自动更新,因此它们都保持有效!

远程开发

Remote Development extensions 允许您使用 Dev Container、通过 SSH 连接的远程机器或 Remote Tunnels,或者 Windows Subsystem for Linux (WSL) 作为全功能的开发环境。

亮点包括:

  • 通过SSH连接到WSL

您可以在远程开发发布说明中了解更多关于这些功能的信息。

对扩展的贡献

GitHub Copilot

终端内联聊天

终端内联聊天现在是终端的默认体验。当终端处于焦点时,使用⌘I (Windows, Linux Ctrl+I)键盘快捷键来启动它。

截图显示在终端内联聊天中打开并聚焦一个输入框,类似于编辑器中的内联聊天

终端内联聊天使用@terminal聊天参与者,它具有关于集成终端的shell及其内容的上下文。

截图显示你可以问复杂的问题,比如“列出src目录中最大的5个文件”

一旦建议了一个命令,使用 ⌘Enter (Windows, Linux Ctrl+Enter) 在终端中运行该命令,或使用 ⌥Enter (Windows, Linux Alt+Enter) 将命令插入终端。在运行命令之前,还可以直接在 Copilot 的响应中编辑命令(目前在 Windows 和 Linux 上是 Ctrl+down, Tab, Tab,在 macOS 上是 Cmd+down, Tab, Tab)。

截图显示复杂查询因操作系统和shell而异

Copilot 驱动的重命名建议按钮

现在可以通过使用重命名控件中的星形图标来触发由Copilot驱动的重命名建议。

内容排除

GitHub Copilot 内容排除功能现在已在 Copilot Chat 中支持所有 Copilot for Business 和 Copilot Enterprise 客户。有关配置内容排除的信息可以在 GitHub Docs 上找到。

当文件被内容排除时,Copilot Chat 无法查看文件的内容或路径,并且不会在生成 LLM 建议时使用该文件。

截图显示在面板聊天中已排除的文件,显示关于建议质量下降的警告

截图显示了一个在内联聊天中被排除的文件,显示了一个错误,即无法使用内联聊天

预览:在笔记本编辑器中生成

我们现在支持在笔记本编辑器中自动激活内联聊天的情况下插入新单元格。当notebook.experimental.generate设置设置为true时,我们会在笔记本工具栏和单元格之间的插入工具栏上显示一个生成按钮。当焦点位于笔记本列表或单元格容器上时,也可以通过按下macOS上的Cmd+I(或Windows/Linux上的Ctrl+I)来触发此功能。此功能可以帮助简化在语言模型的帮助下在新单元格中生成代码的过程。

Python

"实现所有继承的抽象类"代码操作

使用Pylance时,处理抽象类现在变得更加容易。当定义一个继承自抽象类的新类时,您现在可以使用实现所有继承的抽象类代码操作来自动实现父类中的所有抽象方法和属性:

主题: Catppuccin Macchiato (在 vscode.dev 上预览)

新的自动缩进设置

以前,Pylance的自动缩进行为是通过editor.formatOnType设置来控制的,如果你想禁用自动缩进,但启用其他支持工具的格式输入,这曾经是有问题的。为了解决这个问题,Pylance有了自己的设置来控制其自动缩进行为:python.analysis.autoIndent,默认情况下是启用的。

截图显示Python分析自动缩进设置,用于控制Pylance的自动缩进

Debugpy 从 Python 扩展中移除,转而支持 Python 调试器扩展

现在调试功能由Python Debugger扩展处理,我们已经从Python扩展中移除了debugpy。

作为此更改的一部分,您在launch.json文件中指定的"type": "python""type": "debugpy"都将引用Python调试器扩展的路径,因此无需对launch.json文件进行任何更改即可有效运行和调试。展望未来,我们建议使用"type": "debugpy",因为这直接对应于Python调试器扩展。

测试期间现在可以禁用Socket

您现在可以在Python测试重写中通过测试UI运行禁用套接字的测试。这是通过在Python扩展和测试运行子进程之间的通信中切换到使用命名管道来实现的。

次要测试错误已更新

测试视图现在正确显示使用嵌套类中的unittest和参数化测试的testscenarios项目。此外,测试资源管理器现在能够处理具有符号链接的工作空间中的测试,特别是工作空间根目录是符号链接路径的子目录的情况,这在WSL场景中特别有用。

使用Pylance的性能改进

Pylance团队一直在收到反馈,称Pylance在过去的几个版本中性能有所下降。我们已经在内存消耗和索引性能方面进行了几次较小的改进,以解决各种报告的问题。然而,对于那些可能仍然遇到Pylance性能问题的用户,我们恳请通过命令面板中的Pylance: 报告问题命令提交问题,最好附上日志、代码示例和/或工作环境中安装的包。

十六进制编辑器

十六进制编辑器现在除了其长期存在的“替换”模式外,还有一个插入模式。插入模式允许在文件内部和末尾添加新字节,并且可以使用Insert键或状态栏进行切换。

十六进制编辑器现在还在状态栏中显示当前悬停的字节。

GitHub 拉取请求

GitHub Pull Requests扩展方面取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。新功能包括:

  • 当通过隐藏设置"githubPullRequests.experimentalUpdateBranchWithGitHub": true启用时,可以为未检出的PR提供实验性的冲突解决功能。此功能使您能够在本地不检出分支的情况下解决PR中的冲突。该功能仍处于实验阶段,并非在所有情况下都有效。
  • 当从拉取请求和问题视图中触发打开辅助功能帮助时,会显示一个辅助功能帮助对话框。
  • 当有足够空间时,所有审查操作按钮都会显示在活动拉取请求的侧边栏视图中。

查看扩展的0.88.0版本更新日志以了解其他亮点。

TypeScript

文件监视由 VS Code 核心处理

一个新的实验性设置 typescript.tsserver.experimental.useVsCodeWatcher 控制 TS 扩展是否使用 VS Code 的核心文件监视支持来满足文件监视需求。TS 广泛使用文件监视,通常使用他们自己基于 node.js 的实现。通过使用 VS Code 的文件监视器,监视应该更高效、更可靠,并且消耗更少的资源。我们计划在五月逐步为用户启用此功能,并监控回归情况。

预览功能

VS Code 原生的 PowerShell 智能感知

我们已经在终端内为PowerShell智能感知开发了一个原型,最近才有更多时间来完善它。这是它的样子:

目前,它在遇到-字符或按下ctrl+空格时触发。要启用此功能,请在您的settings.json文件中设置"terminal.integrated.shellIntegration.suggestEnabled": true(目前不会在设置UI中显示)。

这个功能还处于早期阶段,但我们非常希望听到您的反馈。我们计划的一些重要改进包括使其触发更加可靠(#211222),使建议更加一致,无论弹出窗口在哪里触发(#211364),以及尽可能使体验接近编辑器智能感知体验(#211076, #211194)。

假设你正在编写一些Markdown文档,突然意识到文档的某一部分实际上应该放在其他地方。于是,你将其复制并粘贴到另一个文件中。一切顺利,对吧?但如果复制的文本包含任何相对路径链接、引用链接或图片,那么这些链接现在可能会失效,你需要手动修复它们。这可能会非常麻烦,但幸运的是,新的“粘贴时更新链接”功能来帮忙了!

要启用此功能,只需设置 "markdown.experimental.updateLinksOnPaste": true。一旦启用,当你在当前编辑器中在Markdown文件之间复制和粘贴文本时,VS Code会自动修复所有相对路径链接、引用链接以及所有带有相对路径的图像/视频。

粘贴后,如果您意识到您想要插入您复制的确切文本,您可以使用粘贴控件切换回正常的复制/粘贴行为。

支持 TypeScript 5.5

我们现在支持TypeScript 5.5测试版。查看TypeScript 5.5测试版博客文章迭代计划以了解此版本的详细信息。

编辑器的亮点包括:

  • 正则表达式的语法检查。
  • 文件监视改进。

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

API

评论输入编辑器中语言功能的改进支持

在编写新评论时,VS Code 会创建一个简化的文本编辑器,该编辑器由 TextDocument 支持,就像 VS Code 中的主编辑器一样。在此次迭代中,我们在这些评论文本编辑器中启用了一些额外的 API 功能。这包括:

  • 支持工作区编辑。
  • 支持诊断。
  • 支持粘贴为提议的API。

评论文本文档可以通过具有comment方案的URI来识别。

我们期待看到使用这一新功能构建的扩展!

最终窗口活动API

window activity API 已经最终确定。此 API 提供了一个简单的附加 WindowState.active 布尔值,扩展程序可以使用它来确定窗口最近是否被交互过。

vscode.window.onDidChangeWindowState(e => console.log('Is the user active?', e.active));

提议的API

视图的可访问性帮助对话框

可以通过accessibilityHelpContent属性为任何扩展贡献的视图添加辅助功能帮助对话框。当焦点在视图中时,屏幕阅读器用户会听到打开对话框的提示(⌥F1 (Windows Alt+F1, Linux Shift+Alt+F1)),其中包含概述和有用的命令。

此API由GitHub Pull Request扩展的问题和PR视图使用。

语言模型和聊天API

语言模型命名空间(vscode.lm)导出了新的函数来获取语言模型信息并计算给定字符串的令牌数量。这些函数分别是getLanguageModelInformationcomputeTokenLength。你应该使用这些函数来构建在语言模型限制范围内的提示。

注意: 内联聊天现在由即将推出的聊天参与者API提供支持。这也意味着registerInteractiveEditorSessionProvider已被弃用,并将很快被移除。

更新的文档粘贴提案

我们继续迭代了文档粘贴提议的API。这个API使得扩展能够挂钩到文本文档中的复制/粘贴操作。

API的显著变化包括:

  • 一个新的resolveDocumentPasteEdit方法,用于在粘贴操作时填充编辑内容。如果计算编辑内容需要很长时间,则应使用此方法,因为它仅在需要应用粘贴编辑时调用。

  • 所有的粘贴操作现在都由DocumentDropOrPasteEditKind标识。这与现有的CodeActionKind非常相似,并用于粘贴操作的键绑定和设置中。

文档粘贴扩展示例包含了所有最新的API更改,因此您可以测试API。请务必分享对更改和整体API设计的反馈。

悬停详细程度

本次迭代中,我们添加了一个新的API来扩展/收缩悬停内容,称为editorHoverVerbosityLevel。它引入了一个名为VerboseHover的新类型,该类型有两个布尔字段:canIncreaseHoverVerbositycanDecreaseHoverVerbosity,用于指示悬停内容的详细程度是否可以增加或减少。如果其中一个字段设置为true,悬停内容将显示+-图标,这些图标可用于增加/减少悬停内容的详细程度。

提议的API还为provideHover方法引入了一个新的签名,该方法接受一个类型为HoverContext的额外参数。当用户发送悬停详细程度请求时,悬停上下文会填充之前的悬停信息,以及一个HoverVerbosityAction,该操作指示用户是希望增加还是减少详细程度。

preserveFocus 在扩展触发的测试运行中

有一个提案,关于在由扩展触发的测试运行请求中添加一个preserveFocus布尔值。以前,从扩展API触发的测试运行从未导致焦点移动到测试结果视图,这要求一些扩展重新发明轮子以保持用户体验的兼容性。这个新选项可以在TestRunRequest上设置,要求编辑器像从编辑器内部触发的运行一样移动焦点。

显著的修复

  • 209917 辅助窗口:恢复最大化状态(Linux, Windows)

感谢您

最后但同样重要的是,向VS Code的贡献者们表示衷心的感谢

问题跟踪

对我们问题跟踪的贡献:

拉取请求

vscode 的贡献:

vscode-css-languageservice 的贡献:

vscode-emmet-helper 的贡献:

vscode-eslint 的贡献:

vscode-hexeditor的贡献:

vscode-json-languageservice 的贡献:

vscode-languageserver-node的贡献:

vscode-python-debugger 的贡献:

vscode-vsce 的贡献:

language-server-protocol的贡献:

monaco-editor的贡献: