现已推出!了解 11 月的新功能和修复。

2021 年 8 月(1.60 版本)

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

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

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


欢迎使用 Visual Studio Code 的 2021 年 8 月版。此版本中有许多更新,我们希望您会喜欢,其中一些主要亮点包括

如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的 更新

加入我们的直播 在 9 月 2 日(星期四)太平洋时间上午 8 点(伦敦时间下午 4 点)参加 VS Code 团队的直播,观看此版本的新功能演示,并向我们实时提问。

内部人员: 想尽快试用新功能吗?您可以下载每晚的 内部人员 版本,并尽快试用最新更新。

工作台

自动语言检测

在上一个版本中,我们为未命名的文件引入了一项实验性功能,该功能会根据内容自动设置文件的语言模式。自动语言检测功能使用机器学习来猜测语言,并且机器学习模型完全在您的计算机本地运行。该模型由开源 ML 库 Tensorflow.js 提供支持,ML 模型来自 GitHub 用户 @yoeoGuesslang

此版本中,我们默认启用自动语言检测,并且还将检测范围扩大到包括没有文件扩展名的文件。在笔记本中,我们提供了一种使用语言选择器请求语言检测的简单方法。

我们添加此功能是因为我们发现 VS Code 的一些新用户不知道如何设置语言模式,也不知道这是使用 VS Code 的丰富功能集(语言颜色化和扩展建议)所必需的。使新用户能够快速查看 VS Code 可用的语言功能和扩展,有助于他们在编辑器上提升工作效率。

此外,将未命名的文本编辑器用作草稿板的高级用户不再需要显式设置语言模式,我们希望这将简化他们的工作流程。

以下是自动语言检测启用的一些有趣场景。

从网上抓取示例并将其粘贴到未命名的编辑器中

主题:Panda 主题

“管道到代码”语言检测(展示无扩展名文件的检测)

主题:Panda 主题

笔记本语言选择器中的自动检测选项

主题:Panda 主题

终端编辑器确认对话框

在关闭具有正在运行的子进程的终端编辑器时显示的对话框现在是终端编辑器专用的,并且不再提供“保存”终端的方式。

Terminal editor confirmation dialog

保持编辑器打开而不是在它们无法还原时关闭

以前,当编辑器在窗口重新加载或应用程序重新启动后无法还原时,编辑器会自动关闭,直到找到成功加载的编辑器。这种行为会导致令人沮丧的结果,因为精心创建的编辑器布局会因编辑器关闭而消失。

在此版本中,即使无法还原,曾经成功打开的编辑器也不会关闭。编辑器会指示问题并提供重试操作的选项

Keep editors open and offer to Try Again

设置编辑器中代码块的语法突出显示

设置描述中的 围栏代码块现在具有语法突出显示

Syntax highlighting of TypeScript code in the Settings editor

将设置编辑器打开到侧面

现在可以通过使用 openToSide 参数配置键绑定来在侧组中打开设置编辑器。

{
  "key": "cmd+,",
  "command": "workbench.action.openSettings",
  "args": {
    "openToSide": true
  }
}

这也适用于 workbench.action.openSettingsJson 命令。

编辑器

高性能括号对颜色化

编辑器现在支持本机括号对颜色化

Side by side comparison with bracket pair colorization on and off

可以通过设置 "editor.bracketPairColorization.enabled": true 来启用括号对颜色化。所有颜色都是可主题化的,最多可以配置六种颜色。

我们实现此功能是为了解决 CoenraadS 的著名 Bracket Pair Colorizer 扩展的性能问题。

现在,即使在大型文档中所做的更改也会立即反映出来

自动完成中的内联建议

当显示自动完成小部件时,内联建议现在可以扩展建议预览。如果自动完成小部件中选择的建议可以由内联完成提供程序扩展,则扩展将以斜体显示。按 Tab 一次仍然只会接受自动完成建议。第二次按 Tab 将接受内联建议。

此功能要求启用建议预览 ("editor.suggest.preview": true)。

更新的窥视视图

我们对窥视视图进行了视觉刷新,以与其他编辑器视图保持一致

Peek view for informational items

Peek view for warning items

Peek view for error items

Peek view for References view

终端

