尝试以扩展 VS Code 中的代理模式!

2021 年 3 月 (版本 1.55)

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

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

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


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

如果您想在线阅读这些发行说明,请访问 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 和 Insiders 的新徽标。我们也在所有平台上使用相同的徽标。

稳定版 预览版 探索版
Stable icon Insiders icon Exploration icon

改进的 Sash 自定义

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

改进的列表/树导航

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

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

默认启用选项卡装饰

编辑器选项卡装饰现在默认启用,要配置它们,请使用workbench.editor.decorations.colorsworkbench.editor.decorations.badges

带装饰的编辑器选项卡,显示文件有警告并且已修改以进行 Git 操作 主题:GitHub Light 主题

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

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

扩展管理改进

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

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

Extension that is not an extension pack but includes other extensions

主题:GitHub Light Theme

问题视图中的负文本过滤

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

报告 Marketplace 问题

上个月,我们强调了有一个新的公共存储库用于与 Extension 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.设置进行配置。通过此设置,可以添加新配置文件、更改现有配置文件和删除默认配置文件。例如

"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. 如果失败,例如由于缺少 OS/浏览器支持
    • 画布渲染器将被启用,并且将开始测量渲染帧所需的时间。
  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"

Notebook

多单元格选择

我们现在支持使用鼠标 (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 用户可能已经见过它,它将在本次迭代中慢慢向更多 Stable 用户推出。您始终可以通过将workbench.startupEditor设置修改为gettingStarted或从gettingStarted修改,来选择启用或禁用新行为。

入门体验演练 主题: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、版本和序列化的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 语义来解决的挑战。本次迭代我们合并了更改,并将在下个月进行完善。我们希望在 4 月的迭代中开始最终确定测试 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 在课堂上

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

树莓派

有一个新主题描述了如何在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 的贡献