尝试以扩展 VS Code 中的代理模式!

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 上的更新页面。

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

Insiders:想尽快尝试新功能吗?您可以下载每晚发布的 Insiders 版本,并在新功能可用时立即尝试最新的更新。要获取最新的 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 版本

适用于 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 将使匹配组的其余部分大写/小写。

示例

Changing case while doing find and replace

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

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

调试

新的 JavaScript 调试器

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

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

单文件调试

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

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

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

用户只需记住这些图标

Run and debug action in editor title

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

更简洁的调用堆栈视图

我们已开始使 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 的用户更容易发现“跳转到光标”命令,我们添加了命令别名“设置下一条语句”。

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

悬停时显示断点路径

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

任务

支持 pnpm 包管理器

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

源代码管理

单一视图

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

Source Control with a single view

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

查看和排序

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

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 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 类重命名重构,它会进行文本更改并重命名磁盘上的文件。现在可以撤消此操作,但仍需要触发两次撤消。我们将进一步改进此功能,敬请关注并请提供早期反馈。

对扩展的贡献

Notebook

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

更新的用户体验

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

Updated Notebook UX

笔记本热退出支持

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

撤消/重做增强

我们添加了对扩展程序的撤消/重做堆栈的贡献支持。扩展程序现在可以控制哪些操作是可撤消的。例如,在 GitHub Issue Notebook 中,您可以选择“锁定”按钮使单元格内容只读,并且还可以通过常规的撤消/重做命令撤消/重做此操作。

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 笔记本基础设施的详细信息和笔记本扩展开发的最佳实践。

远程开发

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

1.47 版的亮点功能包括:

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

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

如果您是 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 存储库

扩展创作

辅助功能信息

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

CodeActionProviderMetadata.documentation

CodeActionProviderMetadata 上的新 documentation 属性允许扩展为它们返回的代码操作提供静态文档。当提供者返回代码操作时,此文档会显示在代码操作列表的底部

A documentation entry in the Code Actions menu

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

打开和保存对话框标题

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

新扩展类别

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

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

次要按钮样式

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

  • 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:在 debug.startDebugging 函数的 DebugSessionOptions 中添加了一个新属性 noDebugnoDebug 控制即将开始的会话是带调试运行还是不带调试运行。如果缺少 noDebug 属性,则使用父会话的值(如果有)。如果没有父会话,则缺少 noDebug 属性的值假定为“false”。

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

用于减少调用堆栈视图混乱的新 API

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

为了减少常见情况下调用堆栈视图的混乱,我们引入了一项功能,如果父调试会话节点只有一个子会话,则可以隐藏它。此功能称为“紧凑模式”,可通过 debug.startDebugging 函数的 DebugSessionOptions 上的新可选 compact 属性获得。

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

树形视图中的 Markdown 悬停

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

工程

使用 TypeScript 4.0 构建 VS Code

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

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

文档和扩展

适用于 C++ 的 CMake 工具

关于使用 CMake 和 CMake 工具 扩展开发 C++ 应用程序的新教程:开发 C++ 应用程序与 CMake

CMake Tools extension

macOS 版 Java Pack 安装程序

Visual Studio Code for Java Pack 安装程序下载在 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 的贡献