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

2020 年 5 月(版本 1.46)

更新 1.46.1:该更新解决了这些 问题

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


欢迎使用 2020 年 5 月发布的 Visual Studio Code。

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

辅助功能

在本里程碑中,我们再次收到了来自社区的有用反馈,这让我们能够识别和解决许多 辅助功能问题

  • 状态栏现在支持键盘导航。当通过 转到下一部分 (F6) 将焦点设置在状态栏上时,使用箭头键在状态栏条目之间移动。
  • 为了更轻松地使用键盘开始和结束选择,有四个新的命令:
    • 设置选择锚点 (⌘K ⌘B (Windows, Linux Ctrl+K Ctrl+B))
    • 从锚点选择到光标 (⌘K ⌘K (Windows, Linux Ctrl+K Ctrl+K))
    • 取消选择锚点 (Escape)
    • 转到选择锚点
  • 活动栏条目现在具有 tab 角色并设置适当的 aria-expanded 状态。
  • 编辑器的 Aria 标签现在可以正确地传达以下编辑器状态:pinnedpreviewreadonly

工作台

灵活的布局

在几次迭代中,我们宣布了在使我们的布局更加灵活方面的进展。随着此版本的发布,这些功能集现在已准备好投入普遍使用。以下是这些功能的概述。

在侧边栏和面板之间移动视图

您可能更希望将侧边栏中的视图放在面板中,反之亦然。要执行此操作,您现在可以通过其标题拖动视图,或者通过其图标或标题从当前位置拖动整个组并将其移动到所需位置。从键盘上,可以使用命令 视图:移动视图 (workbench.action.moveView) 和 视图:移动焦点视图 (workbench.action.moveFocusedView)。

以下是将搜索拖动到面板并将问题拖动到侧边栏的演示。

Moving Views Between Side Bar and Panel

将搜索拖动到面板并将问题拖动到活动栏

主题:GitHub Light

之前有一个设置用于将搜索视图从侧边栏移动到面板,而现在该设置已过时,因为可以使用拖放来代替。

分组视图

您可能还希望将来自不同扩展的一些视图分组在一起,或者您觉得内置视图的默认分组并不适合您。您可以将视图移动到现有组中,也可以为选定的一组视图创建新组。这与之前一样,适用于侧边栏和面板。以下是几个例子。

Moving Timeline from Explorer to Source Control

将时间线视图从资源管理器拖动到源代码管理

Side By Side Debug Console and Watch View

将监视视图从运行侧边栏拖动到面板中的调试控制台旁边

Custom History Group

在侧边栏和面板中使用时间线和 GitLens 创建自定义历史记录组

主题:GitHub Light

重置视图位置

可以通過其上下文菜單將視圖和視圖組重置為其默认位置。當視圖已從其默認位置移動時,將有一個 重置位置 條目將其移回其主頁。還有一些命令 視圖:重置焦点視圖位置 (workbench.action.resetFocusedViewLocation) 和 視圖:重置視圖位置 (workbench.action.resetViewLocations) 用于将所有视图和组重置回其默认位置。

面向贡献视图或视图容器的扩展作者

当视图在工作台中移动时,有时需要以不同的方式呈现它们,无论是使用图标还是额外的上下文,前提是它们不在其默认位置。在贡献视图时,作者现在可以提供 icon 属性和 contextualTitle。如果未提供,则将默认使用其所贡献到的视图容器的图标和标题。

最后,扩展作者现在可以直接将视图容器贡献到 panel 而不是 activitybar,如 树视图扩展指南 中所述。

固定选项卡

您现在可以通过上下文菜单或使用新命令 workbench.action.pinEditor (⌘K ⇧Enter (Windows, Linux Ctrl+K Shift+Enter)) 来固定选项卡。

Pin Tabs

主题:GitHub Light

固定选项卡具有一些有用的功能,可以帮助标记对您重要的文件。

  • 固定选项卡始终显示在未固定选项卡之前。
  • 如果您打开了多个选项卡,它们不会滚动到视图之外。
  • 使用 关闭其他 等命令时,它们不会关闭。
  • 即使您超过了打开的编辑器数量的限制,它们也不会关闭。

