2021年3月(版本1.55)

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

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

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


欢迎来到2021年3月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:

如果您想在线阅读这些发布说明,请访问更新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 更新品牌图标

macOS Big Sur上的品牌图标

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

Stable Insiders Exploration
Stable icon Insiders icon Exploration icon

改进的窗框定制

一个新的workbench.sash.hoverDelay设置允许您定义悬停反馈的延迟。现有的workbench.sash.size设置已经改进,以便仍然为触摸设备提供较大的抓取区域,同时保持用户界面的整洁。

改进的列表/树导航

列表和树现在支持自定义键盘导航模式,在特定区域(如Notebooks)中表现得更加自然。

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

默认开启标签装饰

编辑器的标签装饰现在默认开启,要配置它们请使用 workbench.editor.decorations.colorsworkbench.editor.decorations.badges

编辑器标签,显示文件有警告并且已为git修改 主题: GitHub Light Theme

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

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

扩展管理改进

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

  • VS Code 现在会在一个单独的扩展包标签中显示包含在设置了extensionPack属性的扩展中的扩展集,即使该扩展未被分类为扩展包

不是扩展包但包含其他扩展的扩展

主题: GitHub Light Theme

问题视图中的负面文本过滤

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

报告市场问题

上个月我们强调了一个新的公共仓库,用于处理与扩展市场相关的问题。现在,VS Code的问题报告器支持在这个仓库中创建问题。

配置树形悬停延迟

扩展贡献的树视图的悬停延迟现在可以通过workbench.hover.delay进行配置。

Emmet

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

在打开的编辑器中搜索

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

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

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

集成终端

终端配置文件

终端现在支持定义的配置文件,这些配置文件会出现在终端的下拉菜单中,以便方便地启动非默认的shell:

终端配置文件显示在终端进程下方和配置项上方

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

"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创建配置文件。

选择默认配置文件命令显示所有已配置和检测到的配置文件

自动检测的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

编辑器

新的自动闭合对删除

在自动闭合对内部按下Backspace的行为已经改变。编辑器现在只有在编辑器自动插入该字符时才会删除匹配的闭合括号或匹配的闭合引号。此行为通过新引入的设置editor.autoClosingDelete进行控制,可以将其配置为"always"以恢复之前的行为。

调试

断点改进

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

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

断点条件菜单

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

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

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

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

数据断点在访问类型上中断

在启动调试对象之前清除终端

一些调试扩展允许你在VS Code的集成终端中启动调试对象。为了减少集成终端的数量,VS Code会尝试重用未被仍在运行的命令阻塞的终端。这种方法的一个后果是,之前的命令和程序输出将保留在终端中,这有时会让人感到困惑。

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

JavaScript 调试

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

开始调试并在入口处停止

当我们去年迁移到新的调试器时,调试:开始调试并在入口处停止功能被遗忘了。现在它再次工作,并请求调试器在您的Node.js程序的第一行暂停。默认情况下,它绑定到F10

改进的符号链接处理

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

通知显示“看起来您有符号链接文件。您可能需要更新配置以使此功能按预期工作”,并带有“了解更多”和“忽略”按钮

笔记本

多单元格选择

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

Notebook 多单元格选择

你也可以一起拖动和放置多个单元格。

Notebook 多单元格选择拖放

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

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

通过边框而不是背景颜色多选笔记本单元格

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

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

笔记本显示元数据/输出差异

预览功能

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

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

笔记本单元格中渲染的表情符号和数学公式

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

入门指南

我们正在继续对我们的默认启动编辑器进行全面改革,以提供相关的扩展贡献提示和教程,旨在使核心VS Code功能和扩展贡献对新用户更加友好。许多Insiders用户可能已经看到了它,并且在本迭代过程中将逐步向更多Stable用户推出。您始终可以通过将workbench.startupEditor设置修改为gettingStarted或远离gettingStarted来选择加入或退出新行为。

入门体验教程 主题: GitHub Light

对扩展的贡献

远程开发

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

1.55版本的功能亮点包括:

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

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

GitHub 拉取请求和问题

工作仍在继续在GitHub Pull Requests and Issues扩展上,该扩展允许您处理、创建和管理拉取请求和问题。

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

扩展开发

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

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

内联值提供者 API

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

新的复制为子菜单

有两个新的菜单位置,它们在用户界面中显示为复制为子菜单:

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

复制为子菜单

ExtensionContext 上的新扩展属性

扩展作者现在可以使用ExtensionContext上的新extension属性,该属性被传递到扩展的activate函数中。这将返回与vscode.extensions.getExtension()返回的相同的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需要做的事情:

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

你不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

测试

本月我们的工作主要集中在解决测试API的提供者部分。主要是,转向一种方法,允许按需和异步加载测试。转向异步方法带来了挑战,需要扩展主机API的新语义来解决。在这个迭代中,我们合并了这些更改,并将在接下来的一个月中对其进行改进。我们希望在四月的迭代中开始最终确定测试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 尚未以任何方式展示此信息。我们正在issue #118743中讨论可能的用户界面想法。

工程

更快的Snap启动

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

Electron沙盒的进展

在这个里程碑中,我们继续为VS Code窗口做好准备,以便启用Electron的沙盒上下文隔离功能。

具体来说:

  • 我们能够将渲染器中一些原生模块的需求转移到其他进程中。
  • 当启用沙盒选项时,我们能够提供更多的组件和服务。

文档

VS Code 和 JavaScript 在课堂中的应用

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

树莓派

有一个新主题描述了如何在树莓派设备上安装VS Code

树莓派标志

显著的修复

  • 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的贡献: