尝试在 VS Code 中使用

2020 年 2 月(版本 1.43)

更新 1.43.1:本次更新解决了这些问题

更新 1.43.2:本次更新解决了这些问题

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


欢迎来到 Visual Studio Code 2020 年 2 月发布版本。此版本中包含许多我们希望您会喜欢的新更新,其中一些主要亮点包括:

如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。

内测版:想尽快试用新功能吗?您可以下载每晚更新的内测版 (Insiders) 构建版本,并尽快体验最新的更新。有关 Visual Studio Code 的最新消息、更新和内容,请在 Twitter 上关注我们 @code

工作台

搜索编辑器

经过几轮在内测版 (Insiders) 上的稳定化,我们发布了搜索编辑器,它允许您在全尺寸编辑器中查看工作区搜索结果,并支持语法高亮和可选的上下文行。这已是一个长期以来备受请求的功能

下图是搜索“SearchEditor”一词的示例,其中包含匹配文本前后各两行的上下文:

Search Editor 主题:A Touch of Lilac,字体:Hasklig

在搜索编辑器中,可以使用转到定义 (Go to Definition) 操作导航到结果,例如按F12 在当前编辑器组中打开源位置,或按⌘K F12 (Windows、Linux Ctrl+K F12) 在侧边编辑器中打开位置。此外,双击也可以选择打开源位置,这可以通过 search.searchEditor.doubleClickBehaviour 设置进行配置。

Search Editor definition reveals

您可以使用搜索编辑器:打开新的搜索编辑器 (Search Editor: Open New Search Editor) 命令或搜索视图顶部的打开新的搜索编辑器 (Open New Search Editor) 按钮打开新的搜索编辑器。此外,您还可以通过结果树顶部新增的在编辑器中打开 (Open in Editor) 链接或搜索编辑器:在编辑器中打开结果 (Search Editor: Open Results in Editor) 命令,将搜索视图中的现有结果复制到搜索编辑器。

注意:您可以试用实验性的搜索编辑器:应用更改 (Search Editor: Apply Changes) 扩展,将您在搜索编辑器中所做的编辑同步回源文件。

Search Editor: Apply Changes extension

可拖动调整框角

您知道可以通过抓取和拖动两个正交调整框的交叉点来同时调整它们的大小吗?这对于编辑器调整框已经适用,现在它也适用于编辑器和视图之间的边缘。

Draggable sash corners

主题:GitHub Sharp,字体:Fira Code

macOS 公证版本

适用于 macOS 的 Visual Studio Code 现在已通过 Apple 公证,因此您应该不再收到以下对话框。

macOS missing notarization warning

阅读调查问题Apple 开发者文档了解更多详细信息。

进度通知

从此版本开始,指示长时间运行操作的通知行为略有不同。

  • 它们不再提供通用的关闭 (Close) 按钮,因为这会让人误以为操作已取消。您仍然可以按 Esc 键来隐藏通知。
  • 当通知隐藏但操作仍在进行时,通知会在状态栏中显示其操作进度。

后一个更改可帮助您了解,在您关闭通知后,操作仍在后台继续运行(例如长时间的保存操作)。

下图中,操作仍在运行,直到选择取消 (Cancel) 按钮。

Progress Notification

主题:Dracula Official,字体:Fira Code

无标题编辑器

新设置 workbench.editor.untitled.labelFormat 允许您控制无标题编辑器是否应使用文件内容作为标题。可能的值是 contentname。配置 'workbench.editor.untitled.labelFormat': 'name' 以恢复以前的行为,即无标题编辑器将具有简短的标题,例如无标题-1 (Untitled-1)

将文本粘贴到无标题编辑器中时,VS Code 现在会自动尝试从文本的第一行检测语言模式。例如,如果第一行包含典型的 XML 头 <?xml version="1.0" encoding="UTF-8"?>,则粘贴 XML 时将自动设置 XML 模式。

VS Code 支持通过协议链接(例如 vscode://file/<文件路径>)打开文件。在此里程碑中,我们已将支持扩展到包括打开文件夹或工作区。

文件夹或工作区的语法与文件相同。

vscode://file/<path>
vscode-insiders://file/<path>

欢迎视图

欢迎视图是工作台的新增功能,它允许视图在没有有意义的内容可显示时,为用户创建用于创建内容或配置 VS Code 的起始体验。一些视图已经采用了此基础架构,例如文件资源管理器,它将提供打开文件夹或克隆 Git 存储库以帮助您入门。

File Explorer Welcome view

主题:GitHub Sharp

源代码管理欢迎视图

得益于新的欢迎视图基础架构,源代码管理视图现在为某些情况提供了更好的体验,否则它将显示为空。例如,当未检测到 Git 安装时,它现在可以引导用户打开文件夹或克隆存储库,或安装 Git。

Source Control Welcome view

主题:GitHub Sharp

编辑器

迷你地图大小

有一个新的设置 editor.minimap.size,它控制迷你地图如何使用垂直空间。

  • 当设置为 proportional(默认值)时,迷你地图中的每行都会获得一定量的垂直空间,具体取决于 editor.minimap.scale。例如,在高 DPI 显示器上,如果配置的缩放比例为 1(默认值),则迷你地图中的每行将获得 4 像素。因此,对于 100 行的文件,迷你地图中渲染的行高为 400 像素;对于 1000 行的文件,则为 4000 像素。这意味着对于大文件,迷你地图也会随着当前文件的滚动而滚动。
  • 当设置为 fit 时,迷你地图的高度被限制为不超过编辑器的高度。因此,如果文件有很多行,它们将被采样,并且只有一部分将在迷你地图中呈现,这样迷你地图就不需要滚动。
  • 当设置为 fill 时,迷你地图的高度始终与编辑器高度相同。对于大文件,这也是通过采样行来实现的,但对于小文件,则是通过为每行保留更多垂直空间(拉伸行)来实现的。

这里将大小从 proportional 更改为 fit,然后在较小的文件中从 fit 更改为 fill

Minimap size

迷你地图背景和滑块颜色

现在有新的颜色可用于自定义迷你地图及其滑块。其中一种新颜色是 minimap.background,当该颜色定义为透明(降低 #RRGGBBAA Alpha 通道)时,迷你地图将透明渲染。

Transparent minimap

{
  "workbench.colorCustomizations": {
    "minimap.background": "#00000055"
  }
}

列选择模式

有一个新的全局切换功能,可通过选择 (Selection) > 列选择模式 (Column Selection Mode) 菜单项访问。一旦进入此模式(状态栏中会显示),鼠标手势和箭头键将创建列选择。

Column selection

您也可以从状态栏禁用列选择模式。

选择时渲染空白字符

editor.renderWhitespace 设置的默认值已从 none 更改为 selection。现在,默认情况下,空白字符将在高亮显示的文本上渲染。

这里,制表符和空格字符在选定区域中显示。

Render whitespace characters on selection

现在可以更好地控制转到定义 (Go to Definition) 鼠标手势的行为。默认情况下,通过鼠标转到定义 (Go to Definition) 会打开一个单独的编辑器,但通过将新设置 editor.definitionLinkOpensInPeek 设置为 true,此手势将在浮窗视图中打开。

Definition with mouse in Peek

在折叠行的任意位置展开

有一个新设置编辑器:行尾点击后展开 (Editor: Unfold On Click After End of Line) (editor.unfoldOnClickAfterEndOfLine),它控制您在折叠行的文本右侧(...之后)的空白区域点击时会发生什么。当设置为true时,您可以在折叠行文本的任意位置点击,而不必担心精确选择省略号(...)。默认情况下,此选项是关闭的。

folded line with ellipses

跨多个文件撤消文本编辑

当撤消影响多个文件的重命名或代码操作时,VS Code 现在允许您撤消所有受影响文件中的更改。

撤消跨文件编辑时将出现提示。

Undo across files prompt

注意:文件操作(例如重命名文件)尚不支持。例如,Java 中重命名类名(文件名也随之重命名)尚不支持跨文件撤消。

具有不同颜色的多个标尺

现有的 editor.rulers 设置已扩展,允许定义具有自定义颜色的标尺。在以下截图中,第 80 列有一个洋红色标尺,第 90 列有一个红色标尺。

Colored rulers

{
  "editor.rulers": [
    { "column": 80, "color": "#ff00ff" },
    { "column": 90, "color": "#ff0000" }
  ]
}

编辑器顶部和底部填充

现在可以使用 editor.padding.topeditor.padding.bottom 在编辑器的顶部或底部保留空白(像素数)。

这是顶部填充为 50 像素的编辑器。

editor.padding.top set to 50 pixels

{
  "editor.padding.top": 50
}

滚动主轴

当尝试使用现代触控板垂直滚动时,文件也经常水平滚动。现在有一个新设置 editor.scrollPredominantAxis(默认设置为 true),它会阻止“对角线”滚动。这会强制滚动手势为垂直或水平(基于最高的绝对滚动增量),但绝不会是对角线。

Linux 上的 Shift+Insert

在 1.42 版本中,Shift+Insert 被修改为从选定剪贴板粘贴。我们收到了大量反馈,称这破坏了现有的肌肉记忆,因此我们决定回滚,并让 Shift+Insert 像以前一样从常规剪贴板粘贴。

辅助功能

Linux 屏幕阅读器支持

在社区的帮助下,我们一直在努力使 VS Code 能够通过 Orca 屏幕阅读器在 Linux 上使用。Orca 和 Chromium 仍在积极开发屏幕阅读器支持,因此要使其完全正常工作,还需要做一些事情:

  • 请确保使用 Orca master 分支的最新版本。说明可在问题 #91063中找到。
  • 确保在 VS Code 中将设置 "editor.accessibilitySupport": "on" 打开。您可以通过设置或运行显示辅助功能帮助 (Show Accessibility Help) 命令并按 Ctrl+E 来打开屏幕阅读器优化模式。

启用该设置后,VS Code 应该可以与 Orca 屏幕阅读器配合使用。

语言

TypeScript 3.8.3

VS Code 现在捆绑了 TypeScript 3.8.3。此重大更新带来了对新语言功能的支持,包括ECMAScript 私有字段顶级 await 表达式和export * as ns 语法,以及许多工具功能和改进。此次更新还修复了许多重要错误。

您可以在TypeScript 博客上阅读更多关于 TypeScript 3.8 的内容。

转换为模板字符串重构

您可以使用 JavaScript 和 TypeScript 的新转换为模板字符串 (Convert to template string) 重构,快速将字符串连接转换为模板字符串

Converting string concatenation to a template string

JavaScript 和 TypeScript 的调用层次结构支持

TypeScript 3.8 为 JavaScript 和 TypeScript 带来了调用层次结构支持。

Viewing incoming calls using call hierarchy in a TypeScript file

IntelliSense 现在可以为 http 和 https 链接渲染JS Doc @link 内联标签。在下面的示例图片中,请注意 lightbulb menu@link 如何在悬停提示中呈现。

A hover with a rendered @link JSDoc tag

指向 URL 的 @link 适用于 JavaScript 和 TypeScript,并在悬停提示、建议详情和签名帮助中渲染为可点击的链接。

TypeScript 语义高亮

TypeScript 和 JavaScript 现在默认启用语义高亮。语义高亮由 TypeScript 语言服务器提供,并基于 TextMate 语法高亮之上。默认语法 (TextMate) 高亮器将许多标记分类为 variables,而这些标记现在被解析为命名空间、类、参数等等。

语义高亮由以下设置控制:

"editor.semanticHighlighting.enabled": true

JSON 模式

将文件名与模式关联时,您现在也可以使用排除模式。排除模式以“!”开头。要匹配,至少一个模式需要匹配,并且最后一个匹配模式不得是排除模式。

  "json.schemas": [
    {
      "fileMatch": [
        "/receipts/*.json",
        "!/receipts/*.excluded.json"
      ],
      "url": "./receipts.schema.json"
    }
  ]

调试

“运行”在 UI 中更显眼

用户研究表明,新用户很难找到在 VS Code 中运行程序的方法。其中一个原因是,他们认为现有的“调试”功能与“运行”程序不相关。因此,我们正在让“运行”在 UI 中更加突出。

  • 主菜单调试 (Debug) 已变为运行 (Run) 菜单。
  • 运行和调试 (Run and Debug) 视图已变为运行 (Run) 视图,并且相应的活动栏图标现在显示一个大的“播放”图标,带有一个小的“bug”装饰。

Run and Debug Activity Bar icon

调试控制台分组

VS Code 调试控制台现在支持输出分组。调试扩展可以指示何时应将调试控制台输出分组到共同的父级下。目前,只有 Mock Debug 扩展实现了输出分组,但很快其他调试扩展也会跟进——最值得注意的是 JavaScript 调试器。

Debug Console grouping

禁用调试控制台历史建议

您现在可以通过新设置 debug.console.historySuggestions 关闭调试控制台中的历史建议。默认情况下,历史建议是开启的。

集成终端

Unicode 11 支持

终端中字符的宽度现在默认为 Unicode 11 宽度。这对大多数人来说意味着表情符号将正确显示为宽字符。

Emojis are correctly wide characters

更好的 Alt+Click 导航提示支持

终端有一个功能,允许您 Alt+Click 单元格,光标将导航到该单元格。以前,在 shell 提示符下,这只适用于单行,即使它已换行。现在已改进为适用于完整的换行行。

Alt+Click can move across wrapped lines 主题:Sapphire

请注意,这可能在 Windows 上尚未正常工作,但最近对 ConPTY 的更改应该会在未来改善这一点。

任务

任务快速选择器更新

执行运行任务 (Run Task) 命令时显示的任务快速选择器已更新,以显示哪些任务提供程序仍在运行。如果您不需要该提供程序中的任务,停止检测 (Stop Detecting) 按钮将立即向您显示已检测到的任务,这样您就不必等待任何慢速任务提供程序。

Tasks Stop Detecting 主题:One Dark Pro,字体:Fira Code

任务实例限制

任务的 "runOptions" 现在包含一个 "instanceLimit",它指定允许的任务实例数。默认的 "instanceLimit" 为 1。

promptString 密码输入

"promptString" 用户输入类型可以具有 "password": true,这将导致下拉输入框像密码一样隐藏输入内容。

预览功能

预览功能尚未准备好发布,但已足够实用。我们欢迎您在它们开发过程中提供早期反馈。

设置同步

过去几个月,我们一直致力于支持在不同机器之间同步 VS Code 设置、扩展和键盘快捷键(热门功能请求#2743)。在此里程碑中,我们很高兴地宣布,此功能已准备好在我们的下一个 1.44.0 内测版 (Insider) 发布中进行预览。您现在可以在所有机器上的所有 VS Code 安装中同步您的偏好设置。您还可以轻松地在新机器上使用您的个人偏好设置来启动 VS Code。

以下视频演示了在新机器上本地应用扩展和设置:

Bootstrap VS Code using Settings Sync

目前,设置、键盘快捷键、扩展和显示语言已同步,但我们计划添加更多内容。您可以查看我们建议的设置同步功能列表。

机器设置(具有 machinemachine-overridable 作用域的设置)默认情况下不同步。您还可以从设置编辑器或使用 sync.ignoredSettings 设置在此列表中添加或删除设置。

Ignored settings 主题:GitHub Sharp

键盘快捷键默认按平台同步。如果您的键盘快捷键与平台无关,您可以通过禁用设置 sync.keybindingsPerPlatform 在不同平台之间同步它们。

所有内置和已安装的扩展都将与其全局启用状态一起同步。您可以从扩展视图或使用设置 sync.ignoredExtensions 跳过同步某个扩展。

Ignored extensions 主题:GitHub Sharp

设置同步支持在同步时检测设置和键盘快捷键中的冲突。冲突通过差异编辑器显示,左侧是传入(远程)更改,右侧是本地更改。您可以通过在右侧编辑器中编辑并使用编辑器中提供的操作合并更改来解决冲突。

这里使用接受远程 (Accept Remote) 操作选择远程 colorTheme 设置值。

Settings Sync handling conflicts 主题:GitHub Sharp,GitHub Sharp Dark

设置同步活动可以在日志(同步)(Log (Sync)) 输出视图中监控。所有本地偏好设置都会在同步期间更改时在磁盘上备份最近 30 天的数据。您可以使用命令同步:打开本地备份文件夹 (Sync: Open Local Backups Folder) 前往备份位置并检索您的旧偏好设置。

Settings Sync log 主题:GitHub Sharp

任何时候,您都可以关闭同步,无论是当前 VS Code 实例还是所有 VS Code 安装。当选择禁用所有同步时,您的数据将从云端删除。

Turn off Settings Sync

注意:设置同步使用 Microsoft 帐户存储您的 VS Code 偏好设置以进行同步,因此您需要一个帐户才能使用此功能。有关更多信息,请参阅设置同步文档

时间线视图

在本次迭代中,我们继续在新的时间线视图上取得进展。它现在默认在内测版 (Insiders) 中启用,并且可以通过以下设置在稳定版中启用:

"timeline.showView": true

下面的时间线视图显示了文件的 Git 提交历史。

Timeline view

主题:Dark Amethyst

我们现在添加了分页支持(通过上面显示的加载更多 (Load more) 操作),并在右侧添加了相对时间戳。扩展还可以为时间线视图和单个时间线项目贡献菜单项。在上面的截图中,内置的 Git 扩展正在贡献命令复制提交 ID (Copy Commit ID)复制提交消息 (Copy Commit Message)

新的 JavaScript 调试器

本月我们继续在新的 JavaScript 调试器上取得进展。它默认安装在内测版 (Insiders) 中,并且可以在 VS Code 稳定版中从 Marketplace 安装。您可以通过启用 debug.javascript.usePreview 设置来将其与现有启动配置一起使用。以下是我们本月添加的一些新功能:

美化打印

Animation of VS Code asking whether to pretty-print a minified file when the debugger steps into it. Selecting "yes" formats the file and moves the debugger into the new beautified code.

主题:Earthsong,字体:Fira Code

调试器现在可以美化打印文件,这在处理压缩源代码时特别有用。当您步进或打开一个看起来被压缩的文件时,它会显示一个提示,您也可以通过调试:为调试美化打印 (Debug: Pretty print for debugging) 命令手动触发美化打印。

您可以通过选择从不 (Never) 或将设置 debug.javascript.suggestPrettyPrinting 更改为 false 来关闭建议提示。

支持 Microsoft Edge 和 WebView2

我们现在支持启动新的 Microsoft Edge 浏览器,只需将调试类型从 chromepwa-chrome 更改为 pwa-msedge 即可试用。它支持与 chrome 相同的所有配置设置。

随之而来的是对桌面 Windows 应用程序中 WebView2 控件的支持。查看我们的 webview 演示以了解如何设置此功能。

Image showing the debugger paused at a breakpoint for code running in a native window's WebView.

远程调试

您现在可以在新调试器中调试来自远程工作区(例如 GitHub Codespaces远程 SSH)的浏览器源代码。要进行设置,请端口转发您的 Web 服务器(或使用简单的静态 Web 服务器),然后创建一个指向转发端口的 chromepwa-msedge 启动配置。

例如

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "http://localhost:5000" // <- debug an app forwarded on port 5000
    }
  ]
}

当您启动调试会话时,您的机器上会打开一个浏览器,然后您可以像往常一样从 VS Code 进行调试。

更多视图可移动

上个版本,VS Code 只是让您体验了一下将视图重新定位到面板。在此版本中,此体验已扩展到更多视图。您现在可以移动调试/运行视图或新的时间线视图等视图。您还可以将视图移动到侧边栏中的其他视图。例如,您可能希望将打开的编辑器 (Open Editors) 视图移动到源代码管理视图中。所有这些操作都可以通过拖动视图并将其放置在活动栏或面板中的所需位置来完成。

下面的动画演示了将打开的编辑器 (Open Editors) 视图移动到不同的视图,然后移动到面板。

Moving views around

主题:Horizon Bright,字体:Cascadia Code

我们还引入了一个新命令,以便使用键盘更轻松地移动视图:视图:移动焦点视图 (View: Move Focused View) (workbench.action.moveFocusedView)。

这是一项预览功能,因此如果您陷入无法修复的状态,可以使用一个命令将所有视图重置为其原始位置:视图:重置视图位置 (View: Reset View Locations) (workbench.action.resetViewLocations)。

对扩展的贡献

远程开发

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

1.43 版本的功能亮点包括:

  • 通过应用程序链接打开远程工作区。
  • 远程 - SSH:支持 Windows 和 macOS SSH 主机。
  • 远程 - SSH:默认开启连接共享。
  • WSL:查看最近的博客文章在 WSL 2 中使用 Docker

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

