在 VS Code 中尝试

2021 年 3 月 (版本 1.55)

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

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

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


欢迎使用 Visual Studio Code 2021 年 3 月版本。此版本包含许多您可能会喜欢的功能更新,主要亮点包括:

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

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

Insiders 版本: 想尽快试用新功能?您可以下载每夜构建的 Insiders 版本,并在最新更新可用时立即试用。

可访问性

多光标支持

我们添加了对多光标的初步屏幕阅读器支持。每当添加新光标时,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 和 Insiders 版本的新标志。我们还在所有平台上使用相同的标志。

Stable 版本 Insiders 版本 Exploration 版本
Stable icon Insiders icon Exploration icon

改进窗格(sash)定制

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

改进列表/树导航

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

此外,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

Windows 上自动检测 WSL 配置文件并改进默认设置

除了新的配置文件功能外,我们现在还自动检测 WSL 配置文件并默认在列表中显示它们。这可以通过 terminal.integrated.useWslProfiles 设置关闭。

Cygwin 现在也会被自动检测并显示在选择默认配置文件命令中,Git Bash 将作为登录 shell 运行(运行 ~/.bash_profile)。

WebGL 渲染器成为新的默认设置

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

从那时起,WebGL 渲染器的稳定性逐步提高,功能差距也已弥合。我们认为现在是时候进行过渡了,但会密切关注任何问题报告。

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

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

在下个版本中,我们计划完全移除 rendererType 设置,取而代之的是更易理解的 "terminal.integrated.gpuAcceleration": "auto" | "on" | "off" 设置。

无缝终端重新启动

上个版本中,我们引入了当扩展需要更改环境时自动重新启动终端的功能。此版本将防止重新启动时之前产生的闪烁。如果新终端的输出与上一个终端完全相同,重新启动不会导致任何反馈或干扰。

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

编辑器

新的自动闭合对删除行为

在自动闭合对内按下 Backspace 的行为发生了变化。编辑器现在仅在自动插入该字符时才删除匹配的闭合括号或匹配的闭合引号。此行为由新引入的设置 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"

Notebook

多单元格选择

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

Notebook multiple cells selection

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

Notebook multiple cells selection drag and drop

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

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

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

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

我们收到用户反馈,在查看 Notebook 中的更改时,Notebook 单元格元数据或输出的修改可能会分散注意力或无关紧要。VS Code 现在允许您使用设置 notebook.diff.ignoreMetadatanotebook.diff.ignoreOutputs 控制 diff 编辑器中元数据或输出更改的可见性。也可以使用编辑器标题工具栏中的显示输出/元数据差异命令进行切换。

Notebook show metadata/outputs differences

预览功能

持续改进 Notebook 中可扩展的 Markdown 渲染器

我们继续改进对 Notebook 中扩展 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 用户可能已经见过它,并且将在本次迭代过程中缓慢地推广到更多的 Stable 用户。您可以通过将 workbench.startupEditor 设置更改为或远离 gettingStarted 来始终选择启用或禁用新行为。

入门体验演练 主题:GitHub Light

对扩展的贡献

远程开发

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

1.55 版本功能亮点包括:

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

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

GitHub Pull Requests 和 Issues

GitHub Pull Requests 和 Issues 扩展的工作仍在继续,该扩展允许您处理、创建和管理 pull request 和 issue。

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

扩展创作

自定义编辑器和 Notebook 的无标题文件 API

自定义编辑器和 Notebook 现在在打开上下文上包含一个 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 更改时触发的事件。

工作区信任(Workspace Trust)开发

在过去的几个迭代中,我们一直在探索一个我们称之为工作区信任的安全功能。随着它接近发布,我们希望与扩展作者互动,让他们开始适应并获取反馈。目前,尚未更新以处理工作区信任的扩展将继承安全的默认设置;但是,为了获得最佳用户体验,我们请求扩展作者在issue #106488 中阅读更多信息,并订阅更新,以便在我们进入下一个迭代时了解进展。

提议的扩展 API

每个里程碑都会带来新的提议 API,扩展作者可以尝试使用它们。一如既往,我们需要您的反馈。要尝试提议的 API,您需要执行以下操作:

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

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

测试

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

CodeActionContext.triggerKind

CodeActionContext 上提议的 triggerKind 属性用于跟踪从 CodeActionProvider 请求代码操作的原因。此属性的可能值包括:

  • Invoke:代码操作是显式请求的,通过键盘快捷方式或命令触发。

  • Automatic:代码操作是无需显式用户操作而请求的。这包括在文档内容更改时请求代码操作。

提供程序可以使用 triggerKind 返回不同的结果集,具体取决于代码操作的请求方式。例如,一个自动触发的重构代码操作提供程序可能只返回当前精确选区内的重构,以限制代码操作灯泡的显示频率。然而,当显式请求代码操作时,同一提供程序可能会自动扩展当前选区,以尝试显示用户可能感兴趣的当前位置的所有重构。

PortAttributesProvider

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

快速输入选项标题

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

语言服务器协议

一份 diagnostic pull model specification 的草稿版本现已开放供反馈。

调试适配器协议

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

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

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

工程

更快的 Snap 启动速度

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

Electron 沙盒(sandbox)进展

在此里程碑中,我们继续使 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 的贡献