现已发布!了解 11 月的新功能和修复。

2021 年 3 月(版本 1.55)

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

更新 1.55.2:此更新解决了这些安全问题

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


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

如果您想在线阅读这些发行说明,请访问 Updates on code.visualstudio.com

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

内部人员:想尽快尝试新功能?您可以下载每日 内部人员 构建版本,并在最新更新可用时立即试用。

辅助功能

多光标支持

我们为 多光标添加了初始屏幕阅读器支持。每当添加新光标时,VS Code 现在会将其与光标所在的行和列位置一起通告。VS Code 还会通告何时删除了辅助光标。我们计划在收到更多反馈后进一步改进多光标辅助功能。

屏幕阅读器的行数限制增加到 1000 行

由于上游问题已修复,我们将“全部朗读”命令可以读取的行数增加。以前,我们对屏幕阅读器一次可以通告的行数有 100 行的硬性限制,现在我们将此限制增加到 1000 行。为了完全没有限制,还需要进一步的上游修复。

由于此更改,设置 editor.accessibilityPageSize 现在已弃用。我们将在接下来的几个版本中继续支持此设置,但我们计划在未来完全删除它。

工作台

Windows 上的加密更新

我们更改了在 Windows 上加密机密的方式,这会影响使用 secrets API 的设置同步和扩展。Windows 用户将在更新时自动注销,并且需要再次进行身份验证。

macOS Big Sur 的更新品牌图标

Brand icons on macOS Big Sur

我们一直在努力更新 macOS 上的 VS Code 品牌图标,以匹配 Big Sur 的新视觉风格。我们感谢社区的所有反馈,并且很高兴发布稳定版和内部人员版的新徽标。我们还在所有平台上使用相同的徽标。

稳定版 内部人员版 探索版
Stable icon Insiders icon Exploration icon

改进的窗格调整自定义

新的 workbench.sash.hoverDelay 设置允许您定义窗格的悬停反馈延迟。现有的 workbench.sash.size 设置已得到改进,以便仍然为触摸设备提供较大的抓取区域,同时保持 UI 的简洁。

改进的列表/树导航

列表和树现在支持自定义键盘导航模式,该模式在笔记本等特定区域中的行为更加自然。

此外,Shift+Click 范围选择的行为更加确定。

默认开启选项卡修饰

现在默认情况下,编辑器的选项卡修饰处于开启状态,要配置它们,请使用 workbench.editor.decorations.colorsworkbench.editor.decorations.badges

带有修饰的编辑器选项卡,显示该文件有警告并且已针对 git 修改 主题:GitHub Light Theme

在键盘快捷方式编辑器中调整列的大小

键盘快捷方式编辑器现在已重构为使用新的表小部件,允许用户在编辑器中调整列的大小。

扩展管理改进

  • VS Code 现在检测通过 VS Code CLI 安装/卸载的扩展。扩展可以在活动窗口(实例)中激活/取消激活,并且将正确显示在“扩展”视图中。

  • VS Code 现在显示在扩展中包含的扩展集,该扩展在单独的 扩展包 选项卡中设置 extensionPack 属性,即使该扩展未被归类为 扩展包

Extension that is not an extension pack but includes other extensions

主题:GitHub Light Theme

问题视图中的负文本过滤

您现在可以通过在筛选文本前加上 ! 来筛选“问题”视图中不包含特定文本的问题。

报告 Marketplace 问题

上个月,我们强调有一个新的 公共存储库,用于处理与扩展 Marketplace 相关的问题。现在,VS Code 的问题报告器支持在此存储库中创建问题。

配置树悬停延迟

现在可以使用 workbench.hover.delay 配置扩展贡献树视图的悬停延迟。

Emmet

emmet.extensionsPath 设置现在仅接收字符串数组,并且可以直接在“设置”编辑器中编辑。

在打开的编辑器中搜索

您现在可以在工作区搜索中切换仅在打开的编辑器中搜索复选框,以从搜索整个工作区更改为仅搜索在编辑器选项卡中打开的文件。以前是通过选择加入来启用的,此迭代我们增强了在 VS Code 会话中尚未加载的文件的行为,并默认启用了它。

控制源代码管理输入的字体大小

您现在可以通过新的 scm.inputFontSize 设置更改源代码管理输入的字体大小。

集成终端

终端配置文件

终端现在支持定义的配置文件,这些配置文件会显示在终端的下拉列表中,以便方便地启动非默认 shell

Terminal profiles show up below the terminal processes and above the configuration items

VS Code 将通过此菜单自动检测并显示一些更常用的 shell,但也可以使用 terminal.integrated.profiles.<platform> 设置进行配置。使用此设置,可以添加新配置文件、更改现有配置文件和删除默认配置文件。例如

"terminal.integrated.profiles.windows": {
  // Add a PowerShell profile that doesn't run the profile
  "PowerShell (No Profile)": {
      // Some sources are available which auto detect complex cases
      "source": "PowerShell",
      "args": ["-NoProfile"],
      // Name the terminal "PowerShell (No Profile)" to differentiate it
      "overrideName": true
  },
  // Remove the builtin Git Bash profile
  "Git Bash": null,
  // Add a Cygwin profile
  "Cygwin": {
    "path": "C:\\cygwin64\\bin\\bash.exe",
    "args": ["--login"]
  }
}

最初添加配置文件的推荐方法是通过 选择默认配置文件 命令,该命令允许基于现有配置文件或其他检测到的 shell 创建配置文件。

The Select Default Profile command shows all configured and detected profiles

自动检测到的 WSL 配置文件和 Windows 上改进的默认值

除了新的配置文件功能外,我们现在还自动检测 WSL 配置文件,并在默认情况下将其显示在列表中。可以使用 terminal.integrated.useWslProfiles 设置将其关闭。

Cygwin 现在也可以自动检测到,并在 选择默认配置文件 命令中公开,并且 Git Bash 将作为登录 shell 运行(运行 ~/.bash_profile)。

WebGL 渲染器是新的默认值

终端在 2019 年 11 月的发布版 中首次获得了实验性的 WebGL 渲染器,当时根据我们的计算,它可以将性能提高高达 900%,如果您的环境在使用标准 2D 画布上下文进行渲染时存在问题,则可以提高更多。

从那时起,WebGL 渲染器的稳定性逐渐提高,并且其功能差距已弥合。我们认为现在是进行过渡的最佳时机,但我们将关注任何问题报告。

作为这项工作的一部分,我们还添加了一些回退逻辑。当 "terminal.integrated.rendererType": "auto" 时,会发生以下情况

  1. WebGL 渲染器将尝试启动。
  2. 如果失败,例如由于缺少操作系统/浏览器支持
    • 将启用画布渲染器,并开始测量渲染帧所需的时间。
  3. 如果前 20 帧的渲染速度较慢,例如,如果存在硬件问题或 GPU 渲染被禁用
    • 将启用 DOM 渲染器。

在下一个版本中,我们计划完全移除 rendererType 设置,转而使用更容易理解的 "terminal.integrated.gpuAcceleration": "auto" | "on" | "off"

无缝的终端重新启动

在上个版本中,我们引入了当扩展想要更改环境时自动重新启动终端的功能。此版本将防止重新启动时之前发生的闪烁。如果新终端的输出与上一个终端相同,则重新启动不会造成反馈或干扰。

还有一个新设置可以完全禁用此自动重新启动 terminal.integrated.environmentChangesRelaunch

编辑器

新的自动闭合配对删除

当位于自动闭合配对内时,按下 退格键 的行为已更改。现在,编辑器只会删除匹配的右括号或匹配的右引号,如果该字符是由编辑器自动插入的。此行为由一个新引入的设置 editor.autoClosingDelete 控制,您可以将其配置为 "always" 以获得之前的行为。

调试

断点改进

用于编辑条件和命中次数的内联菜单

我们现在显示一个内联菜单,用于编辑函数断点的条件和命中次数。以前,内联编辑按钮会自动选择要编辑的条件。现在,该菜单应该使流程更轻松,并为用户提供更多控制权。

Breakpoint condition menu

支持所有数据断点访问类型

现在,VS Code 的通用调试器 UI 支持调试适配器协议中定义的所有数据断点访问类型,作为“变量”视图中的上下文菜单操作。

  • 在值读取时中断:每次读取变量时都会命中该断点。
  • 在值更改时中断:每次变量被更改时都会命中该断点(此操作以前可用)。
  • 在值访问时中断:每次读取或更改变量时都会命中该断点。

请注意,调试扩展必须选择加入此功能才能使各个操作可用。目前,只有 Mock Debug 扩展(模拟)支持所有三种访问类型,但我们希望其他调试扩展也很快跟进,例如 Java 扩展。

Data breakpoints break on access types

在启动调试程序之前清除终端

某些调试扩展允许您在 VS Code 的集成终端中启动调试程序。为了保持集成终端的数量较少,如果终端没有被仍在运行的命令阻塞,VS Code 会尝试重用终端。这种方法的一个后果是,之前的命令和程序输出仍将在终端中可见,这有时会令人困惑。

在此版本中,我们引入了一个新功能,可以在启动新的调试会话之前自动清除集成终端。该功能由新设置 debug.terminal.clearBeforeReusing 控制。

JavaScript 调试

像往常一样,完整的更改列表可以在 vscode-js-debug 更新日志 中找到。

启动调试并在入口点停止

去年我们迁移到新的调试器时,调试:启动调试并在入口点停止 被遗漏了。它再次起作用,并请求调试器在您的 Node.js 程序的第一行暂停。默认情况下,它绑定到 F10

改进了对符号链接的处理

使用符号链接调试 Node.js 程序 可能需要将特殊标志 传递给程序。如果没有这些标志,断点将保持未绑定状态,并且很难弄清楚出了什么问题。现在,调试器将自动检测这些情况并提供有用的通知。

Notification that says "It looks like you have symlinked files. You might need to update your configuration to make this work as expected," with buttons to "Read More" and "Ignore"

笔记本

多单元格选择

我们现在支持使用鼠标 (Shift+Click) 或键盘快捷键 (Shift+Arrow) 在笔记本中选择多个单元格。选择多个单元格后,您可以复制/剪切/粘贴/移动/复制选定的单元格。

Notebook multiple cells selection

您还可以一起拖放多个单元格。

Notebook multiple cells selection drag and drop

限制:当选择多个不同的单元格范围时,大多数命令将仅针对第一个范围或焦点范围执行。我们将在未来的版本中继续改进此体验。

我们还添加了一个新的颜色标记 notebook.inactiveSelectedCellBorder,它没有默认颜色,但可用于喜欢使用边框而不是背景颜色进行多选的主题。

Notebook cells being multi-selected via border instead of background colors

在差异编辑器中显示/隐藏输出和元数据差异

我们从用户那里了解到,在查看笔记本中的更改时,笔记本单元格元数据或输出中的修改可能会分散注意力或不相关。VS Code 现在允许您使用设置 notebook.diff.ignoreMetadatanotebook.diff.ignoreOutputs 来控制差异编辑器中元数据或输出更改的可见性。也可以通过使用编辑器标题工具栏中的显示输出/元数据差异命令来切换它们。

Notebook show metadata/outputs differences

预览功能

持续改进笔记本中可扩展的 Markdown 渲染器

我们继续改进对扩展笔记本中 Markdown 渲染器的支持。此迭代的重点是提高新渲染器的性能。我们还修复了新渲染器引入的许多回归。

Emoji and a math formula being rendered in a notebook cell

新渲染器默认仍处于禁用状态,但我们现在更有信心能够很快启用它们。您可以使用未记录的 notebook.experimental.useMarkdownRenderer: true 设置立即试用新的可扩展 Markdown 渲染器。启用此设置并重新启动 VS Code 后,您应该能够在 Markdown 单元格中使用 :emoji: 和 KaTeX $math$ 公式。

入门

