现已推出!阅读 10 月的新功能和修复。

2020 年 6 月(版本 1.47)

更新 1.47.1:此更新解决了这个安全问题

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

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

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


欢迎使用 Visual Studio Code 2020 年 6 月版本。此版本包含许多我们希望您喜欢的更新,一些关键亮点包括

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

加入我们直播,在 VS Code 团队的直播 上,太平洋时间 7 月 13 日星期一上午 9 点(伦敦时间下午 5 点),观看此版本新功能的演示并现场向我们提问。

内部人员:想要尽快尝试新功能?您可以下载夜间 内部人员 构建版本,并在新功能推出后立即尝试最新更新。有关最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code

辅助功能

在本里程碑中,我们再次收到了来自社区的宝贵反馈,帮助我们识别和解决许多辅助功能问题。亮点

  • 文件资源管理器中的紧凑文件夹现在会正确地朗读展开/折叠状态和 ARIA 级别。
  • 屏幕阅读器现在可以更新编辑器中的光标偏移量。因此,屏幕阅读器的“全部朗读”命令在停止和恢复时应该可以更好地工作。
  • 相同的 ARIA 实时消息现在将被屏幕阅读器正确地重新朗读。

工作台

从设置编辑器中编辑对象设置

之前,设置编辑器只能用于编辑基本类型设置,例如字符串和布尔值,而您需要直接编辑 settings.json 文件来编辑更复杂的设置类型。现在,您可以从设置编辑器中编辑非嵌套对象设置。扩展作者可以使用此功能来提高这些类型设置的可见性。

之前

在设置编辑器中

Object setting in the old Settings editor

以及在 settings.json 文件中

Object setting in the JSON editor

之后

在设置编辑器中

Object setting in the new Settings editor

在列表视图中选择并保持焦点

有一个新的命令 list.selectAndPreserveFocus,它允许您从列表中选择一个项目,同时保持该列表的焦点。如果您想从列表(例如文件资源管理器)中选择多个文件,而不会将焦点转移到文件编辑器,这将非常有用。

此命令默认情况下没有绑定到任何键盘快捷键,但您可以添加您自己的键绑定

{
  "key": "ctrl+o",
  "command": "list.selectAndPreserveFocus"
}

稳定的 Windows ARM 构建版本

适用于 Windows on ARM 的 VS Code 现在可用,用于稳定版发布!🎉

通过拖放安装 VSIX

VS Code 现在支持通过将扩展 VSIX 文件拖放到扩展视图上来安装扩展。

新的搜索编辑器命令参数

搜索编辑器命令(search.action.openNewEditorsearch.action.openNewEditorToSide)中添加了两个新的参数,允许键绑定配置新的搜索编辑器应该如何运行。

  • triggerSearch - 打开搜索编辑器时是否应自动运行搜索。默认值为 true。
  • focusResults - 将焦点放在搜索结果还是查询输入中。默认值为 true。

例如,以下键绑定在打开搜索编辑器时运行搜索,但将焦点保留在搜索查询控件中。

{
  "key": "ctrl+o",
  "command": "search.action.openNewEditor",
  "args": { "query": "VS Code", "triggerSearch": true, "focusResults": false }
}

新的搜索编辑器上下文默认值

search.searchEditor.defaultNumberOfContextLines 设置已更新,默认值为 1 而不是 0,这意味着在搜索编辑器中每个结果行之前和之后将显示一行上下文。要恢复旧的行为,请将该值设置回 0。

列表/树:动态水平滚动

以前存在的 workbench.list.horizontalScrolling 设置现在可以在运行时切换,而无需强制您重新加载工作台。

编辑器

正则表达式替换中的大小写转换

VS Code 现在支持在编辑器中进行查找/替换时,更改正则表达式匹配组的大小写。这使用修饰符 \u\U\l\L 完成,其中 \u\l 将使单个字符大写/小写,\U\L 将使匹配组的其余部分大写/小写。