自定义渲染框图和块元素字符

当 GPU 加速开启 (terminal.integrated.gpuAcceleration) 时,框图和块元素字符现在使用像素完美的自定义字形,而不是使用字体。这意味着,例如,即使您在终端中设置行高或字母间距,绘制的框也不会有间隙。

Terminal glyph rendering before with gaps Terminal glyph rendering after without gaps

这是一个终端应用程序 Zenith 的示例,该示例显示了各部分周围的框图字符以及图表的块元素

Terminal rendering box characters and block elements

可以通过设置 "terminal.integrated.customGlyphs": false 来禁用此功能。

改进了某些字体的下划线渲染

终端中下划线的渲染方式存在一些历史问题,其中大部分问题已通过切换到 WebGL 渲染器(默认)来解决。但是有一个例外,即字体中的下划线字符在 Linux 上意外地绘制在单元格边界之下。

请注意下排的下划线是如何渲染在单元格下方的

The underscore was previously rendered 1 pixel below the cell's bounds

虽然这在大多数情况下都可以正常工作,但在底部行上会失败,因为它是在画布的边界之外绘制的。

我们现在通过检测此类字体并将下划线纹理向上移动到单元格的边界内来解决此问题。此解决方案也适用于画布渲染器,该渲染器以前不会显示任何行的下划线,因为它会裁剪这些行以避免重叠。

The underscore is now at the bottom of the cell's bounds

重新加载窗口后更快的重新连接

以前,在重新加载窗口时,可能需要长达 300 毫秒的时间来解析终端缓冲区的状态,并且还可能发生损坏。对于几个繁忙的终端,这会很快加起来!为了解决此问题,还原缓冲区的方法已从记录 pty 主机上大量最近的原始终端事件更改为在 pty 主机上维护无头终端前端并将所有数据写入其中。

此方法带来诸多好处

  • 可以微调要还原的回滚量。默认值现在为 100,这是速度和数据量之间的良好平衡。可以使用 terminal.integrated.persistentSessionScrollback 设置更改回滚量。
  • 感谢 xterm.js 的快速解析器,这应该对 CPU 使用率的影响最小,并减少 pty 主机上的整体内存使用量。
  • 现在可以显式还原终端模式,这可能会在以前错过并导致缓冲区损坏。
  • 不再需要重放代价高昂的调整大小事件,因为终端的缓冲区始终与其大小同步。
  • 由于还原速度相对较快,因此所有操作都在单个帧中处理。这意味着不会将宝贵的 CPU 时间浪费在渲染部分还原的终端上并进一步减慢速度。

此新实现的提速程度取决于许多因素,例如终端的数量、硬件、终端缓冲区大小以及终端中正在发生的事情。粗略估计还原完整终端缓冲区应该会产生大约 5-10 倍的提速。

我们还在 npm 上发布了新的 xterm-headless 包,您可以在自己的项目中使用它。

调试

在“监视”视图中设置值

现在可以使用上下文菜单中的设置值操作,在“监视”视图中设置监视表达式的值。

Shows WATCH view with the Set Value action selected in the context menu

调试扩展必须选择启用此功能才能使设置值可用。目前,JS-debug、C# 和 C++ 扩展支持此功能,但我们希望其他调试扩展也会很快跟进。

小的 UI 改进

  • VS Code 现在还可以检测“变量”视图、“监视”视图和调试悬停中的链接值。当变量的值是链接时,可以通过单击它来更轻松地访问该链接。

  • 当启动另一个已在运行的调试会话实例时,现在会出现一个模态确认对话框,以防止意外启动两个会话。

  • 现在单击编辑器断点槽中已禁用的断点会启用断点,而不是删除它。

  • 当调试会话处于活动状态时,运行到行操作现在在编辑器的断点槽上下文菜单中可用

新的设置

  • 如果您想避免在调试会话期间意外关闭窗口,可以启用新设置 debug.confirmOnExit。如果将其设置为 always,则在关闭窗口时会提示您确认是否要停止调试会话。

    Confirm quit while debugging

  • 新的设置 debug.console.acceptSuggestionOnEnter 控制是否应在调试控制台中按 Enter 键接受建议。Enter 也用于评估调试控制台中键入的内容,因此此选项使用户可以更好地控制按 Enter 键时发生的情况。