您也可以拖放选项卡以更改固定状态。

固定选项卡会缩小到图标大小(或者如果禁用了图标,则会显示文件名的第一个字母)以节省空间。如果您想在固定选项卡中看到修改指示器,可以设置 workbench.editor.highlightModifiedTabs: true

注意: 我们仍在考虑其他方法来呈现固定选项卡。如果您有意见,请随时在关于 显示辅助选项卡栏 或有一个设置来 为固定选项卡显示更多上下文 的现有问题中分享您的想法。

搜索编辑器

现在有几个新选项可以配置 搜索编辑器 的创建方式。

  • search.searchEditor.defaultNumberOfContextLines - 配置搜索编辑器默认显示的上下文行数。
  • search.searchEditor.reusePriorSearchConfiguration - 在创建新的搜索编辑器时,重用上次活动的搜索编辑器的配置。
  • 支持在按键绑定参数中传递搜索编辑器配置变量 (参数详细信息 )。

资源管理器自动显示焦点,而不会强制滚动

explorer.autoReveal 设置有一个新选项 focusNoScroll。使用此选项时,资源管理器将在打开文件时自动选择它们,但不会滚动到资源管理器视图中以显示它们。

列表和树的平滑滚动

启用 workbench.list.smoothScrolling 设置将使列表和树中的滚动更加平滑,前提是硬件没有平滑滚动(例如,Windows 上的离散鼠标滚轮)。

Smooth scrolling

窗格大小配置

您现在可以使用 workbench.sash.size 设置以像素为单位配置视图/编辑器之间的拖动区域的反馈区域大小。如果您觉得使用鼠标调整视图大小很困难,请将其设置为较大的值。

屏幕录制模式字体大小

新的 screencastMode.fontSize 设置允许您以像素为单位配置屏幕录制模式中使用的字体大小。

VS Code 现在将允许直接打开指向工作区中任何 GitHub 远程仓库的 URL 链接。此外,如果您已使用 GitHub 登录,则所有指向 GitHub 个人资料页面的链接都将被视为受信任的链接。

编辑器

已关闭文件的跨文件撤消

现在可以跨文件撤消,即使这些文件已在中途关闭也是如此。编辑的文件将重新打开,并且跨文件操作(例如重命名符号)将在所有受影响的文件中撤消。

不寻常的行终止符

VS Code 目前识别 CR(回车符)、LF(换行符)和 CRLF 作为行终止符。一些编程语言对构成行终止符的定义不同。这在不同语言之间有所不同,例如 LS(行分隔符)和 PS(段落分隔符)是 C# 和 JavaScript 中的行终止符,但在 HTML、PHP 或 Java 中则不是。这些行尾差异会导致 VS Code 与语言服务器通信时出现问题,因为各种概念是使用(line;char) 坐标在 VS Code 和语言服务器之间进行通信的。如果行终止符的定义不同,则会导致文件行和位置的映射不同。

打开文件时,VS Code 现在会检查打开的文件中是否存在 LS 或 PS,并会提示并要求您授权删除这些字符。这些不寻常的行终止符在实践中很少见,并且很可能是通过复制粘贴意外插入源代码中的。

集成终端

上个月的集成终端链接预览已经取代了旧的实现。新的链接实现现在支持

  • 通过使用编辑器的链接检测,改进了 web 和file:// 链接检测。
  • 文件夹链接支持,可以在资源管理器中打开文件夹或打开新的 VS Code 窗口。
  • 针对不同链接类型执行不同的链接操作,回退到搜索工作区(基于terminal.integrated.wordSeparators 设置)的“单词”链接。
  • 与编辑器类似的链接突出显示和悬停体验。

Terminal with various links

主题:Topaz (Dim)

任务

继续进行最近的任务性能改进,运行构建任务 将不再总是向扩展询问其任务。如果您在文件夹的tasks.json 中配置了默认构建任务,运行构建任务 将只尝试解析该任务,而不是在运行默认构建任务之前查找所有扩展的所有任务。

源代码管理

在终端中打开

您现在可以从源代码管理视图的上下文菜单中在终端中打开存储库。

Open in terminal from Source Control view

从 GitHub 添加远程

