2020年6月(版本1.47)

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

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

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

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


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

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

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

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。要获取最新的Visual Studio Code新闻、更新和内容,请在Twitter上关注我们@code

可访问性

在这个里程碑中,我们再次收到了来自社区的宝贵反馈,这些反馈帮助我们识别并解决了许多无障碍问题。亮点包括:

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

工作台

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

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

之前

在设置编辑器中:

旧设置编辑器中的对象设置

并且在 settings.json 中:

JSON编辑器中的对象设置

之后

在设置编辑器中:

新设置编辑器中的对象设置

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

有一个新的命令,list.selectAndPreserveFocus,它允许你从列表中选择一个项目,同时保持焦点在该列表中。如果你想从列表中选择多个文件,例如文件资源管理器,而不希望焦点转移到文件编辑器,这可能会很有帮助。

该命令默认未绑定任何键盘快捷键,但您可以添加自己的键绑定:

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

稳定的Windows ARM版本

适用于ARM架构Windows的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 设置已更新,默认值从 0 更改为 1,这意味着在搜索编辑器中,每个结果行的前后将显示一行上下文。要恢复旧的行为,请将该值设置回 0。

列表/树:动态水平滚动

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

编辑器

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

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

示例:

在进行查找和替换时更改大小写

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

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

调试

新的 JavaScript 调试器

我们的新JavaScript调试器,在上个月成为Insiders的默认调试器后,现在已成为VS Code中JavaScript(Node.js和Chrome)的默认调试器。如果您跳过了最近几次VS Code更新日志中的“预览功能”部分,您可以在调试器README的新功能部分了解最新动态。

您不需要更改任何设置或启动配置即可利用新的调试器。如果您遇到任何问题,请提交问题

单文件调试

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

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

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

用户只需记住这些图标:

编辑器标题中的运行和调试操作

如果一个或两个显示在编辑器标题区域的左侧,那么在编辑器中运行或调试文件只需点击一下即可。

更简洁的调用堆栈视图

我们已经开始为常见情况减少调用栈的拥挤:调用栈视图现在支持隐藏那些因技术原因存在但对用户价值不大的调试会话节点。

第一个选择加入此功能的调试扩展是新的JavaScript调试器,它可以在只有一个子会话时消除父调试会话。

两个“调用堆栈”视图的截图。在没有压缩的情况下,父会话和每个附加的工作进程之间有一个额外的子会话。

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

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

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

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

悬停时的断点路径

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

任务

pnpm 包管理器支持

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

源代码控制

单一视图

源代码管理视图已整合为一个单一视图:

单一视图的源代码控制

所有仓库都在单一视图中呈现,因此您可以更好地概览整个工作区的状态。此外,源代码管理视图现在可以移动到面板中,其他视图也可以移动到源代码管理视图容器中。

查看和排序

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

查看和排序在源代码控制中

Git: 恢复压缩提交信息

类似于通常的git merge命令,如果用户正在执行git merge --squash命令,SCM视图现在将恢复SCM输入并显示默认消息。

语言

TypeScript 3.9.6

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

浏览器支持

大文件上传支持

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

底部状态栏中的网页上传指示器

迈向文本文件编码支持

在这个里程碑期间,我们投入了大量工作来实现浏览器中对文本编码的全面支持,以便读取和写入文件。我们依赖两个库,这些库现在通过利用webpack在浏览器中得到支持:

这项工作将在七月继续,并应很快普遍可用。

预览功能

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

设置同步

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

您现在可以使用同步机器视图中机器条目上的关闭首选项同步上下文菜单操作来禁用其他机器上的同步。

关闭设备的偏好设置同步

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

TypeScript 4.0 支持

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

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

    在编辑器中渲染的已弃用函数调用

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

    显示无法应用重构的原因

  • 改进的自动导入 - 在TypeScript 4.0 博客文章中阅读更多内容。

您可以通过安装TypeScript nightly extension来尝试这些功能。

在大型 JavaScript 或 TypeScript 项目加载时提供部分 IntelliSense 支持

TypeScript 4.0 测试版还引入了一项新功能,旨在帮助减少在加载大型 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 extension来尝试它。我们希望它能让您几乎立即开始处理代码,直到更完整的、项目范围的IntelliSense可用。

代码操作的撤销/重做

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

对扩展的贡献

笔记本

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

更新的用户体验

我们已经更新了Notebook单元格的视觉外观,以实现更紧凑的设计。我们还为选中的单元格添加了阴影轮廓,以使选择状态更加明显。

更新后的笔记本用户界面

Notebook 热退出支持

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

撤销/重做增强

我们增加了对扩展支持以贡献到撤销/重做堆栈中。扩展现在可以控制哪些操作是可撤销的。例如,在GitHub Issue Notebook中,你可以选择锁定按钮使单元格内容变为只读,并且也可以通过常规的撤销/重做命令来撤销/重做此操作。