我们正在继续改进我们的默认启动编辑器,以便提供相关的扩展贡献提示和演练,旨在使新的用户更容易理解核心 VS Code 功能和扩展贡献。许多 Insiders 用户可能已经看到了它,并且它将在本次迭代过程中缓慢地推广到更多稳定用户。您始终可以通过将 workbench.startupEditor 设置修改为 gettingStarted 或取消 gettingStarted 来选择加入或退出新行为。

入门体验演练 主题:GitHub Light

对扩展的贡献

远程开发

远程开发扩展 上继续工作,该扩展允许您使用容器、远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为全功能的开发环境。

1.55 中的功能亮点包括

  • 双击以命名端口
  • 配置默认端口检测行为
  • 更新了在容器卷中克隆存储库的体验

您可以在 远程开发发行说明 中了解新的扩展功能和错误修复。

GitHub Pull Requests 和 Issues

GitHub Pull Requests 和 Issues 扩展上继续工作,该扩展允许您处理、创建和管理 pull requests 和 issues。

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

扩展编写

用于自定义编辑器和笔记本的无标题文件 API

自定义编辑器和笔记本现在在打开上下文中包含一个 untitledDocumentData 属性,其中包括用户触发使用重新打开的无标题文件中包含的数据缓冲区。如果填充了此属性,则应读取此属性而不是 URI,因为 URI 在无标题文件情况下不指向磁盘上的文件。

内联值提供程序 API

上次里程碑 引入的建议的内联值提供程序 API 已最终确定,现在可以在 Marketplace 上发布的扩展中使用。

新的另存为子菜单

有两个新的菜单位置,它们在 UI 中显示为另存为子菜单

  • menuBar/edit/copy - 用于标题栏编辑菜单
  • editor/context/copy - 用于编辑器上下文菜单

Copy As submenu

ExtensionContext 上的新扩展属性

扩展作者现在可以使用 ExtensionContext 上的新 extension 属性,该属性传递到扩展的 activate 函数中。这将返回与 vscode.extensions.getExtension(<extension-id>) 返回的相同的 Extension 实例,其中包含诸如扩展的 ID、版本和序列化的 packageJSON 属性之类的属性,您可以在其中直接从扩展的 package.json 文件访问数据。

Docker compose 语言

添加了一种新的 Docker compose 语言。这不会有太多面向用户的更改;但是,扩展作者现在可以使用它来定位 Docker compose 文件。语言 ID 为 dockercompose

遥测启用 API

扩展始终可以通过 telemetry.telemetryLevel 的配置值来检查用户是否已禁用遥测,但无法检查用户是否使用了 CLI 标志 --disable-telemetry。在这个里程碑中,我们在扩展 API 的 env 对象中添加了两个属性:isTelemetryEnabledonDidChangeTelemetryEnabled。前者考虑了 CLI 标志和当前配置值。后者是每次 isTelemetryEnabled 更改时都会触发的事件。

工作区信任开发

在几个迭代中,我们一直在探索一个我们称为工作区信任的安全功能。随着我们临近发布,我们希望让扩展作者参与到他们的入职流程中并获得反馈。目前,未更新为处理工作区信任的扩展将继承安全的默认值;但是,为了获得最佳用户体验,我们要求扩展作者在 issue #106488 中阅读更多信息并订阅更新,因为我们将在下一个迭代中取得进展。

提议的扩展 API

每个里程碑都带有新的建议的 API,扩展作者可以试用它们。与往常一样,我们需要您的反馈。这是您试用建议的 API 必须做的事情

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

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

测试

本月,我们的工作重点是解决测试 API 的提供程序部分。主要是转向一种方法,该方法允许按需和异步加载测试。转向异步方法提出了挑战,需要扩展主机 API 的新语义来解决。本次迭代,我们合并了更改,并将在接下来的一个月对其进行改进。我们希望在四月份的迭代中开始完成测试 API 的部分内容。

CodeActionContext.triggerKind

建议的 CodeActionContext 上的 triggerKind 属性会跟踪为何从 CodeActionProvider 请求代码操作。此属性的可能值为

  • Invoke:代码操作是显式请求的,无论是通过键盘快捷键还是命令。

  • Automatic:代码操作是在没有显式用户操作的情况下请求的。这包括在文档内容更改时请求代码操作。