您现在可以使用Git: 添加远程... 命令将 GitHub 存储库添加为本地存储库的远程存储库。

Use Add Remote Command

发布到 GitHub 时生成 .gitignore

现在可以在将工作区发布到 GitHub 时生成.gitignore 文件。将工作区发布到 GitHub 时,系统会提示您选择要包含在存储库中的文件,未包含的文件将被添加到.gitignore 文件中。

Select which files to include in the repository

输入字段字体系列

您现在可以使用Scm: 输入字体系列 设置自定义源代码管理输入字段中使用的字体系列。该设置支持以下值

  • default - 工作台用户界面字体系列。
  • editor - 在编辑器: 字体系列 设置中指定的字体系列。
  • font family name - 要在输入字段中使用的字体系列的名称(例如,Cascadia Code)。

中止正在进行的变基

您现在可以使用Git: 中止变基 命令中止正在进行的变基操作。

调试

自动调试配置改进

在本里程碑中,我们改进了自动调试配置的体验

  • 在上一个里程碑中,我们引入了一项功能,允许扩展作者分析当前项目并自动提供调试配置。这些调试配置是动态创建的,因此它们不会显示在launch.json 配置文件中。只要它们可以正常工作,这很好,但有时您可能需要修改配置,例如添加其他参数。现在有一个选项可以将自动调试配置保存到launch.json 中,以便打开它进行编辑。为此,请使用调试: 选择并开始调试 快速选择中的自动调试配置末尾的齿轮按钮

    Selecting Edit automatic debug configuration in launch

  • 现在可以从运行和调试启动视图中显示所有自动调试配置。

    Automatic debug configs in start view

  • 调试下拉菜单现在会记住之前选择的自动调试配置。

单步执行目标

调试包含许多嵌套函数调用的语句可能会很痛苦,因为您可能需要单步执行您并不真正感兴趣的函数。为了改善这种情况,调试适配器协议已支持“单步执行目标”功能,该功能显示用于直接单步执行您感兴趣的函数的 UI。

在本里程碑中,VS Code 已开始使用此功能。调试在语句上停止时,上下文菜单会显示一个新的操作单步执行目标。此操作会列出当前堆栈帧中可用的所有目标(通常是函数)。选择其中一个目标将单步执行该目标。

请注意,每个堆栈帧都可以有自己的目标集。因此,单步执行目标 操作的结果取决于 CALL STACK 视图中当前选择的帧。

Step into targets in context menu

目前,只有模拟调试扩展具有(伪造)单步执行目标 支持,但很快其他调试扩展也会支持 - 例如 Julia 调试器。

语言

TypeScript 3.9

VS Code 现在包含 TypeScript 3.9.4。此主要 TS 更新带来了一些新的工具功能、性能改进和一些错误修复。您可以在TypeScript 博客 上了解更多关于 TS 3.9 的信息。

CommonJS 自动导入

如果 VS Code 检测到您正在 CommonJS 风格的 JavaScript 模块中工作,自动导入 现在将使用require 而不是import

Auto imports using 'require' in a JS file

重构保留换行符

JavaScript 和 TypeScript 的重构,例如提取到方法移动到新文件,现在尝试保留重构源代码的原始格式。这包括选择中存在的任何换行符

The 'extract method' refactoring preserving newlines

添加所有缺少导入的源操作

VS Code 长期以来支持添加 JavaScript 或 TypeScript 文件中所有缺少导入的快速修复。在此迭代中,我们引入了新的添加所有缺少导入 源操作,允许您从文件中的任何位置触发此操作。

Adding imports using a source action

这也允许您为添加所有缺少导入 设置键绑定

{
  "key": "ctrl+shift+i",
  "command": "editor.action.sourceAction",
  "args": {
    "kind": "source.addMissingImports",
    "apply": "first"
  }
}

或者甚至在保存时启用添加所有缺少导入

"editor.codeActionsOnSave": [
    "source.addMissingImports"
]

JS/TS 转到工作区中的符号包括所有打开的项目

默认情况下,JavaScript 和 TypeScript 的工作区符号搜索 现在会搜索所有打开的jsconfigtsconfig 项目。以前它只包含来自焦点文件所属项目的搜索结果。

此行为由typescript.workspaceSymbols.scope 设置控制,需要 TS 3.9+。要恢复到之前的行为并只搜索当前项目,请设置"typescript.workspaceSymbols.scope": "currentProject"

添加缺少导入的快速修复现在可以标记为首选

JavaScript 和 TypeScript 的添加缺少导入 快速修复现在可以标记为错误的首选修复。这允许您使用⌥⌘. (Windows, Linux Shift+Alt+.) 一次按键添加缺少的导入。

请注意,添加缺少导入 仅当有一个有效的导入时才会标记为首选修复。如果您的项目中有多个潜在导入,您仍然需要使用正常的代码操作菜单来选择要使用的导入。此外,要在 JavaScript 中启用添加缺少导入 快速修复,您必须启用类型检查

JSON 离线模式

新的设置json.schemaDownload.enable 允许您控制 JSON 扩展是否允许从httphttps 获取 JSON 架构。

当当前编辑器想要使用无法下载的架构时,状态栏中会出现一个警告三角形。基于架构的功能(如验证、代码完成和悬停)将受到限制。

JSON warning triangle

浏览器支持

调试停止指示器在选项卡标题中

在浏览器中调试扩展时,被调试的扩展会在新的浏览器选项卡中显示,该选项卡会停用(隐藏)调试器选项卡。当调试器由于某种原因停止时,例如,遇到断点,我们无法激活调试器选项卡(因为浏览器没有为此提供 API)。这使得几乎不可能发现被调试的扩展已停止。

为了缓解这个问题,我们现在更新选项卡标题以包含一个红色圆圈指示器🔴(类似于断点)。调试器选项卡被激活后,红点就会消失。

Debuggee stopped indicator in web view

从集成终端运行 VS Code

在浏览器中运行的 VS Code 中打开集成终端时,您可以键入code 以访问几个有用的命令,这些命令都可以在浏览器中运行。

Terminal Remote

在此迭代中,我们扩展了对许多选项的支持

  • --goto 打开特定行上的文件
  • --diff 比较两个文件
  • --wait 让程序等待文件关闭
  • --add 将文件夹添加到当前工作区

例如,在GitHub Codespaces 中,这使您可以使用基于浏览器的 VS Code 作为 Git 的编辑器

VS Code Git Editor in Browser

主题:GitHub Light

文件/文件夹上传

VS Code 允许您将文件拖放到文件资源管理器中以上传它们。在此迭代中,我们改进了此功能,允许您拖放文件夹以上传它们,包括所有子文件夹和文件。由于这可能是一个长时间运行的操作,您将在状态栏中看到进度报告,并且可以在需要时取消操作。

Drag files into File Explorer

帐户管理

在之前的版本中,我们在设置同步功能预览旁边介绍了新的帐户管理 UI 预览。现在,此 UI 将默认显示。使用新的提议的身份验证提供程序 API 的扩展可以在此处显示登录请求,并且您可以查看您的帐户并管理扩展访问权限。目前只有少量扩展使用此 API,我们将努力在 API 稳定后提高采用率。

预览功能

预览功能尚未准备好发布,但功能已经足够强大,可以供您使用。我们欢迎您在开发过程中尽早提供反馈。

设置同步

我们过去几个月一直在努力支持跨机器同步 VS Code 偏好设置,此功能可在Insiders 版本中预览。

在本里程碑中,我们增强了对管理和诊断设置同步的支持。

同步机器视图

我们添加了 **同步机器** 视图来显示同步您的 VS Code 首选项的机器列表。默认名称是根据您使用的 VS Code 类型(Insiders 或 Stable)和平台提供的,但您始终可以使用视图中机器条目上的编辑操作来更新名称。

Synced Machines view

主题:带有自定义设置的 GitHub Sharp

您可以使用 **首选项同步:显示同步数据** 命令从命令面板中打开此视图。

同步数据视图

我们对同步数据视图添加了以下增强功能。

  • 您现在可以查看同步数据的机器。
  • 您可以使用视图中数据条目上的 **还原** 操作恢复到特定状态。
  • 您可以使用视图标题中 **更多操作** (...) 按钮下的 **重置同步数据** 操作重置云上的数据。