JavaScript 调试

旧的 Node 调试器已删除

VS Code 长期以来一直包含一个内置的 Node.js 调试器,并发布了一个单独的 Chrome 调试器。去年,我们为 Node.js 和 Chrome 引入了一个新的调试器,自 VS Code 1.47(2020 年 7 月)以来,它已成为默认设置,并提供“选择退出”选项。

在此版本中,旧的调试器已从产品中删除,并在 Marketplace 中标记为已弃用。如果您是大多数没有选择退出新的 JavaScript 调试器的 VS Code 用户之一,则对您没有任何影响。

如果您需要旧的调试器(例如,调试 Node.js 6 程序),您可以安装 [已弃用] Node Debug[已弃用] Debugger for Chrome 扩展,并分别使用 legacy-nodelegacy-chrome 启动类型。

改进了异步函数和 Node.js 内部的步进

您可以设置调试器的 skipFiles 以避免步入某些代码,包括 Node.js 内部,在围绕异步函数步进时通常会遇到这些代码。

但是,Node.js 在处理 “黑盒” 脚本时并不总是表现出正确的行为,因此我们在本次迭代中在调试器中引入了“合成黑盒”。这应该可以显著提高使用 Node.js 程序时的可靠性,尤其是在步入异步函数时。

在我们的下一个版本中,我们计划默认让调试器跳过 Node.js 内部。

安装程序

默认注册 VS Code 以支持的文件类型

Windows 11 引入了一个新的文件资源管理器上下文菜单,将打开方式放在菜单顶部,与打开分组在一起。此更新使查找所有可用编辑器和更改默认设置变得更加容易。

按照新的最佳实践,VS Code 的复选框注册 VS Code 作为关联文件类型的编辑器现在将在 Windows 安装期间默认选中。我们还审查了关联文件类型的列表,并将其扩展为包含更多常用文件类型。

Windows 11 上的 Microsoft Store

随着即将推出的 Windows 11,新的 Microsoft Store 可以支持更多传统的应用程序类型和安装程序。如果您已经通过 Windows Insider 计划测试 Windows 11,您现在可以通过在商店中搜索来安装最新版本的 VS Code。安装后,您将拥有与我们网站上的用户安装相同的 VS Code,并且更新将在应用程序内处理,就像今天一样。

笔记本

笔记本现在支持 Markdown 单元格之间的链接

您可以使用以下命令创建指向 Markdown 单元格中标题的链接