提供程序可以使用 triggerKind 根据请求代码操作的方式返回不同的结果集。例如,自动触发的重构代码操作提供程序可能只返回当前选择的精确重构,以限制代码操作灯泡的出现频率。但是,当显式请求代码操作时,同一提供程序可能会自动扩展当前选择,以尝试显示用户可能对当前位置感兴趣的所有重构。

PortAttributesProvider

任何启动侦听端口的进程并希望在使用 VS Code 远程扩展时获得出色体验的扩展,都应考虑提供反馈并采用新的 PortsAttributesProvider API。由于 VS Code 在使用其中一个远程扩展时会检测并自动转发端口,因此任何侦听端口的扩展都将自动转发这些端口。但是,通常这些端口仅对扩展的内部工作很重要,用户转发这些端口并没有用处。此 API 可用于设置检测到端口时的行为,以防止不必要地自动转发不应面向用户的端口。

快速输入选项标题

传递给 showQuickPickQuickPickOptions 和传递给 showInputBoxInputBoxOptions 现在具有一个可选的 title 属性,该属性以前仅在 createQuickPick API 中可用。设置此属性后,会在快速输入上显示带有您指定标题的标题栏。

语言服务器协议

诊断拉取模型规范的草案版本现已可供反馈。

调试适配器协议

停止事件现在可以报告命中的断点

已向停止事件添加了一个可选属性 hitBreakpointIds,其中包含触发该事件的断点的 ID。

请注意,VS Code 尚未以任何方式显示此信息。我们正在 问题 #118743 中讨论可能的 UI 想法。

工程

更快的 Snap 启动

Snap 包现在使用 lzo 压缩算法,该算法提供了更快的启动时间。有关更多信息,请参阅 Ubuntu 关于该算法的博客文章

Electron 沙盒的进展

此里程碑,我们继续使 VS Code 窗口准备好启用 Electron 的 沙盒上下文隔离功能。

具体来说

  • 我们能够将渲染器中的一些本机模块需求移至其他进程。
  • 我们能够在启用沙盒选项后提供更多组件和服务。

文档

VS Code 和课堂上的 JavaScript

阅读泰国 Naresuan 大学的一位计算机科学讲师的案例研究,他在他的 JavaScript 和 Node.js 入门 Web 开发课程中使用 VS Code。了解他推荐给学生的设置和扩展,以及有用的 Node.js 和 JavaScript 教育扩展包

Raspberry Pi

有一个新主题描述了如何在 Raspberry Pi 设备上安装 VS Code。

Raspberry Pi logo

值得注意的修复

  • 74505: 以 @ 开头的 Emmet 内置插件仅在块内展开
  • 97632: 在编辑纯 xml 文档时 Emmet 会启动
  • 107506: 当名称不唯一时,调试变量视图不显示调试适配器的多个变量
  • 112675: Emmet 缩写在 .scss 文件中不起作用
  • 113801: 制表符换行 - 换到新行时制表符不应填充所有剩余空间
  • 115814: 无法在集成终端中输入中文
  • 117350: Home/End、PageUp/PageDown 也应该在操作中导航吗?
  • 117967: 复制 + 粘贴会自动在新选项卡中打开文件
  • 118210: 当调试控制台消息具有不同的源位置时不应折叠
  • 118557: 具有嵌套文件夹的工作区中 files.exclude 的奇怪行为
  • 118839: 我的屏幕阅读器在状态栏中找不到有关远程连接的信息
  • 119585: 关闭文件时所有问题都消失

感谢

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

对我们问题跟踪的贡献

vscode 的贡献

vscode-emmet-helper 的贡献

vscode-eslint 的贡献

vscode-hexeditor 的贡献

vscode-html-languageservice 的贡献

vscode-js-debug 的贡献

vscode-languageserver-node 的贡献

vscode-mock-debug 的贡献

vscode-textmate 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

language-server-protocol 的贡献