Vetur

适用于 Vue.js 的 Vetur 扩展现在包含对模板插值更好的自动完成功能。您可以在0.24.0 版本中找到更新日志。

扩展创作

调试器扩展 API

调试欢迎视图

欢迎视图内容 API 部分所述,debug 视图现在开放欢迎视图内容贡献。这些添加可以用于引导初学者用户使用简化运行或调试程序的特定功能。

为了避免视图被过多的欢迎视图内容贡献所混淆,我们建议仅为当前活动语言启用单个贡献。为了方便起见,我们引入了一个新的上下文键 debugStartLanguage,它被设置为上次使用调试器的活动编辑器语言。

例如,如果您的调试器针对 Python,您只会在 debugStartLanguage == "python" 时贡献欢迎视图内容。如果您的调试器针对多种语言,您可以使用 OR 运算符 (||) 来组合多个条件。

新的调试悬停 API

目前,VS Code 的调试悬停使用基于正则表达式的启发式方法来查找鼠标下的表达式,然后由 VS Code 调试器对其进行评估,并在悬停提示中显示结果。由于正则表达式不可配置,并非所有语言都能正确处理(或者未能充分处理)。问题#84044#89603#89332 描述了典型问题。

在此里程碑中,我们引入了新的扩展 API 来控制调试悬停的行为。

可以为某种语言注册一个 EvaluatableExpressionProvider,以提供鼠标下的表达式,VS Code 调试器将针对活动的调试会话对其进行评估。

以下是Mock debug 示例中的一个简单示例,它展示了一个基于 getWordRangeAtPosition API 的(简单)实现:

vscode.languages.registerEvaluatableExpressionProvider('markdown', {
  provideEvaluatableExpression(
    document: vscode.TextDocument,
    position: vscode.Position
  ): vscode.ProviderResult<vscode.EvaluatableExpression> {
    const wordRange = document.getWordRangeAtPosition(position);
    if (wordRange) {
      return new vscode.EvaluatableExpression(wordRange);
    }
    return undefined; // nothing evaluatable found under mouse
  }
});

不再转义空白字符

VS Code 调试器 UI 不再转义或引用从调试扩展或调试适配器接收的任何空白字符。例如,在 DAP 变量或 DAP 输出事件中接收到的所有字符串都将按原样显示在 UI 中,不进行修改。

这意味着现在由调试扩展或调试适配器决定在将数据发送到 VS Code 之前是否需要转义空白字符。更多详细信息可在问题 #73845中找到。

CodeAction.disabled

借助 CodeAction.disabled 属性,扩展现在可以告诉 VS Code 为什么给定的 CodeAction 对于用户当前的选择不可用。这对于重构特别有用。

