现已发布!阅读关于 12 月份的新功能和修复。

2021 年 8 月 (版本 1.60)

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

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

下载:Windows:x64 Arm64 | Mac:通用版 Intel M1/M2 芯片 | Linux:deb rpm tarball Arm snap


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

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

加入我们现场直播!将于太平洋时间 9 月 2 日星期四上午 8 点(伦敦时间下午 4 点)举行 VS Code 团队的直播活动,届时将演示此版本的新功能,并进行现场问答。

内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。

工作台

自动语言检测

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

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

我们添加此功能是因为我们发现一些 VS Code 的新用户不知道如何设置语言模式,也不知道这是获得 VS Code 丰富功能集(语言颜色高亮和扩展推荐)所必需的。让新用户能够快速看到 VS Code 可用的语言功能和扩展,有助于他们更快地掌握编辑器。

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

以下是自动语言检测实现的几个有趣场景。

从在线复制示例并粘贴到未命名编辑器中

主题:Panda Theme

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

主题:Panda Theme

Notebook 语言选择器中的自动检测选项

主题:Panda Theme

终端编辑器确认对话框

当关闭带有正在运行的子进程的终端编辑器时出现的对话框现在特定于终端编辑器,并且不再提供“保存”终端的选项。

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 来启用括号对颜色高亮。所有颜色都可以主题化,最多可配置六种颜色。

我们实现了此功能,以解决著名的 Bracket Pair Colorizer 扩展(由 CoenraadS 开发)的性能问题。

现在,即使是巨大文档的更改也能立即反映出来。

自动完成中的内嵌建议

当显示自动完成小组件时,内嵌建议现在可以扩展建议预览。如果自动完成小组件中选中的建议可以通过内嵌完成提供程序进行扩展,则该扩展将以斜体显示。按一次 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 host 上记录大量最近的原始终端事件,改为在 pty host 上维护一个无头终端前端并将所有数据写入其中。

这种方法带来了几项好处:

  • 可以精细调整要恢复的滚动回显量。现在默认为 100,这是速度和数据量之间的良好平衡。滚动回显量可以通过 terminal.integrated.persistentSessionScrollback 设置进行更改。
  • 得益于 xterm.js 的快速解析器,这应该对 CPU 使用率的影响最小,并减少 pty host 上的整体内存使用。
  • 现在会显式恢复以前可能遗漏并导致缓冲区损坏的终端模式。
  • 不再需要重放昂贵的 resize 事件,因为终端的缓冲区始终与其大小同步。
  • 由于恢复相对较快,所有操作都在一个框架内完成。这意味着宝贵的 CPU 时间不会浪费在渲染部分恢复的终端上,从而进一步减慢速度。

新实现提供的加速程度取决于许多因素,例如终端数量、硬件、终端缓冲区大小以及终端中正在发生的事情。粗略估计恢复完整的终端缓冲区应该可以带来 5-10 倍的速度提升。

我们还将在 npm 上发布了新的 xterm-headless 包,因此您可以在自己的项目中使用这项工作。

调试

在 WATCH 视图中设置值

现在可以通过 WATCH 视图中的“设置值”操作来设置已监视表达式的值。

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

调试扩展必须选择加入此功能,才能使“设置值”可用。目前,JS-debug、C# 和 C++ 扩展支持此功能,但我们预计其他调试扩展也将很快跟进。

次要 UI 改进

  • VS Code 现在可以在 VARIABLES 视图、WATCH 视图和 Debug 悬停中检测链接。当变量的值是链接时,通过单击它将更容易访问该链接。

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

  • 单击编辑器断点装订区域中的禁用断点现在会启用该断点,而不是删除它。

  • 当调试会话处于活动状态时,“运行到此行”操作现在在编辑器断点装订区域的上下文菜单中可用。

新设置

  • 如果您想避免在调试会话期间意外关闭窗口,可以启用新设置 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 上标记为已弃用。如果您是 VS Code 用户中的大多数(未选择退出新的 JavaScript 调试器),则不会有任何变化。

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

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

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

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

在下一个版本中,我们计划默认跳过 Node.js 内部代码。

安装程序

默认情况下为支持的文件类型注册 VS Code

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

遵循新的最佳实践,在 Windows 安装过程中,VS Code 的复选框“注册 VS Code 以作为支持文件类型的编辑器”现在默认勾选。我们还审查了关联的文件类型列表,并扩展了该列表以包含更多常用打开的文件类型。

Windows 11 上的 Microsoft Store

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

Notebook

Notebook 现在支持 Markdown 单元格之间的链接。

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