Synced Data view

主题:带有自定义设置的 GitHub Sharp

在打开同步时,我们现在提供更多帮助,检查您是否要与来自不同机器的数据同步,并允许您采取适当的措施。

  • **替换本地** - 将当前机器上的数据替换为云同步的数据。
  • **合并** - 将当前机器上的数据与云同步的数据合并。
  • **显示同步数据** - 打开同步数据视图以查看来自云的同步数据。

Replace or Merge pop-up

新的 JavaScript 调试器

本月我们继续在我们新的 JavaScript 调试器上取得进展。从 5 月中旬开始,它已成为 Insiders 上的默认调试器,并且包含在本版本中的 VS Code Stable 中(但默认情况下未启用)。您可以通过启用 debug.javascript.usePreview 设置来使用现有的启动配置开始使用它。

本月的进展主要集中在完善和稳定现有功能

  • **浏览器调试的多标签支持:**您现在可以在运行浏览器或 Web 视图时附加到多个标签。默认情况下,js-debug 附加到与 urlFilter 匹配的所有标签。在附加到浏览器时,您可以在启动配置中设置 "targetSelection": "pick" 以连接到单个标签,如之前的调试器。
  • **改进的标签区分:**调试会话名称更准确地区分了多个标签。此外,我们在调用堆栈视图中的调试会话的上下文菜单中添加了 **聚焦标签** 操作,您可以使用它来确保您正在查看正确的页面。
  • **自动扩展获取器的选项:**与 Chrome 的行为匹配,默认情况下,在变量视图或调试控制台中显示属性获取器时不会对其进行评估。您现在可以通过设置 debug.javascript.autoExpandGetters 选项来配置此行为。
  • **针对 webpack 包类型的性能改进:**某些类型的 webpack 包(使用 eval 源映射构建的)在 js-debug 下运行速度很慢。它们不再这样做。

TS 4.0 夜间构建支持

VS Code 1.46 包含对 TypeScript 4.0 夜间构建的预览支持。夜间构建包括对我们正在积极开发的一些新工具功能的支持,例如 更灵活的重构选择

您可以通过安装 TypeScript Nightly 扩展 来立即尝试 TypeScript 4.0 夜间构建。请分享反馈并告知我们您是否在 TypeScript 4.0 中遇到任何错误。

对扩展的贡献

笔记本

快速大纲

笔记本扩展,例如 GitHub Issue 笔记本,现在支持快速大纲。按 kb('workbench.action.gotoSymbol') 或使用 **转到编辑器中的符号** 命令,并查看当前笔记本的所有 Markdown 和代码单元的预览。

Notebook quick outline preview list

主题:GitHub 主题

错误和符号导航

我们改进了 F8 和 **查找所有引用** 的工作方式。所有代码导航手势应该与笔记本之外的操作一样自然。例如,问题视图现在将显示所有单元格的所有错误,按笔记本分组,而不是按单元格分组。

Problems panel with errors grouped by notebook

主题:GitHub 主题

合并/拆分单元格

我们引入了两组命令,让您可以快速合并单元格或将单元格拆分为更小的片段

Running Join and Split Notebook cells commands

主题:GitHub 深色主题

保留的笔记本

固定或已修改的笔记本编辑器现在在工作区中保持持久性,因此如果笔记本移至后台或移至另一个编辑器组,用户不会丢失笔记本的工作状态。

Persisted Notebook

主题:GitHub 深色主题

统一的撤销/重做堆栈

现在,用户操作(操作笔记本单元格或修改笔记本单元格内容)将跟踪在同一个撤销/重做堆栈中。

Show tracking of Unified Undo/Redo stack

主题:GitHub 深色主题

GitHub Pull 请求和问题

继续在 GitHub Pull 请求和问题 扩展上进行工作,该扩展允许您处理、创建和管理 Pull 请求和问题。此版本的更新包括

  • 改进问题悬停中的标签。
  • 问题和用户建议现在只会在评论和纯文本中触发。
  • 新的问题编辑器允许您设置指派人和标签。

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

远程开发

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

1.46 中的新功能包括

  • Dev 容器:支持 GPG 转发。
  • Dev 容器:支持检查 Docker 卷。
  • Dev 容器:新的 devcontainer.json 命令属性。

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

十六进制编辑器

随着自定义编辑器 API 完成并支持 二进制编辑器,我们开发了一个 十六进制编辑器扩展 来提供本机的十六进制编辑体验。

Hex Editor

此扩展仍在开发中,目前只支持以十六进制打开和导航文件。我们将继续努力改善导航体验,然后继续支持编辑。您可以尝试一下扩展并提供反馈或向 vscode-hexeditor 存储库 提交问题。

扩展创作

文件路径大小写

我们修复了 VS Code 处理区分大小写的文件系统上的路径和 URI 的几个错误。在此版本之前,大小写不同的路径不会打开同一个文档,而是打开单独的、断开的文档。这种行为通常会导致混淆,有时还会导致数据丢失。

但是,在修复这些错误时,openTextDocument 函数的行为发生了变化。该函数现在可以返回一个文档,该文档的 URI 的大小写与传递的 URI 不同。这意味着扩展程序应该使用 TextDocument#uri 作为事实来源,而不是它们用来请求它的 URI。

以下示例说明了新行为

// case-insensitive file system

const uriA = vscode.Uri.file('/foo/bar.code');
const docA = await vscode.workspace.openTextDocument(uriA);

const uriB = vscode.Uri.file('/foo/BAR.code');
const docB = await vscode.workspace.openTextDocument(uriB);

assert.ok(docA === docB); // same document
assert.ok(docB.uri.toString() === uriA.toString()); // uriA is used, NOT uriB
assert.ok(docB.uri.toString() !== uriB.toString());

新的调试控制台主题颜色

有用于样式化调试控制台视图的新颜色

  • debugConsole.infoForeground:调试控制台中信息消息的前景色
  • debugConsole.warningForeground:调试控制台中警告消息的前景色
  • debugConsole.errorForeground:调试控制台中错误消息的前景色
  • debugConsole.sourceForeground:调试控制台中源文件名的前景色
  • debugConsoleInputIcon.foreground:调试控制台输入标记图标的前景色

新的输入主题颜色

我们还为输入提供新的颜色主题选项。您可以通过 inputOption.activeForeground 设置活动输入选项的前景色。这些出现在搜索视图和查找小部件(编辑器、终端、调试控制台)中。

Input option foreground color

主题:GitHub 深色主题

新的 codicon 图标

我们在 codicon 库中添加了以下新图标

  • server-process
  • server-environment
  • record
  • pass
  • stop-circle
  • play-circle

New available icons

主题:GitHub 深色主题

提供程序使用泛型类型

我们的 vscode.d.ts 类型定义现在使所有两阶段提供程序(具有单独的“提供”和“解析”方法的提供程序)成为泛型。目标是更清楚地表明“提供”调用中的结果将传递回“解析”调用。

例如,以下是 DocumentLinkProvider 的新泛型定义

export interface DocumentLinkProvider<T = DocumentLink> {
  provideDocumentLinks(
    document: TextDocument,
    token: CancellationToken
  ): ProviderResult<T[]>;

  resolveDocumentLink?(link: T, token: CancellationToken): ProviderResult<T>;
}

所有提供程序都有一个默认的泛型参数,因此此更改不会导致您的现有扩展出现任何错误。如果您以前在实现“解析”时使用过强制转换或类型检查,请考虑将您的代码更新为使用泛型提供程序。

class MyDocLinkProvider implements DocumentLinkProvider<MyDocumentLink> {

  provideDocumentLinks(document: TextDocument, token: CancellationToken): MyDocumentLink[] { ... }

  resolveDocumentLink(link: MyDocumentLink, token: CancellationToken): MyDocumentLink { ... }
}

在 Web 视图中编写特定于主题的 CSS

Web 视图的主体元素有一个名为 vscode-theme-name 的新数据属性,该属性存储当前活动主题的完整名称。这使您可以在 Web 视图中编写特定于主题的 CSS

body[data-vscode-theme-name="One Dark Pro"] {
    background: hotpink;
}

请记住,鉴于 VS Code 可用的主题数量,您应该只在特殊情况下编写特定于主题的 CSS。正常的 Web 视图应该使用 .vscode-light.vscode-dark 类名以及 VS Code CSS 变量 来编写适应用户选择的主题的 CSS。

自定义二进制编辑器

我们已完成自定义二进制编辑器的 API。自定义编辑器 API 允许扩展创建自定义的基于 Web 视图的编辑器,这些编辑器可以替换 VS Code 的默认文本编辑器,也可以由用户切换。这可用于在 VS Code 中直接预览资产文件(例如图像或 3D 模型),或为特定文件类型构建更专业的编辑界面。使用新的二进制自定义编辑器 API,您现在可以为非文本类型的文件格式构建读/写编辑器。

A custom editor for binary files

自定义编辑器扩展指南 更详细地介绍了 API。此外,请查看 自定义编辑器扩展示例,其中包括文本和二进制文件格式的自定义编辑器示例。

放宽 resolveCompletionItem

CompletionItemProvider#resolveCompletionItem 函数允许提供程序使用更多数据来延迟丰富补全。此“延迟”数据必须是可选的,并且不能改变补全的插入行为。扩展程序仍然可以填写 additionalTextEdits,并且如果额外的编辑在插入补全后到达,编辑器仍将尝试应用它们。请注意,这仅适用于额外的编辑,不适用于主编辑(insertText),主编辑在提供后不能更改。

onStartupFinished 激活事件

我们现在有一个新的激活事件,类似于已经存在的 * 激活事件。新的 onStartupFinished 激活事件应在扩展程序希望在 VS Code 启动后不久激活但不是作为启动的一部分时使用。

环境变量收集

ExtensionContext.EnvironmentVariableCollection API 现在已稳定,并允许扩展程序为终端环境做出贡献。

const collection = context.environmentVariableCollection;
const separator = process.platform === 'win32' ? ';' : ':';
collection.prepend('PATH', `/foo${separator}`);
collection.replace('JAVA_HOME', '/bar');

这些集合是特定于扩展和工作区的,VS Code 处理多个扩展之间冲突的方式。它们在窗口重新加载时会持续存在,这样在窗口加载后立即创建的终端不会阻塞扩展主机启动,而是使用上次已知的版本。这些持续存在的集合可以通过处置集合或卸载扩展来删除。

当集合发生变化时,终端上会显示一个指示器。terminal.integrated.environmentChangesIndicator 设置定义了该指示器是否显示任何活动更改或仅显示“过时”终端。此 API 现在也用于内置 Git 扩展,让 VS Code 成为身份验证提供者。

调试适配器协议

新的指令断点

有一种新的“指令”断点类型,它可以使在内存地址的指令处中断成为可能。内存地址以符号形式指定,该符号形式可从 evaluatevariablesstackTracegotoTargets 请求中可选地获得。相应的 supportsInstructionBreakpoints 功能指示调试适配器是否支持指令断点。

支持“步进粒度”

在步进请求 nextstepInstepOutstepBack 中添加了一个新的可选 granularity 参数,用于控制请求是步进“语句”、“行”还是“指令”。相应的 supportsSteppingGranularity 功能指示调试适配器是否支持该功能。

建议的扩展 API

每个里程碑都附带新的提议 API,扩展作者可以尝试使用它们。和往常一样,我们希望获得您的反馈。以下是如何尝试提议 API 的步骤。

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

请注意,您不能发布使用提议 API 的扩展。在下一个版本中可能会发生重大更改,我们不想破坏现有扩展。

Git 扩展 API

内置 Git 扩展 提供了一个 API 供扩展使用。现有的 API 公开了一种方法来获取 Repositorylog 结果。更新后的 API 现在允许 logpath 约束。

export interface LogOptions {
  readonly maxEntries?: number;
  readonly path?: string;
}
export interface Repository {
  log(options?: LogOptions): Promise<Commit[]>;
}

现在还有一个 Git 扩展 API 可以根据 BranchQuery 获取 getBranches

export interface BranchQuery {
  readonly remote?: boolean;
  readonly contains?: string;
}
export interface Repository {
  getBranches(query: BranchQuery): Promise<Ref[]>;
}

AccessibilityInformation