以下是我们的代码操作示例扩展中使用 .disabled 的示例。

import * as vscode from 'vscode';

export class Emojizer implements vscode.CodeActionProvider {
  public provideCodeActions(
    document: vscode.TextDocument,
    range: vscode.Range
  ): vscode.CodeAction[] | undefined {
    const action = new vscode.CodeAction(
      `Convert to ${emoji}`,
      vscode.CodeActionKind.Refactor.append('emojize')
    );

    if (!this.isAtStartOfSmiley(document, range)) {
      // Tell the user why our action is not available
      action.disabled = { reason: 'Selection is not currently on a :)' };
      return [action];
    }

    action.edit = new vscode.WorkspaceEdit();
    action.edit.replace(
      document.uri,
      new vscode.Range(range.start, range.start.translate(0, 2)),
      '😀'
    );
    return action;
  }
}

如果用户尝试通过快捷键应用禁用的代码操作,VS Code 将向用户显示 .disabled 错误消息。

Showing the '.disabled' error in the editor

此外,为了帮助提高可发现性,禁用的代码操作在重构 (Refactor)源操作 (Source Action) 上下文菜单中显示为灰色。

A '.disabled' Code Action in the Refactor menu

请注意,禁用的操作不会显示在顶层灯泡菜单中。

Terminal.exitStatus

扩展现在可以确定终端是否已退出,如果已退出,则使用哪个退出代码(如果有)。

window.onDidCloseTerminal(t => {
  if (t.exitStatus && t.exitStatus.code) {
    vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
  }
});

我们已将建议的诊断链接 API 提升为稳定版。

class Diagnostic {
  ...

  /**
   * A code or identifier for this diagnostic.
   * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
   */
  code?: string | number | {
    /**
     * A code or identifier for this diagnostic.
     * Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
     */
    value: string | number;

    /**
     * A target URI to open with more information about the diagnostic error.
     */
    target: Uri;
  };
}

工作区编辑元数据

我们已经最终确定了 WorkspaceEditEntryMetadata API。它允许扩展作者对工作区编辑的更改进行分类,特别是如果更改在应用之前需要审查。

调试适配器协议

支持输出事件中的分组

output 事件已添加可选的 group 属性,以便通过分组相关消息来组织输出日志。group 的可能值为 startstartCollapsed(分别表示展开或折叠打开一个组),以及 end(表示关闭一个组)。

注意:从本版本开始,VS Code 支持此 DAP 增强功能。

允许通过补全项放置光标

补全项已添加可选的 selectionStartselectionLength 属性。借助这些属性,可以在插入补全文本后控制客户端的当前选择(或插入符位置)。

注意:VS Code 尚未支持此 DAP 增强功能。计划在下一版本中支持。

提议:进度事件

我们在向调试适配器协议添加进度事件的提议方面取得了一些进展。如果您有兴趣,可以参与此 DAP 功能请求的讨论。

语言服务器协议

语言服务器协议 3.16 版本的工作已开始。

新版本中包含的建议支持包括:

  • 补全项的插入/替换编辑。
  • 诊断中的结构代码(例如链接支持)。
  • 符号信息和文档符号的标签支持。

建议的扩展 API

每个里程碑都会带来新的建议 API,扩展作者可以试用它们。一如既往,我们热切期待您的反馈。以下是试用建议 API 的步骤:

  • 您必须使用内测版 (Insiders),因为建议 API 经常更改。
  • 您的扩展的 package.json 文件中必须包含以下行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到您项目的源位置。

请注意,您无法发布使用建议 API 的扩展。在下一版本中可能存在破坏性更改,我们绝不希望破坏现有扩展。

自定义编辑器 API

本次迭代中,我们继续致力于自定义编辑器 API 提案。显著的变化包括:

  • 将 API 方法重命名为更短且更一致。
  • 通过引入 CustomTextEditorProvider,简化了文本文件的自定义编辑器创建。此自定义编辑器使用 VS Code 的常规 TextDocument 作为其数据模型,这样您就不必自己实现 savebackup 和其他操作。这还使得在资源的自定义编辑器和同一资源的文本编辑器之间进行实时同步变得容易。
  • 引入 CustomDocument 以存储二进制 CustomEditor 使用的模型。每个资源有一个 CustomDocument,但用户可以在该资源上打开多个自定义编辑器。

请继续测试并就我们的自定义编辑器 API 提案分享反馈。尽管 API 的具体细节可能仍会更改,但我们相信当前的提案反映了我们希望尽快最终确定的内容。

CodeActionProviderMetadata.documentation