示例

Changing case while doing find and replace

这些修饰符也可以堆叠使用 - 例如,\u\u\u$1 将使组的前三个字符大写,\l\U$1 将使第一个字符小写,其余字符大写。

目前,这些只支持编辑器的查找控件,不支持全局 **在文件中查找**。

调试

新的 JavaScript 调试器

我们的新的 JavaScript 调试器,在成为上个月内部人员版本中的默认调试器后,现在是 VS Code 中 JavaScript(Node.js 和 Chrome)的默认调试器。如果您跳过了过去几个 VS Code 变更日志的“预览功能”部分,则可以查看调试器自述文件的新增功能部分

您不需要更改任何设置或启动配置即可使用新的调试器。如果您遇到任何问题,请打开一个问题

单个文件调试

到今天为止,VS Code 调试器还没有标准方法来显示编辑器中的文件可以仅通过单击按钮轻松调试。一些调试扩展允许您这样做,通常使用一个调试配置,提示您“在编辑器中调试文件”。但是,用户仍然需要在调试配置下拉菜单中选择正确的配置,然后才能使用 **F5**。其他调试扩展为 **F5** 实现了一个回退策略:如果不存在 launch.json,**F5** 将尝试调试当前在活动编辑器中打开的文件。

由于这两种方法都不容易发现,一些调试扩展(例如 Python)已开始在编辑器标题区域添加 **运行** 按钮。

由于我们没有找到更好的方法,并且此方法可以在无需任何新 API 的情况下实现,因此我们编写了一些关于如何在标准方式下实现它的指南。扩展作者可以在下面的“扩展编写”部分中找到这些指南。

用户只需要记住这些图标

Run and debug action in editor title

如果其中一个或两个图标显示在编辑器标题区域的左侧,则运行或调试编辑器中的文件只需单击一次。

更简洁的 CALL STACK 视图

我们开始为常见情况使 CALL STACK 视图更简洁:CALL STACK 视图现在支持隐藏出于技术原因而存在的调试会话节点,但这些节点对用户没有太大价值。

第一个选择使用此功能的调试扩展是新的 JavaScript 调试器,它可以在只有一个子会话的情况下消除父调试会话。

Screenshot of two "Call Stack" views. Without compaction, there is an extra child session between the parent session and each attached worker processes.

我们希望其他调试扩展能够效仿。请查看下面提出的新 API。

新的命令别名 **设置下一条语句** 用于 **跳转到光标**

为了使 **跳转到光标** 命令对来自 Visual Studio 的用户更容易发现,我们添加了命令别名 **设置下一条语句**。

如果您不知道 **跳转到光标** 的作用:它允许您将程序执行移动到新位置,而不会执行中间的任何源代码。

悬停时显示断点路径

当您将鼠标悬停在 BREAKPOINTS 视图中的源断点上时,VS Code 现在会显示断点的绝对路径。

任务

pnpm 包管理器支持

pnpm 现在是 npm.packageManager 设置的有效选择,与 npmyarn 一样,用于运行您的脚本。

源代码管理

单一视图

源代码管理视图已合并为单一视图

Source Control with a single view

所有存储库都渲染在一个视图中,因此您可以更好地概述整个工作区状态。此外,源代码管理视图现在可以移动到面板,其他视图可以移动到源代码管理视图容器。

查看和排序

我们添加了对在源代码管理视图中按名称、路径(默认)和状态对更改进行排序的支持,方法是在使用列表视图选项时使用。我们将视图选项(列表与树)和排序选项合并到上下文菜单中的一个新的**查看和排序**菜单项中。

View & Sort in Source Control

Git:恢复压缩消息

与通常的git merge命令类似,如果用户处于git merge --squash命令的中间,则 SCM 视图现在将使用默认消息恢复 SCM 输入。

语言

TypeScript 3.9.6