我们在 TreeItemStatusBarItemTimelineItem 元素中添加了 AccessibilityInformation,以支持屏幕阅读器。AccessibilityInformation 包含一个 label 和一个 role。屏幕阅读器会读取 label,而 role 描述元素的可访问性特征。

工程

Windows ARM64 Insiders

Insiders 下载页面 上提供了针对 ARM 64 位的 Windows 的新的官方 Insider 版本。

这些版本适用于 Microsoft Surface Pro X,因此请尝试一下,并告诉我们您的想法。

Windows ARM64

--crash-reporter-directory 参数用于诊断问题

一个新的命令行参数 --crash-reporter-directory 允许您传递一个本地文件夹,您可以在其中保存崩溃报告。这即使在扩展主机中发生崩溃也能正常工作,并且可以在 VS Code 发生崩溃并且您想报告问题时使用。

预加载脚本

我们在 VS Code 中添加了 Electron preload 脚本,用于向窗口公开某些 Electron API。这是迈向完全沙盒窗口的第一步。进度概述在 问题 #92164 中。

扩展示例现在使用 ESLint

我们的 扩展示例 都已更新为使用 ESLint 进行代码风格检查,而不是现在已弃用的 TSLint。如果您的扩展仍在使用 TSLint,您可以查看 TSLint 到 ESLint 迁移指南 和我们新更新的扩展示例,以了解如何迁移到 ESLint。

GitHub Triage 扩展

我们创建了一个基于 chromium 的浏览器的扩展,以帮助我们在 GitHub 上进行问题分类,它提供了一个单一的模糊可过滤菜单,其中包含分配者、标签、里程碑以及我们用来触发分类 GitHub Actions 的各种特殊评论。我们已经开源了代码 在 GitHub 上

Screenshot of Extension

文档和扩展

Build 上的 Visual Studio Code

VS Code 团队在 Microsoft Build 2020 大会上进行了演示,您可以在此 Build 上的 VS Code 博客文章中找到 VS Code 会议和在线演讲的概述。

VS Code 团队成员的几场演讲

Azure 扩展

有几个新的扩展可以用来直接在 VS Code 中工作和部署 Azure 资源。

Azure Databases extension

新命令

命令 命令 ID
⌘K ⇧Enter (Windows、Linux Ctrl+K Shift+Enter) 固定编辑器 workbench.action.pinEditor
⌘K ⇧Enter (Windows、Linux Ctrl+K Shift+Enter) 取消固定编辑器 workbench.action.unpinEditor

值得注意的修复

  • 10144: 在 Linux 上使用 system-ui 作为字体
  • 63068: macOS Dock 图标太小
  • 69163: 在侧边栏中显示活动文件会引发异常
  • 95367: 对无效 frameId 发出的 DAP“evaluate”请求
  • 95856: 转到行应包含“filename.extension:line number”格式
  • 96713: 从调用堆栈操作视图中停止会话总是会转到活动会话
  • 96914: 当大纲可见时,输入很卡顿
  • 96987: Orca 不会在断点视图中读取行号
  • 97444: 从调试监视中复制长值会导致粘贴部分值
  • 97471: 调试悬停太窄,水平滚动毫无用处
  • 97731: 在输入和滚动时 VS Code 会冻结
  • 96643: 任务(和 TaskExecutions)在 onDid(Start|End)Task 回调中不 ===

感谢

最后但并非最不重要的一点,衷心感谢本月为 VS Code 做出贡献的人员。

对我们问题跟踪的贡献

vscode 的贡献

language-server-protocol 的贡献

vscode-generator-code 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

vscode-js-debug 的贡献

localization 的贡献

在过去的一年里,我们认真听取了您的反馈,并决定是时候提供一个更可靠、更具互动性的平台,让您可以参与 VS Code 本地化开发。 考虑到这一点,我们在 4 月份的第一周正式退役了 Microsoft 本地化社区平台 (MLCP),并打算在另一个平台上继续 Microsoft 社区本地化计划,用于开源本地化项目。

请关注我们即将发布的关于新社区平台的公告,该公告将在我们的 Wiki 页面上发布。 您还可以访问 常见问题解答 页面,以获取有关此平台过渡的答案。