现已推出!阅读 10 月份的新功能和修复。

2021 年 3 月(版本 1.55)

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

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

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


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

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

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

内部人员:希望尽早尝试新功能?您可以下载最新的 内部人员 版本,并在它们可用时立即尝试最新的更新。

辅助功能

多光标支持

我们为 多个光标 添加了初始的屏幕阅读器支持。每当添加新的光标时,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 亮色主题

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

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

扩展管理改进

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

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

Extension that is not an extension pack but includes other extensions

主题:GitHub 亮色主题

问题视图中的负文本过滤

您现在可以通过在过滤器文本前面加上 ! 来从问题视图中过滤不包含特定文本的问题。

报告市场问题

上个月,我们强调了一个新的 公共存储库,用于与扩展市场相关的問題。现在,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 支持调试适配器协议中定义的所有数据断点访问类型,作为 VARIABLES 视图中的上下文菜单操作

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

请注意,调试扩展必须选择加入此功能才能使各个操作可用。目前,只有 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 功能和扩展贡献对新用户更容易使用。许多 Insider 用户可能已经看到了它,它将在本次迭代期间逐渐推广到更多稳定用户。您始终可以通过将 workbench.startupEditor 设置修改为或远离 gettingStarted 来选择加入或退出新行为。

Getting Started 体验演练 主题:GitHub Light

对扩展的贡献

远程开发

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

1.55 中的功能亮点包括

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

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

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展的工作正在继续,该扩展允许您处理、创建和管理拉取请求和问题。

要了解所有新功能和更新,您可以查看扩展的 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 发生更改时触发的事件。

工作区信任开发

在几个迭代中,我们一直在探索一项我们称之为工作区信任的安全功能。随着我们接近发布,我们希望让扩展作者开始他们的入职流程并获得反馈。目前,没有更新为处理工作区信任的扩展将继承安全的默认值;但是,为了获得最佳的用户体验,我们请求扩展作者阅读更多信息 在问题 #106488 中 并在我们完成下一个迭代时订阅更新。

建议的扩展 API

每个里程碑都附带新的建议 API,扩展作者可以试用它们。与往常一样,我们希望获得您的反馈。这是您试用建议 API 的步骤

  • 您必须使用 Insider 版本,因为建议的 API 会经常更改。
  • 您必须在扩展的 package.json 文件中包含此行:"enableProposedApi": true
  • vscode.proposed.d.ts 文件的最新版本复制到您的项目源位置。

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

测试

这个月我们的工作重点是解决测试 API 的提供程序部分。主要是 转向一种方法,允许按需异步加载测试。转向异步方法带来了挑战,需要使用扩展主机 API 中的新语义来解决。在此迭代中,我们合并了这些更改,并将继续在未来一个月内改进它们。我们希望在 4 月迭代中开始最终确定测试 API 的部分内容。

CodeActionContext.triggerKind

建议的 CodeActionContext 上的 triggerKind 属性跟踪从 CodeActionProvider 请求代码操作的原因。此属性的可能值是

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

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

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

端口属性提供者

任何启动在端口上监听进程的扩展,如果希望在使用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

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

树莓派

有一个新主题介绍如何在树莓派设备上安装 VS Code。

Raspberry Pi logo

值得注意的修复

  • 74505: Emmet 内置插件以 @ 开头的作弊行为,仅在块内扩展
  • 97632: 在编辑纯 xml 文档时 Emmet 会启动
  • 107506: 调试变量视图在调试适配器中的名称不唯一时不显示多个变量
  • 112675: Emmet 缩写无法在 .scss 文件中使用
  • 113801: 选项卡换行 - 选项卡不应在换行时填充所有剩余空间
  • 115814: 无法在集成终端中输入中文
  • 117350: Home/End、PageUp/PageDown 也应该在操作中导航吗?
  • 117967: 复制 + 粘贴会自动在新选项卡中打开文件
  • 118210: 调试控制台不应在消息具有不同源位置时折叠消息
  • 118557: 文件的奇怪行为。在具有嵌套文件夹的工作区中排除
  • 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 的贡献