我们修改了之前关于扩展如何贡献代码操作文档的标准化提案。根据更新后的提案,文档现在通过 CodeActionProviderMetadata 类型上的 documentation 属性提供。

例如,以下是我们的内置 JavaScript 和 TypeScript 扩展贡献文档的方式:

class TypeScriptRefactorProvider implements vscode.CodeActionProvider {

  public static readonly metadata: vscode.CodeActionProviderMetadata = {
    providedCodeActionKinds: [ vscode.CodeActionKind.Refactor ],
    documentation: [
      {
        kind: vscode.CodeActionKind.Refactor,

        // This command opens a webpage when executed
        command: {
          command: LearnMoreAboutRefactoringsCommand.id,
          title: localize('refactor.documentation.title', "Learn more about JS/TS refactorings")
        }
      }
    ]
  };
  ...
}

每当用户请求重构时,文档将在主代码操作列表之后渲染。

The JS/TS Code Action documentation entry

问题 #86788 跟踪该提案的状态。

欢迎视图内容 API

某些视图现在支持来自扩展的欢迎内容。有关更多信息,请参阅原始问题

已采用此 API 的视图包括:

  • explorer - 文件资源管理器
  • scm - 源代码管理
  • debug - 运行/调试

例如,以下是 Git 扩展在 explorer 欢迎视图中贡献的用于克隆存储库的欢迎视图内容:

Explorer Welcome view

主题:GitHub Sharp

OpenDialogOptions 和 SaveDialogOptions 标题

OpenDialogOptionsSaveDialogOptions 都具有一个建议的 title 属性。title 是否显示取决于平台,但如果平台确实显示 title,它将显示在“保存”或“打开”对话框上方。例如,内置命令工作区:将工作区另存为... (Workspaces: Save Workspace As...) 将标题设置为保存工作区 (Save Workspace)

工程

Electron 7.0 更新

在此里程碑中,我们完成了将 Electron 7 捆绑到 VS Code 中的探索。这是一个重要的 Electron 版本,包含 Chromium 78.0.3904.130 和 Node.js 12.8.1。

对于 HDR 显示器

我们正在跟踪问题 #88491Windows 用户使用高动态范围 (HDR) 显示器时 VS Code 看起来暗淡且无法使用的问题。这是所有基于 Chromium 78.0.3904.130 的应用程序都存在的问题,该问题已在 Chromium 81 的较新版本中修复。一旦我们升级到 Electron 9,VS Code 就会获得此修复,并且存在无法将修复回溯到 Chromium 78 的技术原因。

同时,我们为此问题提供了一个临时解决方案:

  • 打开命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P))。
  • 运行首选项:配置运行时参数 (Preferences: Configure Runtime Arguments) 命令。
  • 此命令将打开一个 argv.json 文件来配置运行时参数。其中可能已经有一些默认参数。
  • "disable-color-correct-rendering": true 编辑为 "disable-color-correct-rendering": false
  • 重启 VS Code。

注意:除非您遇到问题,否则请勿编辑此设置!

我们添加了此默认运行时参数,以便我们可以覆盖 Chromium 的默认颜色校正到 sRGB,并改用 macOS 上的显示色彩空间。这样做可以避免问题 #84154 等问题,但对于 HDR 显示器无效。

"strict": true

当我们首次发布 VS Code 时,TypeScript 仍然是一种新兴且快速发展的语言,缺少一些您今天可能认为理所当然的有用类型安全检查,例如严格的空值检查。在过去几年中,TypeScript 团队引入了许多选项,使 TypeScript 编译器更加“严格”。这些严格选项可以捕获许多常见的编程错误,并消除整个类别的错误。严格模式的好处已得到充分记录,我们一直希望为 VS Code 代码库启用严格模式。然而,考虑到它需要修复构成核心 VS Code 代码库的大约五十万行源代码中的数千个错误,这样做似乎是一项几乎不可能完成的任务。

尽管如此,严格模式的价值足够大,我们认为值得为之努力,即使这会花费我们一些时间。因此,在过去的两年里,我们一直在逐步更新我们的代码库,使其符合严格模式。我们逐步地直接在开发分支中完成了所有这些工作,以便每个与严格模式相关的修复都能让我们的代码库对每个人来说都更安全一些。启用严格的空值检查可能是整个过程中最复杂的部分,我们在一篇博客文章中记录了我们如何实现这一点。

本次迭代中,我们终于完成了最后一个严格模式选项:strictFunctionTypes 的启用。至此,一个略显平淡的提交为我们的整个代码库启用了严格模式!

启用严格模式是一段漫长的旅程,核心 VS Code 团队的每个人以及许多社区成员都为此做出了贡献。然而,通过逐步完成这项工作,我们从第一天起就能够受益于所有这些努力。展望未来,严格模式应该鼓励最佳编码实践,使重构更安全,并最终让我们更快地发布且减少错误!

