🚀 在 VS Code 中

2020 年 5 月(版本 1.46)

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

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


欢迎使用 Visual Studio Code 2020 年 5 月版。

如果您想在线阅读这些发行说明,请访问 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 设置为 true。

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

搜索编辑器

有几个新选项可用于配置如何创建搜索编辑器

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

资源管理器自动显示焦点,无需强制滚动

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

列表和树的平滑滚动

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

Smooth scrolling

Sash 大小配置

您现在可以使用 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 与语言服务器通信时,这些行尾差异可能会导致问题,因为各种概念在 VS Code 和语言服务器之间使用 (line;char) 坐标进行通信。如果行尾符的定义不同,则可能导致文件中行和位置的映射不同。

打开文件时,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 - 编辑器:字体系列 设置中指定的字体系列。
  • 字体系列名称 - 要在输入字段中使用的字体系列的名称(例如,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

目前,只有 Mock Debug 扩展具有(伪)步入目标 支持,但很快其他调试扩展也将跟进 - 例如 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

浏览器支持

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

在浏览器中调试扩展时,调试的扩展程序会在新的浏览器选项卡中显示,该选项卡会停用(隐藏)调试器选项卡。当 debuggee 因某种原因停止时(例如,命中断点),我们无法激活调试器选项卡(因为浏览器未为此提供 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 with Customizations

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

同步数据视图

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

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

Synced Data view

主题:GitHub Sharp with Customizations

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

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

Replace or Merge pop-up

新的 JavaScript 调试器

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

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

  • 浏览器调试的多选项卡支持: 您现在可以在运行浏览器或 webview 时附加到多个选项卡。默认情况下,js-debug 会附加到与 urlFilter 匹配的所有选项卡。在附加到浏览器时,您可以在启动配置中设置 "targetSelection": "pick" 以连接到单个选项卡,就像以前的调试器一样。
  • 改进的选项卡消除歧义: 调试会话名称可以更准确地消除多个选项卡的歧义。此外,我们在“调用堆栈”视图中调试会话的上下文菜单中添加了 聚焦选项卡 操作,您可以使用该操作确保您正在查看正确的页面。
  • 自动展开 Getter 的选项: 为了与 Chrome 的行为匹配,属性 Getter 在“变量”视图或“调试控制台”中显示时默认情况下不进行评估。您现在可以通过设置 debug.javascript.autoExpandGetters 选项来配置此行为。
  • webpack 包类型的性能改进: 某些类型的 webpack 包(那些使用 eval sourcemap 构建的包)在 js-debug 下运行缓慢。它们不再如此。

TS 4.0 nightly build 支持

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

您可以通过安装 TypeScript Nightly 扩展立即试用 TypeScript 4.0 nightly build。请分享反馈,并告知我们您是否遇到任何 TypeScript 4.0 的错误。

扩展贡献

Notebooks

快速大纲

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

Notebook quick outline preview list

主题:GitHub Theme

错误和符号导航

我们改进了 F8查找所有引用 的工作方式。所有代码导航手势都应该感觉像在 Notebooks 外部一样自然。例如,“问题”视图现在将显示按 Notebook 分组的所有单元格的所有错误,而不是按单元格分组

Problems panel with errors grouped by notebook

主题:GitHub Theme

加入/拆分单元格

我们引入了两组命令,供您快速加入单元格或将单元格拆分为更小的片段

Running Join and Split Notebook cells commands

主题:GitHub Dark Theme

保留 Notebook

固定的或脏的 Notebook 编辑器现在在工作区中是持久的,因此如果 Notebook 移动到后台或移动到另一个编辑器组,用户不会丢失 Notebook 中的工作状态。

Persisted Notebook

主题:GitHub Dark Theme

统一的撤消/重做堆栈

用户操作(操作 Notebook 单元格或修改 Notebook 单元格内容)现在在同一个“撤消/重做”堆栈中跟踪。

Show tracking of Unified Undo/Redo stack

主题:GitHub Dark Theme

GitHub Pull Requests and Issues

继续开发 GitHub Pull Requests and Issues 扩展,该扩展允许您处理、创建和管理 pull request 和 issue。此版本的某些更新包括

  • 改进了 issue 悬停中的标签。
  • Issue 和用户建议现在仅在评论和纯文本中触发。
  • 新的 issue 编辑器使您可以设置受让人和标签。

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

远程开发

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

1.46 中的新功能包括

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

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

Hex Editor

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

Hex Editor

此扩展仍在开发中,目前仅支持以十六进制格式打开和导航文件。我们将继续改进导航体验,然后继续支持编辑。您可以试用该扩展并提供反馈或针对 vscode-hexeditor 存储库提交 issue。

扩展编写

文件路径大小写

我们修复了 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 Dark Theme

新的 codicon 图标

我们向我们的 codicon 库添加了以下新图标

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

New available icons

主题:GitHub Dark Theme

提供程序使用泛型类型

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

例如,这是 DocumentLinkProvider 的新泛型定义

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

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

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

class MyDocLinkProvider implements DocumentLinkProvider<MyDocumentLink> {

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

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

在 webview 中编写特定于主题的 CSS

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

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

请记住,考虑到 VS Code 可用的主题数量,您应该仅在特殊情况下编写特定于主题的 CSS。正常的 webview 应改为使用 .vscode-light.vscode-dark 类名以及 VS Code CSS 变量来编写 CSS,以适应用户选择的任何主题。

自定义二进制编辑器

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

A custom editor for binary files

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

轻松解析完成项

通过 CompletionItemProvider#resolveCompletionItem 函数,提供程序可以延迟丰富补全项,添加更多数据。这种“延迟”数据必须是可选的,并且不得更改补全项的插入行为。扩展仍然可以填写 additionalTextEdits,如果其他编辑操作在补全项插入之后到达,编辑器仍然会尝试应用它们。请注意,这仅适用于附加编辑操作,不适用于主编辑操作 (insertText),主编辑操作一旦提供就不得更改。

onStartupFinished 激活事件

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

环境变量集合

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 指示调试适配器是否支持指令断点。

支持“步进粒度”

一个新的可选 granularity 参数已添加到步进请求 nextstepInstepOutstepBack 中,以控制请求是步进“语句”、“行”还是“指令”。相应的能力 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[]>;
}

辅助功能信息

我们在 TreeItemStatusBarItemTimelineItem 元素中添加了 AccessibilityInformation 以支持屏幕阅读器。AccessibilityInformation 包含 labelrolelabel 由屏幕阅读器读取,role 描述元素的辅助功能特征。

工程

Windows ARM64 Insiders

现在有适用于 Windows for ARM 64 位的新的官方 Insider 构建版本,可在 Insiders 下载页面 上找到。

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

Windows ARM64

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

一个新的命令行参数 --crash-reporter-directory 允许您传递一个本地文件夹,您希望将崩溃报告保存在其中。这甚至适用于扩展主机中的崩溃,并且可以在 VS Code 崩溃并且您想要报告问题时使用。

预加载脚本

我们已将 Electron preload 脚本添加到 VS Code 中,以便向窗口公开某些 Electron API。这是迈向完全沙盒化窗口的第一步。进度在 issue #92164 中进行了概述。

扩展示例现在使用 ESLint

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

GitHub Triage 扩展

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

Screenshot of Extension

文档和扩展

Visual Studio Code 在 Build 大会上

VS Code 团队在 Microsoft Build 2020 大会上进行了演讲,您可以在这篇 VS Code at Build 博客文章中找到 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:行号”格式
  • 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 页面上关于新社区平台的公告。您也可以访问 FAQ 页面,以获取有关此平台过渡的解答。