[Link text](#_header-slug)

header-slug 是标题的小写文本,其中任何空格或特殊字符都替换为 -。上面示例中的链接将转到标题 # Header Slug

处理大型输出时的性能改进

我们优化了在笔记本中处理大型输出的方式,以显著提高性能。

在后台,VS Code 使用 Uint8Arrays 将笔记本输出存储为二进制数据。以前,在扩展主机进程和渲染器进程之间传输输出数据时,数据首先转换为数字值数组,然后序列化为 JSON。

要了解为什么这对性能不利,请考虑一个输出文本的笔记本:Hello Code!。这在内部存储为 Uint8Array

new Uint8Array([72, 101, 108, 108, 111, 32, 67, 111, 100, 101, 33]);

该数据长 11 个字节。旧的实现方式会将二进制数据转换为 JSON 字符串

'[72,101,108,108,111,32,67,111,100,101,33]';

此字符串长 41 个字节,是原始数据的 3.5 倍以上!这是要传输的很多额外字节,并且接收器现在必须将该字符串解析为 JSON 才能将其转换回 Uint8Array。对于大小为数十 MB 的笔记本输出,此解析可能会成为严重的瓶颈。

使用新的实现方式,笔记本输出在传输时会保留为二进制数据。您可以在 拉取请求中阅读有关如何实现此功能的详细信息。

此修复显著提高了加载保存了大型输出的笔记本的速度,以及提高了笔记本在执行期间生成大型输出时的性能。

onNotebook 激活事件改进

当笔记本在工作区中打开时,VS Code 将发出 onNotebook:{type}onNotebook:* 事件,以便在侦听这些事件时可以激活笔记本扩展。以前,VS Code 会等待所有侦听这两个事件的扩展,然后才打开文件,但现在它只会等待特定笔记本的序列化程序注册。例如,当用户在新的工作区中打开 ipynb 文件时,将激活内置的 ipynb 序列化程序扩展,并立即打开该文件。同时,VS Code 会向所有其他扩展(例如,Jupyter、.NET Interactive 或 Julia 扩展)发出激活事件。其他扩展的激活不会减慢文件操作的速度,以确保快速打开笔记本。

笔记本布局自定义

您现在可以直接通过编辑器工具栏自定义笔记本布局设置。

Notebook layout customization actions available in the editor toolbar

语言功能

TypeScript 4.4

VS Code 现在包含 TypeScript 4.4。此更新带来了对许多新语言特性和改进的支持,包括 静态块新的严格性选项。它还添加了新的工具改进并修复了一些重要的错误。

您可以在 TypeScript 博客上阅读有关 TypeScript 4.4 的所有信息。

JavaScript 和 TypeScript 的内嵌提示

TypeScript 4.4 中最重要的新的工具特性是内嵌提示支持。内嵌提示会在源代码中添加额外的内联信息,以帮助您理解代码的作用。

例如,参数名称内嵌提示会显示函数调用中参数的名称

Parameter name inlay hints

这可以帮助您一目了然地理解每个参数的含义,这对于采用布尔标志或具有容易混淆的参数的函数尤其有用。

要启用参数名称提示,请设置 javascript.inlayHints.parameterNames.enabledtypescript.inlayHints.parameterNames.enabled 设置。有三个可能的值

  • none - 禁用参数内嵌提示。
  • literals - 仅显示文字(字符串、数字、布尔值)的内嵌提示。
  • all - 显示所有参数的内嵌提示。

此外,VS Code 还提供内嵌提示,用于显示 JavaScript 和 TypeScript 代码中的隐式类型信息。

变量类型内嵌提示显示没有显式类型注释的变量的类型。

设置 - javascript.inlayHints.variableTypes.enabledtypescript.inlayHints.variableTypes.enabled

Variable type inlay hints

属性类型内嵌提示显示没有显式类型注释的类属性的类型。

设置 - javascript.inlayHints.propertyDeclarationTypes.enabledtypescript.inlayHints.propertyDeclarationTypes.enabled

Property type inlay hints

参数类型提示显示隐式类型参数的类型。

设置 - javascript.inlayHints.parameterTypes.enabledtypescript.inlayHints.parameterTypes.enabled

Parameter type inlay hints

返回类型内嵌提示显示没有显式类型注释的函数的返回类型。

设置 - javascript.inlayHints.functionLikeReturnTypes.enabledtypescript.inlayHints.functionLikeReturnTypes.enabled

Return type inlay hints

我们计划继续改进内嵌提示,因此请务必 分享您对新功能的任何反馈

JavaScript 文件中的拼写建议

VS Code 现在可以帮助您捕获 JavaScript 文件中的简单拼写错误

Spelling suggestions in a plain JS files

仅当有相当高的把握认为它们是实际错误,而不仅仅是我们的 IntelliSense 引擎不理解的代码模式时,才会显示拼写建议。您可以在 添加此功能的 PR 中阅读有关此功能的更多详细信息。

您还可以通过设置禁用这些建议

"javascript.suggestionActions.enabled": false

要进行更全面的检查,请尝试在 JavaScript 代码中启用完整的语义检查。这不仅可以帮助捕获更多错误,还可以启用多个有用的快速修复。

typescript.tsserver.useSyntaxServer

新的 typescript.tsserver.useSyntaxServer 设置允许您控制 TypeScript 是否启动专用服务器来快速处理与语法相关的操作,例如计算代码折叠。它取代了现在已弃用的 typescript.tsserver.useSeparateSyntaxServer 设置。

可能的值为

  • auto - 生成一个完整的服务器和一个专用于语法操作的轻量级服务器。语法服务器用于加快代码折叠等语法操作的速度,并在项目加载时提供 IntelliSense。(默认)
  • always - 使用轻量级语法服务器处理所有 IntelliSense 操作。此语法服务器只能为打开的文件提供 IntelliSense。
  • never - 不使用专用语法服务器。使用单个服务器处理所有 IntelliSense 操作。

预览功能

锁定的编辑器组

随着编辑器区域中的终端的引入,我们收到了用户的反馈,他们对终端编辑器太容易或意外地被文件编辑器替换感到沮丧。默认情况下,文件总是会在活动编辑器组中打开,因此,即使终端处于活动状态,文件也会打开并隐藏终端。

锁定的编辑器组为此问题提供了一种新的处理方式,不仅适用于终端,也适用于任何编辑器。如果您打开了多个编辑器组,现在可以锁定它,可以使用新的命令之一或从 “...” 溢出菜单中进行锁定。

Lock Group action on the editor context menu

锁定的组的行为与未锁定的组不同

  • 新的编辑器不会在锁定的组中打开,除非用户明确将其移动到那里(例如,通过拖放)。
  • 如果编辑器跳过锁定的组打开,它将在最近使用的未锁定组中打开,或者在锁定组的旁边创建一个新组。
  • 编辑器组的锁定状态会持久化,并在重启时恢复。
  • 您也可以锁定空组,从而实现更稳定的编辑器布局。
  • 锁定的组在操作工具栏(右上角)中由锁定图标指示。

Locked editor group layout with lock icon

请参阅以下演示,了解锁定的编辑器组在操作中的行为。即使 Markdown 预览处于活动状态,新文件也会在左侧编辑器组中打开

为此功能添加的命令是

  • workbench.action.experimentalLockEditorGroup
  • workbench.action.experimentalUnlockEditorGroup
  • workbench.action.experimentalToggleEditorGroupLock

新的上下文键 activeEditorGroupLocked 可用于根据组的锁定状态有条件地绑定命令。

注意:相关的设置和命令是实验性的,直到我们完成锁定编辑器组的设计。我们希望您对这项新功能提供反馈,所以请不要犹豫报告问题

自动锁定编辑器组

在新的锁定编辑器组概念的基础上,新的 workbench.editor.experimentalAutoLockGroups 设置允许您选择在打开时应自动锁定组的编辑器。这仅适用于编辑器是在其他为空或新的组中第一个打开时。

默认情况下,终端被配置为使新组自动锁定。在下面的短视频中,即使终端处于活动状态,从终端选择的文件也会在左侧编辑器组中打开

如果您希望 Markdown 预览自动锁定组,您可以将 mainThreadWebview-markdown.preview: true 添加到 experimentalAutoLockGroups 设置中。

在接下来的里程碑中,我们将致力于改进设置 UX,以便能够选择编辑器而无需知道它们的标识符。相关的设置和命令是实验性的,直到我们完成锁定编辑器组的设计。再次,我们希望得到您的反馈

“按文件名搜索”快速选择中的引号支持

在此迭代中,我们添加了通过将搜索字符串放在引号中,从“按文件名搜索”快速选择中排除模糊搜索结果的功能(⌘P(Windows,Linux Ctrl+P)。

此功能发挥作用的场景

当查询只有几个字符时

如果您想减少结果的“混乱”

我们喜欢这种引号体验,它感觉很直观,因为大多数搜索引擎都使用类似的机制,但我们希望得到您的反馈。我们也在考虑问题 #131431 中讨论的其他方法。

对扩展的贡献

Jupyter

逐行运行

VS Code 现在支持 Jupyter 笔记本中的逐行运行功能。这是一种简单的调试模式,可让您逐行执行单元格的代码。要试用它,请确保已安装 ipykernel v6+ 作为您选择的内核,然后选择逐行运行按钮。

调试

还有使用 VS Code 的完整调试功能调试 Jupyter 笔记本的实验性支持。要试用它,请确保已安装 ipykernel v6+ 作为您选择的内核,设置 "jupyter.experimental.debugging": true,设置断点,然后选择调试单元格命令。

Jupyter 键映射

我们将 Jupyter 经典键绑定提取到单独的 Jupyter 键映射扩展中,如果您更喜欢使用 Marketplace 中的另一组笔记本键绑定,可以禁用它。

Python

改进的测试界面

感谢新的测试 APIPython 扩展改进了其测试功能。您现在可以享受更稳定的测试发现、导航和状态呈现体验,以及搜索测试、运行选定的测试、重新运行上次执行的测试等新功能!

Running tests with the new Python Test Explorer

从编辑器在终端中运行和调试 Python 文件

现在,您可以使用 Python 扩展直接从编辑器在终端中运行和调试 Python 文件。

GitHub 拉取请求和问题

现在可以使用GitHub 拉取请求和问题扩展中展开和折叠所有评论的强大功能。可以通过命令 GitHub 拉取请求:展开所有评论GitHub 拉取请求:折叠所有评论展开和折叠所有评论。还有一个设置 githubPullRequests.commentExpandState 来控制展开折叠状态。最后,您也可以从评论 UI 中折叠所有评论

Collapse all pull request comments button

要了解所有新功能和更新,您可以查看扩展的 0.30.0 版本的完整更新日志

扩展编写

Web 扩展

当 VS Code 在浏览器中运行时,扩展会加载到也在浏览器中运行的扩展主机中。“Web 扩展主机”受到浏览器的约束,扩展无法访问本地文件系统或平台功能。为了帮助扩展作者更新他们的扩展以支持在 VS Code for Web 中运行,现在有Web 扩展编写指南。在这里,您将了解哪种类型的扩展在 Web 上效果最佳、如何访问 VS Code API 以及如何使用虚拟文件系统。

除了 Web 扩展指南之外,yo code 扩展生成器现在有一个用于搭建 Web 扩展的选项,还包括对 @vscode/test-web 模块的支持,以从命令行测试 Web 扩展。

如果您还没有看到 Visual Studio Code for the Web 的实际应用,您可以在 GitHub 存储库的 <> 代码 选项卡中按 '.'(句点键),您将启动基于 Web 的 VS Code 版本来浏览和编辑源代码。

命令的短标题

命令贡献点允许扩展为命令定义 UI 属性,如标题、类别或图标。另一方面,菜单是显示命令的“位置”,菜单可以呈现命令的部分或全部 UI 属性。例如,某些菜单仅呈现图标,而其他菜单则呈现标题或类别加标题。作为扩展作者,很难提出一个对于全局和局部菜单都同样适用的命令标题。例如,命令面板可以显示比上下文菜单更多的单词。

为了允许使用不同的标题,有一个新的 shortTitle 属性。它允许命令根据 UI 提供较短的标题,例如,命令面板中的 笔记本:清除所有单元格输出 和笔记本工具栏中较短的 清除所有

应用程序主机已添加到环境命名空间

.env 命名空间现在包括应用程序主机 appHost 属性。appHost 允许扩展开发人员确定 VS Code 所在的托管环境。示例包括桌面、GitHub Codespaces、github.dev 和 vscode.dev。

用于笔记本渲染器的 RendererContext.workspace.isTrusted

传递给笔记本渲染器的上下文对象上的新 workspace.isTrusted 属性允许扩展作者检查当前工作区是否受信任。

import type { ActivationFunction } from 'vscode-notebook-renderer';

export const activate: ActivationFunction<void> = (ctx) => {
  return {
    renderOutputItem: (outputInfo, element) => {
      if (ctx.workspace.isTrusted) {
        // Render normally. Still take precautions to avoid script injection and
        // only enable as much functionality as your renderer needs.
      } else {
        // Only render safe content. Always make sure it has been properly sanitized.
      }
    }
  }
};

平台特定扩展

我们在平台特定扩展方面取得了进展,该功能允许扩展作者为不同的平台(Windows、macOS、Linux)创建单独的扩展版本。我们一直在与 Marketplace 团队合作开发此功能,并最终确定了解决方案。在这个里程碑中,我们开始了实施,并计划很快将其提供给扩展作者。您可以关注 问题 #23251 以获取更新并提供反馈。

更新的 codicon

以下新图标已添加到我们的 codicon 库

An example of updated codicons

  • folder-library
  • run-errors

漫游指南贡献的更新

使用可主题化的 SVG 作为漫游指南步骤媒体

漫游指南步骤现在可以在其 media 对象中指定 svg 属性。除了更好的缩放支持外,SVG 还提供对主题令牌的访问,这可以使媒体在视觉上与工作台的其余部分保持一致。有关更多信息,请参阅我们的 主题化 webview 内容指南。

声明漫游指南的感兴趣的文件

漫游指南现在支持可选的 featuredFor 参数,该参数列出了给定漫游指南适用的文件类型。当在工作区文件夹中找到这些文件时,漫游指南将以更高的视觉优先级呈现。

任务默认组 API

TaskGroupisDefault 属性已最终确定。扩展现在可以获取任务,然后读取任务的 groupisDefault 属性,以确定任务是否是该组的默认任务。

调试器扩展编写

“DebugSessionOptions”上的新“managedByParent”属性

一个新的标志 managedByParent 已添加到 DebugSessionOptions 类型中。当传递给 startDebugging API 时,它控制像 disconnectrestart 这样的生命周期请求是发送到新创建的会话还是其父会话。

调试适配器协议的“showUser”属性

launch 请求失败时,VS Code 现在会遵循调试适配器响应中发送的 showUser 属性。如果提供了 showUser 属性且值为 false,VS Code 将不会显示包含错误的模态对话框。如果 showUser 属性缺失或值为 true,VS Code 的行为将与之前相同,并会显示错误对话框。

对于其他调试适配器协议 (DAP) 请求,则没有变化。如果 showUsertrue,则会使用通知显示错误。否则,不会向用户显示任何内容。

VS Code 不再为“noDebug”调试会话注册断点

当 DAP 的 launch 请求的 noDebug 属性设置为 true 时,VS Code 将不再调用任何断点注册 DAP 请求(setBreakpointssetExceptionBreakpointssetDataBreakpointssetFunctionBreakpointssetInstructionBreakpoints)。

VS Code 现在支持 DAP “setExpression” 请求

如果调试适配器实现了 setExpression 请求(supportsSetExpression 功能为 true),VS Code 将在两种情况下使用 setExpression

  • 在“变量”和“监视”视图中,如果调试适配器不支持 setVariable 请求(supportsSetVariable 功能缺失或为 false),并且变量具有 evaluateName 属性且可编辑(VariablePresentationHint 中的 readOnly 属性不为 true),则用于更改变量的值。
  • 在“监视”视图中,如果监视表达式可编辑(VariablePresentationHint 中的 readOnly 属性不为 true),则用于更改可赋值表达式的值。

抑制 DAP 错误消息中的“打开 launch.json”按钮

调试适配器协议允许 Message of an ErrorResponse 返回一个 url,其中可以找到有关该消息的更多信息,以及一个 urlLabel,它将作为打开 URL 的 UI 呈现给用户。当 VS Code 在模态对话框中向用户显示消息时,会显示一个以 urlLabel 为标题的按钮。在此版本之前,VS Code 还会添加一个标题为打开 launch.json 的按钮。如果消息的 url 使用“command”方案(例如 command:myExtension.fixError),则不再添加该按钮。

调试适配器协议

发布新的“memory”事件

memory 事件已经完成,现在可以在 调试适配器协议 的 1.49 版本以及相应的 npm 模块中使用。如果调试适配器在 initialize 请求中收到的 supportsMemoryEvent 功能值为 true,则调试适配器可以发出 memory 事件,以指示某些内存范围已更新。

建议的扩展 API

每个里程碑都带有新的建议 API,扩展作者可以试用它们。和往常一样,我们希望得到您的反馈。这是您试用建议 API 所必须做的

  • 您必须使用 Insiders 版本,因为建议的 API 会频繁更改。
  • 您必须在扩展的 package.json 文件中添加以下行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目的源位置。

您不能发布使用建议 API 的扩展。下一个版本中可能会有重大更改,我们绝不想破坏现有扩展。

类型层次结构支持

有一个关于 TypeHierarchyProvider 的 API 提案,它允许扩展为符号提供超类型和子类型。该 API 已准备好试用,如果您发现问题或有任何建议,可以在 VS Code 存储库中输入它们。

在任何位置创建终端

建议的终端位置 API 允许在面板和编辑器区域中创建终端拆分。

查询和事件,用于判断终端是否已被“交互”

一个新的 Terminal.state 和 window.onDidChangeTerminalState 建议 API 允许查询终端是否已被“交互”。交互意味着数据已发送到进程,并且可能由于各种原因发生,主要原因包括键盘输入。

QuickPickItems 中的按钮

有一个关于 在 QuickPickItem 中添加和处理按钮的建议 API。我们希望这将使扩展能够为 Quick Pick 提供更丰富的用户交互。

Buttons in QuickPickItems

试用一下,让我们知道您的想法。需要注意的一件事是,目前存在一个关于 Quick Pick 滚动位置的已知问题,我们认为这个新的建议 API 将会放大这个问题。我们正在研究正确的 API 集来解决这个问题。请通过参与该问题让我们知道您的想法。

测试标签

测试标签是一个建议的 API,它提供了一种组织测试的方法,以及指示哪些测试是可运行的。

非错误测试输出

测试 API 支持测试失败消息,但以前没有办法将非错误输出与特定的测试用例关联起来。我们正在评估一种方法,通过将可选的 TestItemlocation 传递给 TestRun.appendOutput 方法来实现。如果您有任何意见,请在 issue #129201 上留下反馈!

内联完成提供程序:与自动完成小部件的交互

InlineCompletionContext 有一个新的字段 selectedCompletionInfo,其中包含自动完成小部件中当前选定的建议的详细信息。此外,每当用户更改自动完成小部件中选定的项时,都会要求 InlineCompletionItemProvider 提供内联建议。如果内联建议扩展了选定的建议项,则该扩展将以斜体显示。

工程

修复对 RHEL7 和 Centos7 发行版的支持

在 VS Code 1.53 版本中,我们更新了构建镜像以使用较新的 Electron 版本,导致本机模块的 CXXABI 要求发生变化,这破坏了某些发行版中的 rpm 包 issue #115784。通过更新到 Electron v13,我们现在能够使用与运行时相同的编译器工具链来构建我们的本机模块,具体来说,我们现在使用 Clang 并从运行时静态链接 libcxx。这使我们能够绕过 CXXABI 要求,只需增加少量二进制文件大小(约 10 MB)即可重新支持这些发行版。感谢您在 Insiders 版本测试中的耐心和帮助。

文档

VS Code 中的 Julia

有一个新的Visual Studio Code 中的 Julia 主题,描述了 VS Code 中使用 Julia 扩展Julia 编程语言 的支持。Julia 扩展包括丰富的语言功能,例如代码补全、代码导航和调试,以及集成的 REPL 和绘图导航器。

Julia extension

Azure 机器学习

您可以阅读 VS Code 中的 Azure 机器学习概述,了解 Azure 机器学习扩展如何让您直接从 VS Code 使用基于 Azure 机器学习云的 机器学习模型

值得注意的修复

  • 82489:使用“AltGr”键时键盘输入不正确
  • 115945:当工具栏停靠时,缺少调试工具栏贡献的命令
  • 118196:重新启动调试会话时,args-list 中的元素不会更新
  • 121201:iPad 上菜单选择的呈现不正确
  • 124128:调试停止时,不拆解扩展开发窗口
  • 125259:调试在启动前不保存 launch.json
  • 126102:SkipFiles 仍然会暂时打开要跳过的文件,导致速度变慢
  • 126911:扩展调试:停止调试会话不会关闭窗口
  • 128484:调试:启动失败时禁用模态对话框的选项
  • 129019:以关闭状态启动的树视图需要再次刷新(或重新打开)才能显示内容
  • 129469:设置编辑器输入框可以更大
  • 129645:在设置 UI 中启用代码块语法突出显示
  • 129844:markdownEnumDescriptions 不会删除设置 UI 中的 markdown `##`,也不会删除 settings.json 中的 ##
  • 130265:Node 调试器不会在未处理的 Promise 拒绝时中断

感谢

最后但并非最不重要,非常感谢本月为 VS Code 做出贡献的以下人员

对我们问题跟踪的贡献

vscode 的贡献

vscode-generator-code 的贡献

vscode-js-debug 的贡献

vscode-pull-request-github 的贡献

debug-adapter-protocol 的贡献

language-server-protocol 的贡献

monaco-editor 的贡献

monaco-html 的贡献

monaco-languages 的贡献