VS Code 现在捆绑了 TypeScript 3.9.6。此次小更新修复了一些错误,包括一个可能会导致 TypeScript 服务器在某些源代码模式下崩溃的错误。

浏览器支持

大文件上传支持

您现在可以将大文件和文件夹上传到 VS Code 的 Web 版本,并且进度将准确地报告,以便您可以跟踪已上传的字节数以及上传速度。

Web upload indicator in bottom Status bar

走向文本文件编码支持

在此里程碑中,我们投入大量精力来完全支持浏览器中用于读取和写入文件的文本编码。我们依赖两个库,这些库现在通过利用 webpack 在浏览器中得到支持

这项工作将在 7 月继续进行,并很快就会普遍可用。

预览功能

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

设置同步

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

您现在可以使用**关闭偏好设置同步**上下文菜单操作在**同步机器**视图中关闭其他机器上的同步。

Turn off preferences sync for a machine

我们还改进了打开同步时的进度信息。

TypeScript 4.0 支持

在此迭代中,我们继续改进对 TypeScript 4.0 的支持。一些亮点包括

  • 在编辑器中使用删除线突出显示对已弃用符号的调用

    Call to a deprecated function rendered in the editor

  • 解释为什么无法应用给定的重构

    Displaying the reason a refactoring cannot be applied

  • **改进的自动导入** - 在 TypeScript 4.0 博客文章 中了解更多信息。

您可以通过安装 TypeScript nightly 扩展 来试用这些功能。

大型 JavaScript 或 TypeScript 项目加载时的部分 IntelliSense 支持

TypeScript 4.0 beta 还带来了一个新功能,可以帮助减少您在加载大型 JavaScript 或 TypeScript 项目时等待的时间。为了解释它是如何工作的,我们首先需要了解当前版本的 TypeScript 是如何工作的。

当您在 VS Code 中打开 JavaScript 或 TypeScript 文件时,TypeScript 语言服务会确定该文件所属的项目,然后加载与其关联的项目。有时这个项目可能相当大,例如,VS Code 核心代码库包含数千个 TypeScript 文件。在加载项目时,VS Code 可以处理基本的语法操作,例如获取文档大纲和启用代码折叠,但它目前无法提供 IntelliSense 或其他更高级的语言功能,因为它们依赖于理解整个项目。例如,为了提供自动导入,TypeScript 语言服务需要知道项目中的所有导出符号。

TypeScript 4.0 中的更改使 VS Code 能够在加载大型项目时提供 IntelliSense 和其他更高级的语言功能。需要注意的是,我们能够提供的 IntelliSense 限于咨询当前文件而不是整个项目。这意味着诸如建议和**转到定义**之类的功能将起作用,但我们只会显示来自当前文件的建议,并且您只能运行**转到定义**来跳转到当前文件中的另一个符号。

如果您使用大型 JavaScript 和 TypeScript 项目,我们很乐意听到您对此新功能的反馈。您可以使用 TypeScript nightly 扩展 立即试用它。我们希望它能让您几乎立即开始使用您的代码,直到更完整的、项目范围的 IntelliSense 可用。

代码操作的撤销/重做

我们正在努力能够撤销和重做代码操作和重构。一个突出的例子是 Java 类重命名重构,它会进行文本更改以及重命名磁盘上的文件。这现在可以撤销,但仍然需要触发两次撤销。请继续关注,我们将进一步改进这一点,并请提供早期反馈。

对扩展的贡献

笔记本

VS Code 团队正在继续对笔记本进行原生支持。为了帮助开发,我们创建了 GitHub 问题笔记本 扩展,它允许您搜索 GitHub 问题和拉取请求。此扩展仍处于预览阶段,需要使用 VS Code Insiders,但它可以让您亲身体验笔记本,我们欢迎您的反馈。

更新的 UX

我们更新了笔记本单元格的视觉外观,使其设计更加紧凑。我们还在选定单元格中添加了阴影轮廓,使选择状态更加明显。