改进了 CI 构建性能

VS Code 使用 Azure Pipelines 进行持续集成构建,我们最近显著提升了构建性能。您可以在缩短 CI 构建时间博客文章中了解更多信息。

在浏览器中运行测试

在此里程碑中,我们通过利用 Playwright 库,使所有测试(单元、集成、冒烟)都可以在浏览器中运行,从而增加了对 Chrome、Firefox 和 Safari 等浏览器的覆盖范围。您可以参阅我们的 VS Code 测试 README,了解如何运行这些测试。

显著修复

  • 61491: SCM:视图应改进“无存储库”消息提示
  • 74782: 调查:macOS 公证
  • 82828: autoReveal 在不总是将文件名移动到资源管理器中间的情况下高亮显示其所在位置
  • 8641: macOS:允许鼠标按钮 4 和 5 导航历史记录
  • 87767: VSCode 重启调试不再工作
  • 88038: 不用自动执行的调试器命令污染 shell 历史记录
  • 89230: 编辑器获得焦点时读取“Group”
  • 89699: 后退/前进:保留选择
  • 89989: Web:允许在新窗口中打开文件
  • 90075: 资源管理器:支持悬挂符号链接
  • 90240: 禅模式关闭后行号不可见
  • 90876: 列表项应具有 'listitem' 角色
  • 91166: 问题面板打开时警报过于冗长。
  • 91238: 组合键在集成终端中不起作用

鸣谢

最后但同样重要的是,衷心感谢以下帮助改进 VS Code 的各位!

对我们问题跟踪的贡献

vscode 的贡献

vscode-eslint 的贡献

language-server-protocol 的贡献

vscode-js-debug 的贡献

vscode-languageserver-node 的贡献

vscode-css-languageservice 的贡献

vscode-vsce 的贡献

localization 的贡献

有超过 800 名 云 + AI 本地化 社区成员正在使用 Microsoft 本地化社区平台 (MLCP),其中有大约 170 名活跃的 Visual Studio Code 贡献者。我们感谢您的贡献,无论是提供新翻译、对翻译进行投票还是提出流程改进建议。

以下是贡献者的快照。有关项目(包括贡献者姓名列表)的详细信息,请访问项目网站:https://aka.ms/vscodeloc

  • 中文(简体,中国) Yizhi Gu, Tingting Yi, Charles Dong, Justin Liu, 斌 项, ick, paul cheung, CHEN Shihuan, 普鲁文, 张锐, Zhiqiang Li, Joel Yang.
  • 中文(繁体,台湾) Yi-Jyun Pan, 高民 林.
  • 丹麦语(丹麦) Lasse Stilvang.
  • 荷兰语(荷兰) Koen Williame.
  • 英语(英国) Martin Littlecott, Henry Dearn, carlos baltazar.
  • 芬兰语(芬兰) Feetu Nyrhinen.
  • 法语(法国) Thierry DEMAN-BARCELÒ, Antoine Griffard, Rodolphe NOEL, Younes ZOBAIRI.
  • 德语(德国) Philip Kneifeld, Raphael Höser, nick rauch.
  • 印地语(印度) KRISHNA TANDON, Alish Vagadiya.
  • 匈牙利语(匈牙利) Levente Borbély.
  • 印尼语(印度尼西亚) Eriawan Kusumawardhono, Riwut Libinuko.
  • 意大利语(意大利) Luigi Bruno.
  • 日语(日本) TENMYO Masakazu, Koichi Makino.
  • 韩语(韩国) 강 성원, Hongju, 관우 정.
  • 拉脱维亚语(拉脱维亚) Andris Vilde, Atis Straujums.
  • 波兰语(波兰) Makabeus Orban, Mariusz Wachowski.
  • 葡萄牙语(巴西) Marcondes Alexandre, Arthur Lima, Marcelo Fernandes, Roberto Fonseca, Yuri Dantas, Luiz Gustavo Nunes, Thiago Takehana.
  • 葡萄牙语(葡萄牙) Diogo Barros.
  • 罗马尼亚语(罗马尼亚) LaServici.
  • 俄语(俄罗斯) Andrey Veselov, Vadim Svitkin, Дмитрий Кирьянов.
  • 西班牙语(西班牙,国际排序) Ricardo Estrada Rdez, Alvaro Enrique Ruano.
  • 泰米尔语(印度) Vijay Rajasekar, Selvakumarasamy G, Pandidurai R.
  • 土耳其语(土耳其) Mehmet Yönügül.
  • 越南语(越南) Hiếu Nguyễn, Van-Tien Hoang, Vương.