[Link text](#_header-slug)

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

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

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

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

要理解为什么这对性能不利,请考虑一个输出文本 Hello Code! 的 Notebook。它在内部存储为 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。对于大小为几十兆字节的 Notebook 输出,此解析可能成为一个重要的瓶颈。

通过新的实现,Notebook 输出在传输时保持为二进制数据。您可以在拉取请求中阅读有关此实现细节的更多信息。

此修复显著提高了包含保存的 Notebook 的加载性能,并提高了 Notebook 在执行期间生成大型输出时的性能。

onNotebook 激活事件改进

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

Notebook 布局自定义

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

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 Notebook 中的**逐行运行**功能。这是一种简单的调试模式,可让您逐行执行单元格中的代码。要尝试,请确保已安装 ipykernel v6+ 作为您选择的内核,然后选择**逐行运行**按钮。

调试

还提供通过 VS Code 的完整调试功能调试 Jupyter Notebook 的实验性支持。要尝试,请确保已安装 ipykernel v6+ 作为您选择的内核,设置 "jupyter.experimental.debugging": true,设置断点,然后选择**调试单元格**命令。

Jupyter 键映射

我们将 Jupyter 经典键绑定提取到一个单独的Jupyter Keymap 扩展中,如果您更喜欢使用 Marketplace 中的其他 Notebook 键绑定,则可以禁用它。

Python

改进的测试界面

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

Running tests with the new Python Test Explorer

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

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

GitHub 拉取请求和议题

备受期待的展开和折叠GitHub Pull Requests and Issues扩展中所有评论的功能现已可用。所有评论都可以通过命令“GitHub Pull Requests: Expand All Comments”和“GitHub Pull Requests: Collapse All Comments”进行展开和折叠。还有一个设置 githubPullRequests.commentExpandState 用于控制展开/折叠状态。最后,您还可以从评论 UI 内折叠所有评论。

Collapse all pull request comments button

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

扩展创作

Web 扩展

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

除了 Web 扩展指南之外,yo code 扩展生成器现在有一个选项可以脚手架一个**Web 扩展**,并且还支持 @vscode/test-web 模块以从命令行测试 Web 扩展。

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

命令的短标题

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

为了支持不同的标题,新增了 shortTitle 属性。它允许命令提供一个更短的标题,以适应不同的 UI,例如命令面板中的“Notebook: Clear All Cell Output”和 Notebook 工具栏中的更短的“Clear All”。

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

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

RendererContext.workspace.isTrusted 用于 Notebook 渲染器

传递给 Notebook 渲染器的上下文对象中的新 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以获取更新和提供反馈。

更新的 codicons

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

An example of updated codicons

  • folder-library
  • run-errors

Walkthrough 贡献更新

使用主题化 SVG 作为 Walkthrough 步骤媒体

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

声明 Walkthrough 感兴趣的文件

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

任务默认组 API

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

调试器扩展创作

新“managedByParent”属性应用于“DebugSessionOptions”

已将新的标志 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 请求 (setBreakpoints, setExceptionBreakpoints, setDataBreakpoints, setFunctionBreakpoints, setInstructionBreakpoints)。

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

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

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

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

调试适配器协议允许 MessageErrorResponse 返回一个 url,可以在其中找到有关消息的附加信息,以及向用户显示的用于打开 URL 的 UI 标签 urlLabel。当 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 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。

支持类型层次结构

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

随时随地创建终端

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

查询和事件,指示终端是否已被“交互”

Terminal.state 和 window.onDidChangeTerminalState 的新提议 API 允许查询终端是否已被“交互”。交互是指已向进程发送数据,并且可能出于多种原因发生,最主要的原因是键盘输入。

QuickPickItems 中的按钮

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

Buttons in QuickPickItems

试用并告诉我们您的想法。需要注意的一点是,Quick Pick 的滚动位置目前存在一个已知问题,我们认为这个新提议的 API 会加剧这个问题。我们正在努力提供一套合适的 API 来解决这个问题。请通过参与该问题讨论告诉我们您的想法。

测试标签

测试标签是一项提议的 API,它提供了一种组织测试的方法,并指明哪些测试是可运行的。

非错误测试输出

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

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

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

工程

修复 RHEL7 和 Centos7 发行版的支持

在 VS Code 版本 1.53 中,我们更新了构建映像以使用更新的 Electron 版本,这导致了原生模块对 CXXABI 的要求发生变化,从而破坏了我们在某些发行版上的 rpm 包问题 #115784。通过更新到 Electron v13,我们现在可以使用与运行时相同的编译器工具链构建我们的原生模块,特别是我们现在使用 Clang 并静态链接运行时的 libcxx。这使我们能够绕过 CXXABI 的要求,而二进制文件大小仅略微增加约 10 MB,并恢复对这些发行版的支持。感谢您的耐心等待和在 Insiders 版本上进行测试的帮助。

文档

VS Code 中的 Julia

有一个新的VS Code 中的 Julia主题,介绍了Julia 编程语言在 VS Code 中的支持,以及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:treeview 初始关闭,需要再次刷新(或重新打开)才能显示内容
  • 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 的贡献

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