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

2021 年 2 月(版本 1.54)

更新 1.54.1:此更新解决了问题,该问题与扩展依赖项有关。

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

更新 1.54.3:此更新解决了此问题

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


欢迎使用 Visual Studio Code 的 2021 年 2 月发布版本。此版本中有一些我们希望您喜欢的更新,其中一些关键亮点包括

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

加入我们直播VS Code 团队的直播 上,于太平洋时间 3 月 11 日星期四上午 8 点(伦敦时间下午 4 点)观看此版本中新增功能的演示,并现场向我们提问。

内部人员:想要尽快尝试新功能?您可以下载夜间 内部人员 版本,并在新功能可用时立即尝试最新更新。

Apple Silicon

我们很高兴宣布此次迭代中首个稳定版 Apple Silicon 版本的发布。使用 M1 芯片的 Mac 用户现在可以使用 VS Code,无需使用 Rosetta 进行模拟,并在运行 VS Code 时会注意到更好的性能和更长的电池续航时间。感谢社区在内部人员版本中自行托管并及早报告问题。

现在,macOS 的 VS Code 默认下载是一个通用版本,可以在所有 Mac 上原生运行。在 下载 页面,您可以找到更多指向特定于体系结构的版本的链接,这些链接适用于 Intel 或 Apple Silicon,与通用包相比,下载文件更小。

Website showing the new downloads view for Apple Silicon builds

Website showing the default download for macOS

辅助功能

工具栏和选项卡占用一个制表符停靠点

工作台中的所有工具栏现在都遵循标准的导航行为,因此工具栏仅在制表符顺序中占用一个位置,并且可以使用箭头键进行导航。一旦焦点位于工具栏上,应使用箭头键将焦点移动到工具栏中的特定项目上。由于此更改,工作台的制表符停靠点要少得多,从而更容易在所有部分之间进行导航。

为了保持一致性,对选项卡区域也进行了相同的更改。因此,整个选项卡区域只有一个制表符停靠点,应使用左右箭头键在选项卡之间进行键盘导航。

Windows 上的单词导航

我们改进了 Windows 上的单词导航方式,使其与 Windows 上的屏幕阅读器对基于 Electron 的应用程序的期望保持一致。现在,使用单词导航时,每个单词都会被屏幕阅读器正确朗读。

由于此更改,我们弃用了以下命令。它们仍然有效,但我们可能会在将来删除它们。

  • cursorWordAccessibilityLeft
  • cursorWordAccessibilityLeftSelect
  • cursorWordAccessibilityRight
  • cursorWordAccessibilityRightSelect

非 Windows 平台已按预期工作,因此我们没有在那里进行任何更改。

改进的视图和按钮角色

根据用户反馈,我们改进了工作台中的多个视图和按钮的角色。活动栏侧边栏面板现在具有role:none,这将使屏幕阅读器减少喋喋不休。管理帐户按钮在活动栏中现在可以正确地宣布它们有一个弹出窗口。

集成终端

在窗口重新加载时保留终端进程

现在,本地终端进程在窗口重新加载时会恢复,例如,当扩展安装需要重新加载时。终端将重新连接,并且终端的 UI 状态将恢复,包括活动标签和拆分终端的相对尺寸。

In a local window, two split terminals are created and resized. On reload, the layout appears unchanged.

可以通过将terminal.integrated.enablePersistentSessions 设置为 false 来禁用此功能。

Windows 性能改进

由于 新的终端进程布局,来自终端进程的频繁 pty 数据事件现在应该可以更快地处理。由于 Windows 上 conpty 提供的事件较小,因此这预计会对 Windows 的影响大于其他平台。

自动重新启动需要环境更改的终端

最近推出了一项新功能,该功能允许扩展影响终端的环境。这被各种语言扩展和内置的 git 扩展用来启用 VS Code 作为 git 身份验证提供程序,从而无需登录。以前,此功能的用户体验是在右上角显示一个微妙的⚠️图标,以指示终端的环境已过时。该指示器很微妙,因为环境更改可能重要也可能不重要。

我们对此进行了调整,以便在终端尚未与之交互时自动重新启动具有过时环境的终端。这可能会导致一些闪烁,但扩展终端集成现在更加无缝。例如,WSL 窗口中的第一个终端不再显示 Git 身份验证错误,前提是重新启动发生在向终端中键入之前。

工作台

Emmet

用缩写包裹用缩写包裹单独的行 命令已合并为单个 用缩写包裹 命令,以减少对使用哪个包裹命令的任何混淆。此外,用缩写包裹 命令现在可以正确显示预览空格。

emmet.extensionsPath 设置现在也可以接受路径数组,而不仅仅是字符串。因此,与设置同步相结合,可以在不同的机器上指向不同的代码段文件,而无需针对每台机器更新设置。

产品图标主题

第一个产品图标主题已在扩展市场中提供。感谢主题作者的辛勤工作!

要选择或查找主题,请使用命令提示符或设置齿轮中的 首选项:产品图标主题 命令。

Product icon themes in the Extension Marketplace

上下文键的 IntelliSense

VS Code 使用 when 子句来启用和禁用键绑定。扩展还使用 when 子句来控制 菜单视图 贡献。现在,编写这些 when 子句要简单得多,因为编辑器会为它们提供补全。

键绑定.json 中上下文键的 IntelliSense 主题:GitHub Light Theme,字体:FiraCode

打开编辑器的新无标题文件操作

现在,打开的编辑器 视图标题区域中有一个 新无标题文件 操作。

New untitled file in Open Editors view

更新的应用程序菜单设置

应用程序菜单可见性的window.menuBarVisibility 设置已更新,以更好地反映选项。已进行了两个主要更改。

首先,该设置的default 选项已重命名为classic

其次,应用程序菜单栏中的 显示菜单栏 条目现在在classiccompact 选项之间切换。要完全隐藏它,可以更新设置,或在compact 模式下使用活动栏的上下文菜单。

应用程序菜单中的显示菜单栏条目 主题:GitHub Light Theme

Webview 缓存改进

我们改进了 webview 中本地文件的缓存。如果 webview 从磁盘重新加载文件,那么我们现在使用 ETags 来避免在文件未更改时再次读取文件。这可以消除数据传输,并提高响应时间,尤其是对于远程工作区。

此缓存目前仅适用于现有 webview 重新加载资源的情况。它不适用于新创建的 webview,即使该 webview 属于之前创建了类似 webview 的扩展。

工作区搜索操作的更改

我们修改了现有的workbench.view.search,使其不再将选定文本放入搜索输入框中,而是打开输入框。要使用选定文本创建新搜索并尊重search.mode 设置,应使用workbench.action.findInFiles

仅修饰键的键绑定

现在可以为重复的修饰符定义键绑定,例如shift shiftalt altctrl ctrlcmd cmd / meta meta / win win。这些键绑定可以手动在keybindings.json中输入,例如

{ "key": "shift shift", "command": "workbench.action.quickOpen" }

更新的列表/树 UI

我们更新了列表/树的样式,以匹配本地的焦点和选中指示器:现在,获得焦点的元素将使用轮廓颜色进行渲染。

List/tree UI showing focused element

重大更改

建议主题发布者也采用此样式,只需将list.focusBackground颜色的自定义更改为quickInput.list.focusBackground颜色即可。要查看示例,请查看此 提交

表格小部件

我们引入了一个新的表格小部件,它建立在现有的列表小部件之上,因此我们可以像渲染列表元素一样高性能地渲染表格数据。目前,它在远程功能的端口视图中使用。

Table widget view of remote Ports

入门

我们正在尝试使用一个名为入门编辑器的新的编辑器来显示启动时。其目的是使 VS Code 的一些功能更容易被新用户接受。一些 Insider 用户可能已经看到了它,它将在此迭代过程中逐渐推出给更多稳定用户。您可以随时通过将workbench.startupEditor设置修改为gettingStarted或远离gettingStarted来选择加入或退出新行为。

Getting Started experience walkthrough

时间线视图

现在,您可以使用**选择以比较**和**与所选内容比较**命令比较 Git 历史时间线条目中的更改,这类似于比较资源管理器视图中的文件。此功能使您可以快速查看 Git 文件历史记录中任意两个提交之间的所有更改。

Select for Compare command in context menu

默认的窗格悬停边框颜色

1.52 版本 中,我们引入了窗格悬停边框颜色令牌(sash.hoverBorder),但没有设置默认值。我们现在在所有主题上默认显示此颜色。

Sash hover border color

调试

断点视图改进

用于删除断点的新内联操作

我们在**断点视图**中添加了一个内联操作X来删除断点。此操作应该使删除断点变得更容易。

Breakpoints view showing X next to selected breakpoint

异常筛选器的帮助文本支持

最近,我们在**断点视图**中添加了对编辑异常筛选器上的条件的支持。

为了使这些条件更容易发现,并且它们的语法不言自明,VS Code 现在在异常筛选器上显示悬停,并在条件文本框中显示占位符文本。

由于两者信息都是由底层的调试扩展提供的,因此它比一些通用消息更具体(因此更有帮助)。

由于此新功能基于对调试适配器协议的添加(见下文),因此它需要调试扩展的可选加入。在此版本中,只有 VS Code 的内置 JavaScript 调试器支持此新功能。

Breakpoint placeholder

新设置和其他改进

在调试控制台中折叠相同的行

有一个新的设置debug.console.collapseIdenticalLines,它控制调试控制台是否应该折叠相同的行,并使用徽章显示多个出现。默认情况下是折叠。

控制在调试之前保存哪些编辑器

有一个新的设置debug.saveBeforeStart,它控制在调试开始之前保存哪些编辑器。此设置具有以下值

  • allEditorsInActiveGroup:保存活动组中的所有编辑器。默认值。
  • nonUntitledEditorsInActiveGroup:保存活动组中的所有编辑器,除了未命名的编辑器。
  • none:不保存任何编辑器。

此设置对 PowerShell 调试很有用,因为 PowerShell 调试器支持调试未保存的文件。

改进的重新启动帧操作启用

随着对调试适配器协议的新添加,调试扩展现在能够与 VS Code UI 通信,说明是否在选定的堆栈帧上可以使用“重新启动帧”操作。VS Code 现在在**调用堆栈视图**中为无法重新启动的堆栈帧禁用重新启动帧内联操作。

例如,JS-Debug 扩展已经采用了这一点,现在异步堆栈跟踪禁用了重新启动帧操作。

语言

TypeScript 4.2

VS Code 现在随附 TypeScript 4.2.2。此重大更新包含许多 TypeScript 语言改进,以及许多针对 JavaScript 和 TypeScript 工具的改进和错误修复。

您可以在 TypeScript 博客上 阅读有关 TypeScript 4.2 的更多信息。

快速修复以声明缺少的函数

新的添加缺少的函数声明快速修复将为缺少的函数创建存根。例如,如果我们对缺少的函数add有一个调用

const x: number = add(1, 2);

add上使用添加缺少的函数声明将产生

const x: number = add(1, 2);
function add(arg0: number, arg1: number): number {
  throw new Error('Function not implemented.');
}

您可以在编写代码时使用此快速修复,根据调用签名快速创建函数的存根。

要使用 JavaScript 中的此快速修复,您必须 启用类型检查

JS Doc 模板现在生成 @returns

JS Doc 模板现在会自动包含@returns,如果被注释的函数包含return语句。例如,对于函数getViz

function getViz(el) {
  return el?.viz;
}

生成的 JSDoc 模板为

/**
 *
 * @param {*} el
 * @returns
 */
function getViz(el) {
  return el?.viz;
}

您可以使用javascript.suggest.jsdoc.generateReturnstypescript.suggest.jsdoc.generateReturns禁用 JSDoc 注释中的@returns

已弃用的 DOM API 现在已标记

已弃用的 DOM 方法现在在建议和代码中标记为已弃用

document.clear being marked as deprecated in code

您可以通过设置editor.showDeprecated: false来禁用在编辑器中显示已弃用的属性和函数。

笔记本

自动重新加载笔记本

笔记本现在会在它们的文件在磁盘上更改时以及它们没有未保存的更改时自动重新加载。这应该使处理受版本控制的笔记本变得更加简单。

大型单元格的改进焦点

当大型笔记本单元格获得焦点时,您现在可以更好地判断哪个单元格获得焦点,即使单元格的顶部和底部不在视图中。我们现在在获得焦点单元格的左侧和右侧显示边框。

Notebook focus for a large cell

CSS/LESS/SCSS 和 HTML 中的悬停

您现在可以微调 HTML 和 CSS 中悬停的内容,以

  • 不显示来自 MDN 的文档
  • 不显示指向 MDN 页面的链接

使用设置css.hover.documentationcss.hover.references来更改 CSS 的悬停。将css替换为htmlcssscssless来更改这些语言的设置。

预览功能

可扩展的笔记本 Markdown 渲染器

在此迭代中,我们探索了使笔记本单元格的 Markdown 渲染器可扩展。例如,在下面的屏幕截图中,我们扩展了 VS Code 的 Markdown 渲染器以支持在笔记本单元格中显示数学公式

A math formula being rendered in a notebook cell

为了使我们的 Markdown 渲染器可扩展,我们探索了使用 Markdown It 来渲染所有笔记本 Markdown。我们还探索了将渲染的 Markdown 移动到笔记本的后台 webview 中。

虽然我们还没有准备好为此开放官方 API,但我们计划在 3 月继续探索。您也可以使用未公开的notebook.experimental.useMarkdownRenderer: true设置立即试用新的可扩展 Markdown 渲染器。

对扩展的贡献

括号

来自 Brackets 源代码编辑器的开发人员可以使用 Brackets Keymap 扩展在 VS Code 中继续使用相同的键盘快捷键。还有一个 Brackets Extension Pack,它捆绑了用于处理 CSS 和创建实时预览的扩展。

Brackets Extension Pack in the Marketplace

GitHub 拉取请求和问题

继续对 GitHub 拉取请求和问题 扩展进行开发,该扩展使您可以处理、创建和管理拉取请求和问题。

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

远程开发

继续对 远程开发扩展 进行开发,这些扩展使您可以使用容器、远程机器或 Windows 子系统用于 Linux (WSL) 作为功能齐全的开发环境。

1.54 中的功能亮点包括

  • 端口视图表格布局
  • 远程 - SSH:X11 转发
  • WSL:改进的 WSL 2 支持

您可以在 远程开发版本说明 中了解有关新扩展功能和错误修复的信息。

扩展创作

编辑器标题菜单和“运行”子菜单的限制

编辑器工具栏(editor/title)中的空间有限。因此,我们已

  • 实现了一个溢出行为。当主要组(即使用图标渲染的操作组)超过九个命令时,所有其他命令都将溢出到...菜单中。
  • 添加了editor/title/run子菜单。我们要求扩展作者将运行和调试命令贡献到此菜单中,而不再贡献到editor/title菜单中,正如我们在 之前的版本 中建议的那样。此外,不再需要使用魔术组值1_run@101_run@20来使命令显示在正确的位置。

Run dropdown menu

另请注意,运行子菜单是动态的,当它只有一个子项时,它将用第一个子项替换自身。

身份验证提供者 API

您现在可以注册一个身份验证提供者,其他扩展可以使用它来针对服务执行身份验证。

扩展市场的新反馈渠道

扩展市场相关问题的公共仓库现已上线。如果您遇到技术问题、想提供反馈或有功能需求,请创建问题

更新的 Codicon 图标

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

  • debug-rerun
  • gather
  • git-pull-request-create
  • notebook-template
  • run-above
  • run-below
  • type-hierarchy
  • type-hierarchy-sub
  • type-hierarchy-super
  • variable-group

Codicons for tasks

我们还更新了以下图标以保持一致性:

  • debug-alt-small
  • debug-alt
  • debug-rerun
  • play-circle
  • play
  • run-above
  • run-all
  • run-below

Consistent codicons

建议的扩展 API

每个里程碑都包含新的 API 提案,扩展作者可以试用它们。我们始终需要您的反馈。以下步骤可帮助您试用 API 提案:

  • 您必须使用 Insider 版本,因为 API 提案会频繁更改。
  • 您必须在扩展的 package.json 文件中添加以下行:"enableProposedApi": true
  • 将最新版本的vscode.proposed.d.ts 文件复制到项目的源代码位置。

您不能发布使用 API 提案的扩展。下一个版本可能会出现重大更改,我们不希望破坏现有扩展。

图标贡献点

图标贡献点允许扩展通过 ID 定义新的图标以及默认图标。然后,扩展(或任何依赖于该扩展的其他扩展)可以在可以使用 ThemeIcon 的地方使用该图标 ID:在Markdown 字符串(例如,"$(distro-ubuntu)" Ubuntu 20.04")以及所有接受ThemeIcon 的地方(例如,new ThemeIcon("distro-ubuntu"))。

产品图标主题可以重新定义图标(如果它们知道图标 ID)。

有关更多信息,请参阅问题 114942 获取详细信息并提供反馈。

内联值提供程序 API

目前,VS Code 调试器的“显示内联值”功能基于 VS Code 核心中的通用实现,不支持通过设置进行自定义或通过扩展进行扩展。因此,它并不适合所有语言,有时会显示不正确的值,因为它不理解底层源语言。为此,我们正在开发一个扩展 API,允许完全替换内置实现,或使用自定义代码替换实现的一部分。

在此里程碑中,我们已提供了API 提案 的第一个实现。

以下是内联值提供程序 API 的简要介绍:

  • 必须为一种语言注册 InlineValuesProvider
  • 对于给定的文档,InlineValuesProvider 必须定位所有应显示内联值的语言元素。
  • 对于每个元素,必须返回一个 InlineValue 描述符对象,该对象指示 VS Code 显示哪些信息。目前支持三种类型的 InlineValue 对象:
    • InlineValueText:要显示的完整文本。
    • InlineValueVariableLookup:VS Code 将尝试在 VARIABLES 视图中查找其值的变量的名称。然后,名称和值将以“名称 = 值”的形式显示。
    • InlineValueEvaluatableExpression:VS Code 将发送到调试器以进行评估的表达式。然后,表达式和结果将以“表达式 = 结果”的形式显示。

以下代码段(来自Mock Debug)展示了用于“markdown”文件的最小内联值提供程序,它使用正则表达式定位“变量”,然后指示 VS Code 通过**变量视图**查找其值。

vscode.languages.registerInlineValuesProvider('markdown', {
  provideInlineValues(
    document: TextDocument,
    viewport: Range,
    context: InlineValueContext
  ): ProviderResult<InlineValue[]> {
    const allValues: InlineValue[] = [];
    for (let l = 0; l <= context.stoppedLocation.end.line; l++) {
      const line = document.lineAt(l);
      var regExp = /local_[ifso]/gi; // match variables of the form local_i, local_f, Local_i, LOCAL_S...
      do {
        var match = regExp.exec(line.text);
        if (match) {
          const varName = match[0];
          const varRange = new Range(l, match.index, l, match.index + varName.length);
          allValues.push(new InlineValueVariableLookup(varRange, varName));
        }
      } while (match);
    }
    return allValues;
  }
});

以下是内联值提供程序的实际应用。

Debugger shows inline values

如果您想对此 API 提案提供反馈,请在此问题中添加评论。

测试

我们继续在VS Code 中进行测试方面取得进展。本月,我们重点关注完善 VS Code 的基本体验和扩展 API。我们还发布了一些有关测试的临时文档,这些文档将在 API 稳定后进一步完善。

语言服务器协议

针对即将发布的 3.17 版本,已实现诊断拉取模型 的第一个提案。此提案可在VS Code LSP 库 的后续版本中使用。

调试适配器协议

为 ExceptionBreakpointsFilter 添加更多帮助文本属性

ExceptionBreakpointsFilter 中添加了两个可选 UI 属性 descriptionconditionDescription

借助这些属性,客户端可以显示有关异常断点的其他信息。description 属性可以在悬停时显示,而 conditionDescription 可用作文本框的占位符文本,用户可以在其中编辑条件。

改进 setExceptionBreakpoints 请求的描述

我们通过添加有关如果用户输入无效的异常断点条件,适配器应执行的操作的指南,改进了 setExceptionBreakpoints 请求的描述。

为堆栈帧添加新的 canRestart 属性

堆栈帧中添加了一个新的可选布尔属性 canRestart。它指示是否可以使用 restart 请求重新启动堆栈帧。根据此信息,客户端可以启用或禁用“重新启动帧”上下文菜单操作。

工程

Electron 沙箱方面的进展

在此里程碑中,我们继续使 VS Code 窗口准备好启用 Electron 的沙箱上下文隔离 功能。

具体来说:

  • 我们能够将渲染器中的一些本机模块需求移动到其他进程。
  • 实现了 MessagePort 通信通道,使其在启用沙箱时也能正常工作。

新的终端进程布局

终端进程现在会在新的“pty 主机”进程下生成,而不是在窗口进程下生成。此更改不仅是 Electron 沙箱的一部分,还应提高终端的稳定性和性能。

将 Windows 安装程序发布到 Windows 包管理器

x86x64 的 Windows 用户和系统安装程序现已发布到Windows 包管理器。您可以使用winget 工具搜索所有 Visual Studio Code 安装程序 - winget search vscode,并安装 任何已发布的安装程序。

使用 TypeScript 4.3 构建 VS Code

VS Code 现在使用 TypeScript 4.3 的夜间构建版本进行构建。这让我们可以验证 TypeScript 团队的最新工作,并提供有关新更改的反馈。

最新的 TypeScript 版本已帮助我们发现了一些情况,例如在条件语句中缺少 await

防止更改 yarn.lock

我们现在拥有 CI,可以防止针对 yarn.lock 文件的 PR,以提高供应链安全性。

默认分支:main

我们已开始将所有存储库的默认分支重命名为 main,包括 microsoft/vscode。目前,我们已经完成了约 60% 的工作。

文档

课堂中的 VS Code 和 Python

阅读案例研究,了解 Harvey Mudd College 的计算机科学教授如何在 Python 的入门 CS 课程中使用 VS Code。了解他为学生推荐的设置,以及有用的扩展和免费的 Python 和数据科学自定进度的课程。

故障排除扩展博客文章

每个人都喜欢安装和使用 VS Code 扩展。但是,当您安装了大量扩展时,编辑器有时可能会出现“故障”,并且您需要知道这种行为是否是由某个特定扩展引起的。如果您错过了扩展二分查找 实用程序的早期公告,您可以阅读这篇"使用二分查找解决扩展问题" 博客文章,其中描述了如何快速排除“错误”扩展,甚至帮助扩展作者提供反馈。

重要修复

  • 100151:菜单键应用于资源管理器中的错误项
  • 112055:调试为每个 Python 会话打开一个新的集成终端
  • 114881:复制文件夹或文件时保留符号链接
  • 114933:“无法跟踪任务”的沮丧
  • 115922:文件资源管理器中的筛选功能无法使用光标键
  • 116037:调试控制台中没有显示输出的链接悬停
  • 116101:我在命令搜索中找不到目标命令,因为英文描述已消失
  • 116932:从贡献的命令执行中抛出自定义异常会显示神秘的错误弹出窗口

感谢

最后,我们衷心感谢以下为 VS Code 做出贡献的人员:

对我们问题跟踪的贡献

vscode 的贡献

language-server-protocol 的贡献

vscode-languageserver-node 的贡献

vscode-emmet-helper 的贡献

vscode-html-languageservice 的贡献

vscode-js-debug 的贡献

vscode-textmate 的贡献

vscode-vsce 的贡献