在 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 标签现在可以正确传达以下编辑器状态:pinned(已固定)、preview(预览)和 readonly(只读)。

工作台

灵活布局

在过去的几次迭代中,我们已经宣布了在使布局更灵活方面取得的进展。在此版本中,这组功能已可供普遍使用。以下是这些功能的概述。

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

也许你更喜欢将侧边栏中的视图放在面板中,反之亦然。为此,你现在可以通过拖动视图的标头,或者通过拖动其图标或标题来拖动整个组,将其从当前位置移动到所需位置。通过键盘,可以使用命令视图:移动视图 (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 与语言服务器通信时,这些行尾差异可能会导致问题,因为 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: Add Remote... 命令将 GitHub 仓库作为远程添加到你的本地仓库。

Use Add Remote Command

发布到 GitHub 时生成 .gitignore

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

Select which files to include in the repository

输入字段字体系列

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

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

中止正在进行的变基操作

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

调试

自动调试配置改进

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

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

    Selecting Edit automatic debug configuration in launch

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

    Automatic debug configs in start view

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

单步进入目标

调试一个包含许多嵌套函数调用的语句可能会很痛苦,因为你可能不得不单步跳过你并不真正感兴趣的函数。为了改善这种情况,调试适配器协议 (Debug Adapter Protocol) 支持“单步进入目标”功能,该功能显示 UI 以直接单步进入你感兴趣的函数。

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

请注意,每个堆栈帧都可以有自己的一组目标。因此,单步进入目标操作的结果取决于“调用堆栈”视图中当前选定的帧。

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

浏览器支持

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

当在浏览器中调试扩展时,被调试的扩展会显示在一个新的浏览器选项卡中,该选项卡会使调试器选项卡停用(隐藏)。当被调试对象因某种原因停止时,例如命中断点,我们无法激活调试器选项卡(因为浏览器没有为此提供 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 设置,将其与现有启动配置一起使用。

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

  • 浏览器调试多选项卡支持:现在,在运行浏览器或网页视图时,你可以附加到多个选项卡。默认情况下,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 Notebooks,现在支持快速大纲。按下 kb('workbench.action.gotoSymbol'),或使用编辑器中转到符号命令,查看当前笔记本中所有 Markdown 和代码单元格的预览。

Notebook quick outline preview list

主题:GitHub Theme

错误和符号导航

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

Problems panel with errors grouped by notebook

主题:GitHub Theme

合并/拆分单元格

我们引入了两组命令,方便你快速合并单元格或将单元格拆分为更小的片段。

Running Join and Split Notebook cells commands

主题:GitHub Dark Theme

保留笔记本

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

Persisted Notebook

主题:GitHub Dark Theme

统一撤消/重做堆栈

用户对笔记本单元格的操作或修改笔记本单元格内容的操作现在都在同一个撤消/重做堆栈中进行跟踪。

Show tracking of Unified Undo/Redo stack

主题:GitHub Dark Theme

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展的工作仍在继续,该扩展允许你处理、创建和管理拉取请求和问题。此版本的一些更新包括:

  • 问题悬停提示中的标签改进。
  • 问题和用户建议现在仅在注释和纯文本中触发。
  • 新的问题编辑器允许你设置负责人和标签。

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

远程开发

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

1.46 版中的新功能包括

  • 开发容器:支持 GPG 转发。
  • 开发容器:支持检查 Docker 卷。
  • 开发容器:新增 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 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 { ... }
}

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

Web 视图的 body 元素有一个新的数据属性 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

我们已将 AccessibilityInformation 添加到 TreeItemStatusBarItemTimelineItem 元素中,以支持屏幕阅读器。AccessibilityInformation 包含一个 label 和一个 rolelabel 由屏幕阅读器读取,role 描述了元素的辅助功能特性。

工程

Windows ARM64 Insiders

Windows ARM 64 位版有新的官方 Insider 构建版本,可在Insiders 下载页面获取。

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

Windows ARM64

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

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

预加载脚本

我们已将 Electron preload 脚本添加到 VS Code 中,以便将某些 Electron API 公开给窗口。这是迈向完全沙盒化窗口的第一步之一。进展详情在问题 #92164 中有概述。

扩展示例现在使用 ESLint

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

GitHub 问题分类扩展

我们为基于 Chromium 的浏览器创建了一个扩展,通过提供一个可模糊过滤的负责人、标签、里程碑以及我们用于触发问题分类 GitHub Actions 的各种特殊注释的菜单,帮助我们在 GitHub 上进行问题分类。我们已在 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:“转到行”应包含“文件名.扩展名:行号”格式
  • 96713:从调用堆栈操作视图停止会话总是转到活动会话
  • 96914:大纲可见时打字滞后
  • 96987:Orca 未读取断点视图中的行号
  • 97444:从调试监视中复制长值会导致粘贴部分值
  • 97471:调试悬停过窄且水平滚动无用
  • 97731:输入和滚动时 VS Code 冻结
  • 96643:在 onDid(Start|End)Task 回调中,任务(和 TaskExecutions)不全等

致谢

最后但同样重要的是,衷心感谢本月为 VS Code 做出贡献的以下人员:

对问题跟踪的贡献

vscode 的贡献

language-server-protocol 的贡献

vscode-generator-code 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

vscode-js-debug 的贡献

localization 的贡献

在过去的一年里,我们认真听取了你们的反馈,并决定是时候提供一个更可靠、更具交互性的平台,让你们能够为 VS Code 的本地化开发做出贡献。考虑到这一点,我们于四月第一周正式停止了 Microsoft 本地化社区平台 (MLCP) 的服务,旨在在另一个平台上继续 Microsoft 社区本地化计划,以支持开源本地化项目。

请在未来几周关注我们的 Wiki 页面,以获取有关新社区平台的公告。你也可以访问常见问题页面,以获取有关此次平台过渡的答案。