GitHub Issue Notebook中的撤销/重做

主题: GitHub Theme

创建无标题笔记本

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

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

创建无标题的GitHub问题笔记本

主题: GitHub Theme

笔记本颜色标记

我们还为Notebooks添加了以下颜色标记:

  • notebook.cellBorderColor: Notebook 单元格的边框颜色
  • notebook.cellHoverBackground: 当单元格悬停时,单元格的背景颜色
  • notebook.cellInsertionIndicator: Notebook单元格插入指示器的颜色
  • notebook.focusedCellBackground: 单元格聚焦时的背景颜色
  • notebook.focusedCellBorder: 当单元格被聚焦时,单元格顶部和底部边框的颜色
  • notebook.focusedCellShadow: 单元格聚焦时的阴影颜色
  • notebook.focusedEditorBorder: Notebook 单元格编辑器边框的颜色

两个新示例展示了如何在Notebooks中支持调试

Notebook 扩展指南

如果您有兴趣为VS Code创建Notebook扩展,这里有一份新指南详细介绍了Notebook API。您将了解API以及VS Code Notebook基础设施的细节和Notebook扩展开发的最佳实践。

远程开发

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

1.47版本的功能亮点包括:

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

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

如果你是VS Code远程开发的新手,你可以通过这些入门教程开始:

Azure 账户

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

GitHub 拉取请求和问题

继续在GitHub Pull Requests and Issues扩展上进行工作,该扩展允许您处理、创建和管理拉取请求和问题。此版本的一些更新包括:

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

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

十六进制编辑器

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

在HexEditor扩展中编辑

可以在CHANGELOG中找到所有显著更改的完整列表。任何反馈或遇到的问题都可以提交到vscode-hexeditor 仓库

扩展开发

可访问性信息

我们已经确定了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 属性允许扩展为其返回的代码操作提供静态文档。当提供者返回代码操作时,此文档显示在代码操作列表的底部:

代码操作菜单中的文档条目

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

打开和保存对话框标题

用于通过OpenDialogOptionsSaveDialogOptions为打开和保存文件对话框提供title的API已经最终确定。请注意,并非所有操作系统都允许设置此标题,因此行为可能会根据扩展运行的环境而有所不同。

新的扩展类别

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

  • 数据科学
  • 机器学习
  • 可视化
  • 测试
  • Notebooks

次要按钮样式

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

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

GitHub 工作流徽章

您现在可以将GitHub Workflow徽章添加到已发布扩展的徽章列表中,因为github.com已被添加到批准的徽章来源列表中。

GitHub 工作流徽章

通过argv.json启用提议的API

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

新的codicon图标

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

  • debug-alt-small
  • vm-connect

Codicons 图标

语言服务器协议

支持语义标记完成项中额外文本编辑的延迟解析已添加到即将发布的3.16规范中。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。一如既往,我们希望得到您的反馈。以下是您尝试提议API需要做的事情:

  • 你必须使用Insiders,因为提议的API经常变化。
  • 您必须在扩展的package.json文件中包含这一行:"enableProposedApi": true
  • 将最新版本的vscode.proposed.d.ts文件复制到项目的源代码位置。

请注意,您不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

基于上一个版本中添加的终端新链接系统,这个新提案window.registerLinkProvider允许扩展将链接附加到终端,包括在悬停时显示的工具提示标签。

终端链接提供者

这与之前提出的(现已弃用的)"链接处理程序" API形成对比,该API允许您的扩展程序可能处理相关链接,如果不处理,则会有一个备用链。这种新的模型,其中链接肯定会得到处理,更符合我们心中的愿景,即链接可以有一系列可能的操作。

无需调试运行的新API

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

在这个里程碑中,我们为“无调试运行”提供了官方的扩展API:在debug.startDebugging函数的DebugSessionOptions中添加了一个新属性noDebugnoDebug控制即将启动的会话是否应带调试运行。当noDebug属性缺失时,将使用父会话(如果有)的值。如果没有父会话,则假定缺失的noDebug属性值为'false'。

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

用于减少CALLSTACK视图混乱的新API

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

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

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

树中的Markdown悬停

有一个新提出的API,允许TreeItemtooltip是一个MarkdownString。除了允许Markdown用于工具提示外,TreeDataProvider上还有一个新的resolveTreeItemresolveTreeItem背后的想法是,可能需要更长时间计算的属性(目前只有tooltip)可以在以后解析,而不是为每个树项预先计算。您可以在GitHub Pull Requests and Issues extension中看到resolveTreeItem和Markdown tooltip的使用。

工程

使用 TypeScript 4.0 构建 VS Code

VS Code 现在使用 TypeScript 4.0 的 nightly build 构建。

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

文档和扩展

C++的CMake工具

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

CMake Tools 扩展

适用于 macOS 的 Java 包安装程序

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

macOS的Java包安装程序

显著的修复

  • 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 的贡献: