2021 年 8 月 (版本 1.60)
更新 1.60.1:此更新修复了这些问题。
更新 1.60.2:此更新修复了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Apple 芯片 | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 的 2021 年 8 月版本。此版本中有许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 自动语言检测 - 将内容粘贴到 VS Code 时检测编程语言。
- 内置快速括号对颜色化 - 对大型文件进行快速括号匹配和颜色化。
- 设置编辑器语法高亮 - 为设置描述代码块提供丰富的语法高亮。
- 自定义终端字形渲染 - 更好地显示绘制框和块元素字符。
- 设置调试 WATCH 视图中的值 - 在调试会话期间更改被监视的值。
- 笔记本改进 - Markdown 链接导航,更快地渲染大型输出。
- JavaScript/TypeScript 内嵌提示 - 参数名称和类型等的行内提示。
- 锁定编辑器组预览 - 通过锁定编辑器组来保持首选的编辑器布局。
- Python 扩展测试更新 - 更好地支持测试发现、导航和状态。
- Web 扩展作者指南 - 了解如何在浏览器中为 VS Code 更新您的扩展。
如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。
加入我们的直播:太平洋时间 9 月 2 日星期四上午 8 点(伦敦时间下午 4 点)观看 VS Code 团队的直播,查看此版本中的新功能演示,并在线提问。
Insiders:想尽快尝试新功能吗?您可以下载每晚的 Insiders 版本,并在最新更新可用时立即试用。
工作台
自动语言检测
在上一个版本中,我们为无标题文件引入了一个实验性功能,该功能会根据文件内容自动设置语言模式。自动语言检测功能使用机器学习来猜测语言,并且机器学习模型完全在您的本地机器上运行。该模型由开源机器学习库 Tensorflow.js 提供支持,并使用了 GitHub 用户 @yoeo 的 Guesslang 机器学习模型。
在此版本中,我们默认启用了自动语言检测,并将其扩展到包括没有文件扩展名的文件。在笔记本中,我们提供了使用语言选择器轻松请求语言检测的方法。
我们添加此功能是因为我们发现一些 VS Code 新用户不知道如何设置语言模式,也不知道为了获得 VS Code 丰富的特性集(语言颜色化和扩展推荐)需要这样做。让新用户快速看到 VS Code 可用的语言特性和扩展有助于他们熟悉编辑器。
此外,将无标题文本编辑器用作草稿本的高级用户不再需要显式设置语言模式,我们希望这将简化他们的工作流程。
以下是自动语言检测实现的一些有趣场景。
从在线获取示例并将其粘贴到无标题编辑器中
主题:Panda Theme
“Pipe into code” 语言检测(展示无扩展名文件的检测)
主题:Panda Theme
笔记本语言选择器中的自动检测选项
主题:Panda Theme
终端编辑器确认对话框
关闭带有正在运行的子进程的终端编辑器时出现的对话框现在是终端编辑器专用的,并且不再提供“保存”终端的选项。
编辑器恢复失败时保持打开而非关闭
以前,当编辑器在窗口重新加载或应用程序重新启动后恢复失败时,编辑器会自动关闭,直到找到一个成功加载的编辑器。这种行为导致了一些令人沮丧的结果,例如精心创建的编辑器布局会因为编辑器关闭而消失。
在此版本中,曾经成功打开过的编辑器即使恢复失败也不会关闭。编辑器会指示问题并提供重试操作的选项。
设置编辑器中代码块的语法高亮
设置描述中的围栏式代码块现在支持语法高亮。
将设置编辑器打开到侧边
现在可以通过配置使用 openToSide
参数的键绑定,在侧边组中打开设置编辑器。
{
"key": "cmd+,",
"command": "workbench.action.openSettings",
"args": {
"openToSide": true
}
}
这也适用于 workbench.action.openSettingsJson
命令。
编辑器
高性能括号对颜色化
编辑器现在支持原生的括号对颜色化。
通过设置 "editor.bracketPairColorization.enabled": true
可以启用括号对颜色化。所有颜色都支持主题,并且最多可以配置六种颜色。
我们实现此功能是为了解决由 CoenraadS 开发的著名 Bracket Pair Colorizer 扩展的性能问题。
现在,即使是大型文档中的更改也能立即反映出来。
自动完成中的行内建议
现在当自动完成窗口显示时,行内建议可以扩展建议预览。如果在自动完成窗口中选择的建议可以被行内完成提供者扩展,则扩展部分会以斜体显示。按一次 Tab
键仍然只接受自动完成建议。第二次按 Tab
键将接受行内建议。
此功能需要启用建议预览("editor.suggest.preview": true
)。
更新的 Peek 视图
我们对 Peek 视图进行了视觉更新,使其与编辑器其他视图保持一致。
终端
绘制框和块元素字符的自定义渲染
当开启 GPU 加速时(terminal.integrated.gpuAcceleration
),绘制框和块元素字符现在使用像素完美的自定义字形,而不是使用字体。这意味着,例如,即使您在终端中设置了行高或字母间距,框也能无间隙绘制。
以下是终端应用程序 Zenith 的示例,它显示了围绕各个部分的绘制框字符以及用于图表的块元素。
通过设置 "terminal.integrated.customGlyphs": false
可以禁用此功能。
某些字体的下划线渲染改进
历史上终端中下划线的渲染存在一些问题,其中大部分通过切换到 WebGL 渲染器(默认)得到了修复。一个例外是,在 Linux 上,字体中的下划线字符会意外地绘制在单元格边界下方。
请注意下行中的下划线是如何渲染在单元格下方的。
虽然这在大多数情况下正常工作,但在底行会失败,因为它绘制在 canvas 的边界之外。
我们现在通过检测此类字体并将下划线纹理向上移动直到其位于单元格边界内来解决此问题。此解决方案也适用于 canvas 渲染器,以前由于剪裁行以避免重叠的方式,canvas 渲染器不会显示任何行的下划线。
窗口重新加载后更快的重新连接
以前,重新加载窗口时,解析终端缓冲区的状态可能需要长达 300 毫秒,并且还存在损坏的可能性。对于多个繁忙的终端来说,这会很快累积!为了解决这个问题,恢复缓冲区的方法从在 pty 主机上记录大量近期原始终端事件更改为在 pty 主机上维护一个无头终端前端并将所有数据写入其中。
这种方法带来了几个好处
- 可以微调要恢复的回滚量。默认值现在是 100,这是速度和数据量之间的良好平衡。回滚量可以通过
terminal.integrated.persistentSessionScrollback
设置进行更改。 - 得益于 xterm.js 的快速解析器,这应该对 CPU 使用率的影响最小,并减少 pty 主机上的总体内存使用。
- 现在会明确恢复终端模式,以前这可能会被遗漏并导致缓冲区损坏。
- 由于终端缓冲区的大小始终与其同步,因此不再需要回放耗时的 resize 事件。
- 由于恢复相对较快,所有操作都在单个帧中处理。这意味着宝贵的 CPU 时间不会浪费在渲染部分恢复的终端上,从而进一步减慢速度。
此新实现带来的速度提升取决于许多因素,例如终端数量、硬件、终端缓冲区大小以及终端中正在发生的事情。粗略估计恢复完整终端缓冲区应该能带来约 5-10 倍的速度提升。
我们还在 npm 上发布了新的 xterm-headless 包,因此您可以在自己的项目中使用这项工作。
调试
在 WATCH 视图中设置值
现在可以使用上下文菜单中的设置值操作来设置 WATCH 视图中监视表达式的值。
调试扩展必须选择加入此功能才能使用设置值。目前,JS-debug、C# 和 C++ 扩展支持此功能,但我们预计其他调试扩展很快也会跟进。
次要 UI 改进
-
VS Code 现在也能检测 VARIABLES 视图、WATCH 视图和调试悬停中的值中的链接。当变量的值是链接时,点击该链接可以更轻松地跳转。
-
当启动一个已在运行的调试会话的另一个实例时,现在会出现一个模态确认对话框,以防止意外启动两个会话。
-
单击编辑器断点区域中禁用的断点现在会启用该断点,而不是将其删除。
-
当调试会话处于活动状态时,运行到行操作现在可以在编辑器的断点区域上下文菜单中使用。
新设置
-
如果您想避免在调试会话期间意外关闭窗口,可以启用新的设置
debug.confirmOnExit
。将其设置为always
后,关闭窗口时将提示您确认是否要停止调试会话。 -
新的设置
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-node
或 legacy-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 Insiders 计划测试 Windows 11,现在就可以在商店中搜索并安装最新版本的 VS Code。安装后,您将拥有与从我们网站上的用户安装版本相同的 VS Code,并且更新将像今天一样在应用程序内处理。
笔记本
Markdown 单元格之间的链接
笔记本现在支持 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 扩展)发出激活事件。其他扩展的激活不会减慢文件操作,以确保快速打开笔记本。
笔记本布局自定义
您现在可以直接通过编辑器工具栏自定义笔记本布局设置。
语言特性
TypeScript 4.4
VS Code 现在包含 TypeScript 4.4。此更新带来了对许多新语言特性和改进的支持,包括静态块和新的严格性选项。它还添加了新的工具改进并修复了一些重要错误。
您可以在TypeScript 博客上阅读有关 TypeScript 4.4 的所有内容。
JavaScript 和 TypeScript 的内嵌提示
TypeScript 4.4 中最重要的新工具特性是内嵌提示支持。内嵌提示向源代码添加额外的行内信息,以帮助您理解代码的作用。
例如,参数名称内嵌提示会显示函数调用中参数的名称。
这可以帮助您一目了然地理解每个参数的含义,这对于接受布尔标志或参数容易混淆的函数尤其有用。
要启用参数名称提示,请设置 javascript.inlayHints.parameterNames.enabled
或 typescript.inlayHints.parameterNames.enabled
设置。有三个可能的值:
none
- 禁用参数内嵌提示。literals
- 仅显示字面量(字符串、数字、布尔值)的内嵌提示。all
- 显示所有参数的内嵌提示。
此外,VS Code 还提供了显示 JavaScript 和 TypeScript 代码中隐式类型信息的内嵌提示。
变量类型内嵌提示显示没有显式类型注解的变量类型。
设置 - javascript.inlayHints.variableTypes.enabled
和 typescript.inlayHints.variableTypes.enabled
属性类型内嵌提示显示没有显式类型注解的类属性类型。
设置 - javascript.inlayHints.propertyDeclarationTypes.enabled
和 typescript.inlayHints.propertyDeclarationTypes.enabled
参数类型提示显示隐式类型参数的类型。
设置 - javascript.inlayHints.parameterTypes.enabled
和 typescript.inlayHints.parameterTypes.enabled
返回类型内嵌提示显示没有显式类型注解的函数的返回类型。
设置 - javascript.inlayHints.functionLikeReturnTypes.enabled
和 typescript.inlayHints.functionLikeReturnTypes.enabled
我们计划继续改进内嵌提示,因此请务必分享您对此新功能的任何反馈!
JavaScript 文件中的拼写建议
VS Code 现在可以帮助您捕获 JavaScript 文件中的简单拼写错误。
只有当我们有相当高的信心认为它们是实际错误,而不是 IntelliSense 引擎无法理解的代码模式时,才会显示拼写建议。您可以在添加此功能的 PR 中阅读有关此细节的更多信息。
您也可以通过设置来禁用这些建议。
"javascript.suggestionActions.enabled": false
为了进行更全面的检查,请尝试在 JavaScript 代码中启用完整语义检查。这不仅有助于捕获更多错误,还能启用多个有用的快速修复。
typescript.tsserver.useSyntaxServer
新的 typescript.tsserver.useSyntaxServer
设置允许您控制 TypeScript 是否启动一个专用服务器来快速处理与语法相关的操作,例如计算代码折叠。它取代了现在已弃用的 typescript.tsserver.useSeparateSyntaxServer
设置。
可能的值为:
auto
- 同时启动一个完整服务器和一个专注于语法操作的轻量级服务器。语法服务器用于加速代码折叠等语法操作,并在项目加载时提供 IntelliSense。(默认)always
- 使用轻量级语法服务器处理所有 IntelliSense 操作。此语法服务器只能为已打开的文件提供 IntelliSense。never
- 不使用专用语法服务器。使用单个服务器处理所有 IntelliSense 操作。
预览特性
锁定编辑器组
随着编辑器区域中终端的引入,我们收到了用户报告,他们对终端编辑器太容易或意外地被文件编辑器替换感到沮丧。默认情况下,文件始终在活动编辑器组中打开,因此,即使终端处于活动状态,文件也会打开并隐藏终端。
锁定编辑器组提供了一种处理此问题的新方法,不仅适用于终端,也适用于任何编辑器。如果您打开了多个编辑器组,现在可以锁定它,无论是使用新命令之一还是通过 "..." 溢出菜单。
锁定组的行为与未锁定组不同。
- 新编辑器不会在锁定组中打开,除非用户明确将其移至其中(例如,通过拖放)。
- 如果编辑器跳过锁定组进行打开,它将要么在最近使用的未锁定组中打开,要么在锁定组的侧边创建一个新组。
- 编辑器组的锁定状态在重新启动后会得到持久化和恢复。
- 您也可以锁定空组,从而获得更稳定的编辑器布局。
- 锁定组在操作工具栏(右上角)中由锁定图标表示。
请看下面关于锁定编辑器组实际行为的演示。即使 Markdown 预览是活动的,新文件也会在左侧编辑器组中打开。
为此功能添加的命令有:
workbench.action.experimentalLockEditorGroup
workbench.action.experimentalUnlockEditorGroup
workbench.action.experimentalToggleEditorGroupLock
一个新的上下文键 activeEditorGroupLocked
可用于根据组的锁定状态条件性地绑定命令。
注意:相关的设置和命令是实验性的,直到我们最终确定锁定编辑器组的设计。我们希望收到您对此新功能的反馈,请随时报告问题。
自动锁定编辑器组
在新的锁定编辑器组概念之上,新的 workbench.editor.experimentalAutoLockGroups
设置允许您选择在打开时应自动锁定组的编辑器。这仅适用于编辑器是第一个在本来为空或新组中打开的情况。
终端默认配置为使新组自动锁定。在下面的短视频中,即使终端处于活动状态,从终端选定的文件也会在左侧编辑器组中打开。
如果您希望 Markdown 预览自动锁定组,可以将 mainThreadWebview-markdown.preview: true
添加到 experimentalAutoLockGroups
设置中。
在接下来的里程碑中,我们将致力于改进设置 UX,以便无需知道编辑器的标识符即可选择编辑器。相关的设置和命令是实验性的,直到我们最终确定锁定编辑器组的设计。我们再次希望收到您的反馈。
“按文件名搜索” Quick Pick 中的引号支持
在此迭代中,我们通过将搜索字符串放在引号中,增加了从“按文件名搜索” Quick Pick(⌘P (Windows, Linux Ctrl+P))中排除模糊搜索结果的功能。
此功能出色的场景:
查询只有几个字符时。
如果您想减少结果的“杂乱”。
我们喜欢这种引号体验,它感觉很直观,因为大多数搜索引擎都使用类似的机制,但我们希望收到您的反馈。我们还在考虑问题 #131431 中讨论的其他方法。
对扩展的贡献
Jupyter
逐行运行
VS Code 现在支持 Jupyter 笔记本中的逐行运行功能。这是一种简单的调试模式,允许您逐行执行单元格的代码。要试用此功能,请确保已将 ipykernel
v6+ 安装为所选内核,然后选择逐行运行按钮。
调试
还提供了使用 VS Code 完整调试功能调试 Jupyter 笔记本的实验性支持。要试用此功能,请确保已将 ipykernel
v6+ 安装为所选内核,设置 "jupyter.experimental.debugging": true
,设置断点,然后选择调试单元格命令。
Jupyter 键映射
我们将 Jupyter 经典键绑定提取到一个单独的 Jupyter Keymap 扩展中,如果您更喜欢使用 Marketplace 中的另一组笔记本键绑定,则可以禁用此扩展。
Python
改进的测试界面
得益于新的测试 API,Python 扩展改进了其测试功能。您现在可以享受更稳定的测试发现、导航和状态渲染体验,以及搜索测试、运行选定的测试、重新运行上次执行的测试等新功能!
在编辑器中从终端运行和调试 Python 文件
您现在可以使用 Python 扩展直接从编辑器在终端中运行和调试您的 Python 文件。
GitHub 拉取请求和问题
备受期待的 GitHub 拉取请求和问题扩展中展开和折叠所有评论的功能现已可用。所有评论可以通过命令GitHub 拉取请求:展开所有评论和GitHub 拉取请求:折叠所有评论进行展开和折叠。还有一个设置 githubPullRequests.commentExpandState
来控制展开折叠状态。最后,您也可以从评论 UI 中折叠所有评论。
要了解所有新特性和更新,您可以查看扩展 0.30.0 版本的完整更新日志。
扩展创作
Web 扩展
当 VS Code 在浏览器中运行时,扩展会加载到同样在浏览器中运行的扩展宿主中。“Web 扩展宿主”受到浏览器的限制,扩展无法访问本地文件系统或平台特性。为了帮助扩展作者更新其扩展以支持在 Web 版 VS Code 中运行,现在提供了Web 扩展创作指南。在这里,您将学习哪些类型的扩展最适合在 Web 上运行,如何访问 VS Code API 以及如何使用虚拟文件系统。
除了 Web 扩展指南之外,yo code
扩展生成器现在还提供了一个选项来生成 Web 扩展的骨架代码,并且还包含了对 @vscode/test-web
模块的支持,以从命令行测试 Web 扩展。
如果您还没有见过实际运行的 Web 版 Visual Studio Code,您可以在 GitHub 存储库的 <> Code 选项卡中按下 '.'
键(句点键),这将启动 Web 版 VS Code 来浏览和编辑源代码。
命令的短标题
通过 commands 贡献点,扩展可以为命令定义 UI 属性,例如标题、类别或图标。菜单另一方面是显示命令的“位置”,菜单可以呈现命令的部分或全部 UI 属性。例如,有些菜单只渲染图标,而有些则渲染标题或类别加标题。作为扩展作者,很难想出一个既适用于全局菜单又适用于本地菜单的命令标题。例如,命令面板 (Command Palette) 可以显示比上下文菜单更多的单词。
为了允许不同的标题,新增了一个 shortTitle
属性。它允许命令提供一个较短的标题,以便根据 UI 显示良好,例如命令面板中的笔记本:清除所有单元格输出,以及笔记本工具栏中较短的清除所有。
环境命名空间中添加了应用程序宿主
.env
命名空间现在包含应用程序宿主 appHost
属性。appHost
允许扩展开发者确定 VS Code 所在的宿主环境。示例包括桌面、GitHub Codespaces、github.dev 和 vscode.dev。
notebook 渲染器的 RendererContext.workspace.isTrusted
传递给 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 库中:
folder-library
run-errors
Walkthrough 贡献更新
使用主题化 SVG 作为 Walkthrough 步骤媒体
入门指引步骤现在可以在其 media
对象中指定一个 svg
属性。除了更好的缩放支持外,SVG 还提供了访问主题 token 的能力,这可以让媒体内容在视觉上与工作台的其他部分更好地融合。有关详细信息,请参阅我们关于主题化 Webview 内容的指南。
声明入门指引关注的文件
入门指引现在支持一个可选的 featuredFor
参数,该参数列出了给定入门指引适用的文件类型。当在工作区文件夹中找到这些文件时,该入门指引将以更高的视觉优先级呈现。
任务默认组 API
TaskGroup
的 isDefault
属性已最终确定。扩展现在可以获取任务,然后读取任务的 group
的 isDefault
属性,以确定该任务是否是该组的默认任务。
调试器扩展创作
“DebugSessionOptions”上的新属性“managedByParent”
DebugSessionOptions
类型中新增了一个标志 managedByParent
。当将其传递给 startDebugging
API 时,它控制诸如 disconnect
和 restart
等生命周期请求是发送到新创建的会话还是其父会话。
调试适配器协议的“showUser”属性
当 `launch` 请求失败时,VS Code 现在将遵从调试适配器响应中发送的 `showUser` 属性。如果提供了 `showUser` 属性且其值为 false,VS Code 将不会显示带有错误的模态对话框。如果 `showUser` 属性缺失或为 `true`,VS Code 将像以前一样显示错误对话框。
对于其他调试适配器协议 (DAP) 请求,没有变化。如果 showUser
为 true
,将通过通知显示错误。否则,将不会向用户显示任何内容。
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”按钮
调试适配器协议允许消息(Message)的错误响应(ErrorResponse)返回一个 url
,其中可以找到有关消息的额外信息,以及一个 urlLabel
,该 urlLabel
显示给用户作为打开 URL 的 UI。当 VS Code 在模态对话框中向用户显示该消息时,会显示一个按钮,其标题即为 urlLabel
。在此版本之前,VS Code 还会添加一个标题为打开 launch.json的按钮。如果消息的 url
使用了“command”方案,例如 command:myExtension.fixError
,则不再添加该按钮。
调试适配器协议 (DAP)
发布新的“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 允许查询终端是否已被“交互”。交互意味着数据已发送到进程,可能由于各种原因发生,主要原因是键盘输入。
QuickPickItem 中的按钮
有一个关于 在 QuickPickItem 中添加和处理按钮 的提议 API。我们希望这将使扩展能够为 Quick Pick 提供更丰富的用户交互。
请试用并告诉我们您的想法。需要注意的是,目前 Quick Pick 的滚动位置存在已知问题,我们认为这个新的提议 API 会加剧这个问题。我们正在研究正确的 API 集来解决此问题。请通过参与讨论该问题来告诉我们您的想法。
测试标签
测试标签是一个提议的 API,它提供了一种组织测试的方法,并指示哪些测试可运行。
非错误测试输出
测试 API 支持测试失败消息,但以前没有办法将非错误输出与特定的测试用例关联起来。我们正在评估一种方法来实现这一点,即向 TestRun.appendOutput
方法传递一个可选的 TestItem
和 location
。如果您有任何意见,请在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 和绘图导航器。
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 做出贡献的以下人员致以诚挚的感谢
对我们的问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- CodeCrazy-ywt (@CodeCrazy-ywt)
- Sandeep Rajakrishnan (@san-coding)
- ArturoDent (@ArturoDent)
对 vscode
的贡献
- @afonsomatos (Afonso Matos):修复 Shadow Dom 中拖放不起作用的问题 PR #131392
- @akosyakov (Anton Kosyakov):为打开的选项卡使用单独的事件循环 PR #126341
- @AkatQuas (Akat)
- 修复注释中的一些拼写错误,重命名一些方法 PR #130470
- fix(storage):修复方法拼写错误 PR #131051
- @chrisyeh96 (Christopher Yeh):在渲染调用之间保留 KaTeX 宏 PR #129747
- @Chigusa0w0 (Chigusa0w0):修复使用触控板低速向下滚动时的奇怪行为 PR #131231
- @erha19 (Dan):修复:调试控制台变量输出问题 PR #127132
- @Eskibear (Yan Zhang):查看类型层级 PR #130922
- @gjsjohnmurray (John Murray)
- 修复 #126842 刷新成功时清除 Explorer 根文件夹错误指示 PR #126843
- 修复 #129296 在简单文件对话框中导航时保留权限、查询、片段 PR #129310
- 如果在错误对话框中 DA 提供了命令,则抑制“打开 launch.json”命令 (#_124020) PR #130754
- 改进 workbench.editor.experimentalAutoLockGroups 文本 PR #131157
- 修复 #131743 仅在添加“运行到行”时添加菜单分隔符 PR #131744
- @jeanp413 (Jean Pierre)
- 修复重新加载后第一个终端有时非常窄的问题 PR #129668
- 修复在 markdown 中 cmd+点击无效链接创建新文件不起作用的问题 PR #130815
- 修复 notebook UI 显示在终端上方的问题 PR #130854
- 修复参数提示应使用链接悬停颜色 PR #130963
- 修复建议详情应使用链接悬停颜色 PR #130966
- @jihoon-ernesto:添加终端 cmd+. → ctrl+c 键盘绑定以匹配 macOS 终端 PR #131025
- @jsjoeio (Joe Previte):feat: 添加 asWebviewUri 测试,名称中包含端口 PR #131447
- @Kingwl (Wenlu Wang):修复带有内嵌提示的折叠范围 PR #130399
- @lezgomatt (Matthew Go):修复自定义选择框悬停样式 PR #129970
- @nickofolas:修复状态栏中的语法问题 PR #131271
- @nrayburn-tech (Nicholas Rayburn):修复 #124276 批量 Markdown 文件请求 PR #124545
- @remcohaszing (Remco Haszing):定义 window.MonacoEnvironment PR #128949
- @sdissegna-maystreet:[#131407] 修复浏览器中的 Service worker 版本检查 PR #131408
- @spahnke (Sebastian Pahnke):[独立编辑器] 添加支持,以便在注册
CodeActionProvider
时列出提供的代码操作类型 PR #131254 - @spasche (Sylvain Pasche):拆分终端时从 base 复制 URI 权限,修复 #127811 PR #130291
- @ssigwart (Stephen Sigwart):更新选择到匹配括号方向 PR #128931
- @suzmue (Suzy Mueller):按响应顺序对线程进行排序 PR #128686
- @threeal (Alfi Maulana):feat: 添加 .tpp 和 .txx 作为 c++ 扩展名 PR #130101
- @tony-xia (Tony Xia)
- 更新方法名称 PR #129224
- 更新变量名称 PR #129226
- @vagusX (vagusX):fix: 移除 vscode.FileDecoration api 中无用的 priority 字段 PR #129501
- @xgdgsc:点击禁用的断点会启用它而不是移除它 #125904 PR #125931
- @xisui-MSFT
- 修复反汇编视图中焦点堆栈帧的颜色 PR #129721
- 将事件监听器移动到反汇编视图中的 renderTemplate PR #129734
- 改进反汇编视图的可访问性 PR #129788
- 在反汇编不可用时添加一个特殊条目 PR #129797
- @yannickowow (Yanis HAMITI):[debugService #113742] 调试会话结束时的变量显示 PR #131016
- @yash112-lang (Yash Singhal):修复垂直对齐问题 PR #130327
对 vscode-generator-code
的贡献
- @octref (Pine):添加本地开发技巧 PR #296
对 vscode-js-debug
的贡献
- @Manish-Giri (Manish Giri):更新 userDataDir 选项文档 PR #1078
对 vscode-pull-request-github
的贡献
- @joshuaobrien (Joshua O'Brien)
- @RishabhKothaari (Rishab):让视图知道 PR 的审查状态 PR #1833
对 debug-adapter-protocol
的贡献
- @robertoaloi (Roberto Aloi):添加 Erlang 适配器 PR #202
对 language-server-protocol
的贡献
- @okuramasafumi (OKURA Masafumi):最新版本现为 3.16 PR #1321
- @OliverKovacs (Oliver Kovacs):修复了拼写错误 PR #1332
- @vintagedave (David Millington):按语言调整字母排序 PR #1323
- @Wilfred (Wilfred Hughes):修复 honorsChangeAnnotations 描述中的拼写错误 PR #1322
对 monaco-editor
的贡献
- @SpaceComet:网站 playground 的小更新 PR #2616
- @thien-do (Thien Do):在 ESM Integrate 文档中添加与 Vite 的用法 PR #2632
对 monaco-html
的贡献
- @Pranomvignesh (Pranom Vignesh):fix(workerManager.js):添加检查 worker 是否存在 PR #15
对 monaco-languages
的贡献
- @ladyrick (LadyRick):fix(cpp):修复 cpp 语言整数后缀 PR #156