Updated Notebook UX

笔记本热退出支持

我们在笔记本中添加了热退出支持,以允许扩展处理备份和恢复。您的未保存的本地更改现在可以由扩展进行序列化,并在重新打开工作区时恢复。

撤销/重做增强

我们添加了对扩展贡献到撤销/重做堆栈的支持。扩展现在可以控制哪些操作可撤销。例如,在 GitHub 问题笔记本中,您可以选择**锁定**按钮使单元格内容只读,也可以通过正常的撤销/重做命令撤销/重做此操作。

Undo/Redo in GitHub Issue Notebook

主题:GitHub 主题

创建无标题笔记本

我们扩展了**新建文件**命令(⌘N(Windows、Linux Ctrl+N)以支持创建新的无标题笔记本文件。例如,您可以使用下面的键绑定快速创建一个 GitHub 问题笔记本并运行查询。

{
  "key": "cmd+i",
  "command": "workbench.action.files.newUntitledFile",
  "args": { "viewType": "github-issues" }
}

Create Untitled GitHub Issue Notebook

主题:GitHub 主题

笔记本颜色标记

我们还为笔记本添加了以下颜色标记

  • notebook.cellBorderColor:笔记本单元格的边框颜色
  • notebook.cellHoverBackground:将鼠标悬停在单元格上时的背景颜色
  • notebook.cellInsertionIndicator:笔记本单元格插入指示器的颜色
  • notebook.focusedCellBackground:单元格获得焦点时的背景颜色
  • notebook.focusedCellBorder:单元格获得焦点时单元格顶部和底部的边框颜色
  • notebook.focusedCellShadow:单元格获得焦点时的单元格阴影颜色
  • notebook.focusedEditorBorder:笔记本单元格编辑器边框的颜色

两个新的示例展示了如何在笔记本中支持调试

笔记本扩展指南

如果您有兴趣为 VS Code 创建笔记本扩展,则有一个新的指南详细介绍了 笔记本 API。您将了解 API 以及 VS Code 笔记本基础设施和笔记本扩展开发最佳实践的详细信息。

远程开发

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

1.47 中的突出功能包括

  • 远程 - SSH:远程服务器可以监听套接字而不是端口。
  • Dev Containers:提示在卷中打开存储库。
  • Dev Containers 和 WSL:查看最近的 在 WSL 2 中使用 Dev Containers 博客文章。

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

如果您是 VS Code 远程开发的新手,您可以从以下入门教程开始

Azure 帐户

Azure 帐户扩展的最新版本现在公开了凭据对象,该对象可与最新的 Azure SDK 一起使用。

GitHub 拉取请求和问题

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

  • 问题视图中的 Markdown 悬停。
  • 新问题编辑器中的标签建议。
  • 对格式化为 GH-123 的问题的悬停支持。

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

十六进制编辑器

HexEditor 扩展正在不断改进,以便在 VS Code 内提供本机十六进制编辑体验。此版本对扩展的主要更新包括简单的编辑支持(允许用户撤销、重做、编辑现有的十六进制单元格以及在文档末尾添加新单元格)以及大文件优化,允许用户打开超过 18 兆字节的文件,而以前这是不可能的。

Editing in the HexEditor extension

可以在 CHANGELOG 中找到所有值得注意的更改的完整列表。任何反馈或遇到的问题都可以针对 vscode-hexeditor 存储库 进行提交。

扩展编写

AccessibilityInformation

我们已经将 TreeItemStatusBarItemTimelineItem 元素中的 AccessibilityInformation 进行了最终确定,以支持屏幕阅读器。AccessibilityInformation 包含一个 label 和一个 role。当项目获得焦点时,label 会由屏幕阅读器读出。项目的 role 定义了屏幕阅读器如何与之交互。在特殊情况下应设置 role,例如,当树状元素的行为类似于复选框时。如果未指定 role,VS Code 将自动选择适当的 role

“转到位置”的回退消息

现在,editor.action.goToLocations 命令可以在找不到位置时显示一条回退消息。这使扩展程序能够实现诸如 **转到超类型** 之类的功能,其行为与内置功能(例如 **转到定义**)相同。以下代码段是扩展程序调用此命令的完整示例

vscode.commands.executeCommand(
  'editor.action.goToLocations',
  vscode.window.activeTextEditor.document.uri, //anchor uri and position
  vscode.window.activeTextEditor.selection.start,
  [], // results (vscode.Location[])
  'goto', // mode
  'No Super Types Found' // <- message
);

改进单文件调试体验的指南

对于想要通过在编辑器中添加“运行”和/或“调试”按钮来改善单文件调试体验的调试扩展程序,我们建议遵循以下指南以保持一致的外观

  • 在 package.json 中贡献运行和/或调试命令(参见 Mock Debug
    • 使用命令标题“运行文件”/“调试文件”或“运行 Python 文件”/“调试 Python 文件”。
    • 使用 $(play) 图标表示运行,使用 $(debug-alt-small) 图标表示调试。
  • 将命令添加到编辑器标题区域(参见 Mock Debug
    • 若要使命令仅对特定语言可见,请使用“when”子句,例如 "resourceLangId == python"
    • 将运行命令放在 1_run@10 组中,将调试命令放在 1_run@20 组中。

CodeActionProviderMetadata.documentation

CodeActionProviderMetadata 上的新 documentation 属性使扩展程序可以为其返回的代码操作提供静态文档。当 provide 返回代码操作时,此文档将在代码操作列表底部显示。

A documentation entry in the Code Actions menu

当用户选择文档条目时,将执行命令。此命令可以在编辑器中显示文档或在浏览器中打开它。

打开和保存对话框标题

通过 OpenDialogOptionsSaveDialogOptions 为打开和保存文件对话框提供 title 的 API 已经完成。请注意,并非所有操作系统都允许设置此标题,因此行为可能会因扩展程序运行的位置而异。

新扩展类别

您现在可以使用以下新增类别对您的扩展程序进行分类。

  • 数据科学
  • 机器学习
  • 可视化
  • 测试
  • 笔记本

辅助按钮样式

我们引入了一种辅助按钮样式,用于在需要使按钮不那么突出时使用。

  • button.secondaryForeground
  • button.secondaryBackground
  • button.secondaryHoverBackground

GitHub 工作流徽章

您现在可以在已发布扩展程序的徽章列表中添加 GitHub 工作流徽章,因为 github.com 已添加到 批准的徽章源列表 中。

GitHub Workflow badge

通过 argv.json 启用建议的 API

argv.json 中现在支持 enable-proposed-api 字段。这使扩展程序作者能够在发布版本中运行其建议的 API 扩展程序以进行长期内部测试,而无需通过命令行打开 VS Code 并传递 --enable-proposed-api CLI 标志。

新的 codicon 图标

我们已将以下新图标添加到 codicon 库中

  • debug-alt-small
  • vm-connect

Codicons icons

语言服务器协议

即将发布的 3.16 规范中添加了对 语义标记 和在 完成项 中延迟解析附加文本编辑的支持。

建议的扩展 API

每个里程碑都会带来新的建议 API,扩展程序作者可以尝试使用它们。与往常一样,我们希望收到您的反馈。这是您尝试使用建议 API 的步骤

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

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

在此基础上 在之前版本中添加的终端新链接系统,此新提案 window.registerLinkProvider 允许扩展程序将链接附加到终端,包括鼠标悬停时显示的工具提示标签。

Terminal Link Provider

这与之前提议的(现在已弃用)"链接处理程序" API 相比,该 API 允许您的扩展程序可能处理相关的链接,如果它没有处理,则会有一条回退链。这种新模型,其中链接将被确定处理,更符合我们的愿景,即链接可以有一系列可能的动作。

用于运行而不调试的新 API

VS Code 的“运行而不调试”功能是调试的一种变体,其中将重用现有的调试配置来运行程序而不是调试它。这种运行模式的结果是程序不会进入调试器,无论是为了命中断点还是其他任何原因。

在本里程碑中,我们为“运行而不调试”提供了官方扩展程序 API:一个名为 noDebug 的新属性已添加到 debug.startDebugging 函数的 DebugSessionOptions 中。noDebug 控制即将启动的会话是否应进行调试或不进行调试。当 noDebug 属性不存在时,将使用父会话的值(如果存在)。如果不存在父会话,则对于不存在的 noDebug 属性,将假定值为 'false'。

请注意:以前可以通过向启动配置添加 noDebug 标志来实现相同的效果。此非官方 API 现已弃用(但仍受支持),我们建议扩展程序过渡到新的 API。

用于减少 CALLSTACK 视图中杂乱的新 API

随着复杂的调试扩展程序和调试设置的出现,更多调试会话出现在 CALL STACK 树视图中,使其看起来很拥挤。在大多数情况下,调试会话对用户很有用,他们需要完全控制这些会话。在其他情况下,一些调试会话只是实现工件或一组子会话的组合机制。

为了在常见情况下使 CALL STACK 视图不那么拥挤,我们引入了一项功能,如果父调试会话节点只有一个子会话,则隐藏该节点。此功能称为“紧凑模式”,可以通过 debug.startDebugging 函数的 DebugSessionOptions 上一个新的可选 compact 属性使用。

如果 compact 为 true,则新创建的调试会话的父节点将隐藏在 CALL STACK 视图中,只要它只有一个子节点。如果 compact 为 false 或不存在,则父节点将保持可见(这是当前行为)。

树中的 Markdown 悬停

有一个新的建议 API,允许 TreeItemtooltipMarkdownString。除了允许 Markdown 用于工具提示之外,TreeDataProvider 上还有一个新的 resolveTreeItemresolveTreeItem 背后的理念是,可能需要更长时间才能计算的属性(目前只有 tooltip)可以稍后解析,而不是为每个树项预先计算。您可以在 GitHub 拉取请求和问题扩展程序 中看到 resolveTreeItem 和 Markdown tooltip 的使用。

工程

使用 TypeScript 4.0 构建 VS Code

VS Code 现在使用 TypeScript 4.0 的夜间构建 进行构建。

这个新的 TypeScript 版本帮助我们捕获了一些 有关访问器方面的潜在错误,并且还有助于我们测试即将发布的 TypeScript 版本。

文档和扩展

用于 C++ 的 CMake 工具

使用 CMake 开发 C++ 应用程序CMake Tools 扩展程序的新教程。

CMake Tools extension

用于 macOS 的 Java 包安装程序

Visual Studio Code for Java Pack Installer 会下载在 macOS 上的 Visual Studio Code 中进行 Java 开发所需的依赖项和扩展程序。

Java Pack installer for macOS

显著修复

  • 71291:水平滚动破坏树的渲染
  • 93230:局部变量以令人讨厌的方式折叠
  • 98309:支持工作副本文件服务中的多个文件
  • 99061:允许重新打开已关闭的差异编辑器
  • 99290:Git:在重新加载时恢复差异编辑器
  • 99704:顶部调试会话行显示“已暂停”,但实际上未暂停
  • 99786:当调试工具栏位置停靠时,无法启动其他会话
  • 100524:SCM 装饰丢失
  • 101132:脱机后,发布说明永远无法打开

感谢

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

对我们的问题跟踪的贡献

vscode 的贡献

vscode-extension-samples的贡献

vscode-eslint的贡献

debug-adapter-protocol的贡献

language-server-protocol的贡献

vscode-languageserver-node的贡献

vscode-css-languageservice的贡献

node-jsonc-parser的贡献

vscode-generator-code的贡献

vscode-vsce的贡献