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

2021 年 7 月(版本 1.59)

更新 1.59.1:此更新解决了以下问题

此版本还解决了CVE-2021-26437

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


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

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

与我们实时互动,参加VS Code 团队的直播,时间为太平洋时间 8 月 10 日星期二上午 8 点(伦敦时间下午 4 点),观看此版本新功能的演示,并向我们提出问题。

内部人员:希望尽快尝试新功能?您可以下载夜间内部人员版本,并在新功能可用后立即尝试。

工作台

扩展

改进了调整大小时的扩展视图。在以下简短视频中,具有默认宽度的扩展视图显示所有详细信息(以前不显示图标、评分和安装次数)。当视图缩小时,会显示较小的扩展图标,当宽度进一步减小时,图标和评分会隐藏。

Dynamic Extensions view

主题:GitHub 浅色主题

扩展视图现在在扩展上显示自定义悬停。此丰富的悬停包括扩展的完整描述和其他有用信息,例如扩展被禁用的原因或推荐的原因。

Custom Extension hover

主题:GitHub 浅色主题

您现在可以在扩展窗格的新运行时状态选项卡中检查扩展的运行时状态。状态信息包括其激活时间、它是否在启动时激活以及它是否有任何警告或错误。一些信息显示在扩展视图及其悬停(如上图所示)中。

Extension Runtime Status

主题:GitHub 浅色主题

扩展窗格详细信息选项卡现在显示类别、资源链接以及其他信息,例如扩展发布和更新日期。选择一个类别将在扩展视图中显示该类别中的其他扩展。

Extension Details

主题:GitHub 浅色主题

设置编辑器

设置编辑器现在支持对对象进行验证。验证检查直接编辑 JSON 文件时可能出现的类型错误。

Object setting showing validation errors

数组设置现在在非编辑模式下支持拖放。此外,具有设置为 trueuniqueItems 属性的枚举数组设置现在仅显示剩余选项,而不是下拉菜单中的所有选项。

Drag and drop for array settings

设置编辑器现在还支持多行字符串设置,其中值在多行文本区域而不是单行输入框中呈现。

An example of a multiline string setting

扩展的主题自定义语法

下面列出的颜色自定义设置允许用户自定义当前主题的颜色。

  • workbench.colorCustomizations
  • editor.tokenColorCustomizations
  • editor.semanticTokenColorCustomizations

有一种新的语法可以同时自定义多个主题。

    "workbench.colorCustomizations": {
        "[Abyss][Red]": {
            "activityBar.background": "#ff0000"
        },
        "[Monokai*]": {
            "activityBar.background": "#ff0000"
        }
    },

可以列出多个主题,也可以在名称的开头和结尾使用 * 通配符。

支持 Jupyter 笔记本

本月,我们将处理读取 *.ipynb 文件的代码从Jupyter Notebook 扩展移动到一个新的内置扩展中。这意味着您现在可以在 VS Code 的干净安装中打开 Jupyter 笔记本,而无需安装完整的 Jupyter 扩展。但是,如果您想执行使用 ipywidgets 或其他复杂渲染器类型的单元格或查看输出,则必须安装 Jupyter 扩展。

笔记本布局改进

我们在此迭代中对笔记本布局进行了一些改进。

  • 现在,当单元格折叠时,会渲染单元格输入的第一行。
  • 当窗口宽度不足以渲染所有主要操作时,笔记本编辑器工具栏上的操作将被移动到溢出菜单 (...) 中。
  • notebook.undoRedoPerCell 的默认值现在已更改为 true

notebook layout improvements

我们还更新了代码单元格的默认样式,现在显示背景颜色以帮助区分单元格。主题可以使用 notebook.cellEditorBackground 自定义此颜色。

Example of updated notebook code cells

最后,您现在可以使用设置 notebook.globalToolbarShowLabel 切换笔记本工具栏上的文本标签。

Example of notebook toolbar text

配置“复制相对路径”的路径分隔符

一个新的设置 explorer.copyRelativePathSeparator 允许您在调用复制相对路径操作时显式设置路径分隔符。

可用的分隔符选项是

  • auto(默认) - 使用特定于操作系统的路径分隔符。
  • / - 使用斜杠作为路径分隔符。
  • \\ - 使用反斜杠作为路径分隔符。

在编辑器组之间共享视图状态

添加了一个新的设置 workbench.editor.sharedViewState 来配置编辑器视图状态(例如,编辑器中的滚动位置)如何在编辑器组之间共享。

默认情况下,此设置被禁用以保留当前行为。如果您在侧面打开编辑器,并在以后关闭该编辑器组,然后再次在侧面打开编辑器,则不会恢复任何视图状态,因为您正在打开一个新的编辑器组。但是,当您启用此设置时,最近的编辑器视图状态将在所有编辑器组中保留,并将被使用,除非为编辑器组找到更具体的视图状态。

在重新打开 package.json 文件到侧面时,保留选择状态。

Shared editor group view state

编辑器

在折叠区域之间导航

有新的命令可以将光标位置设置为相应的折叠。

  • 转到下一个折叠 (editor.gotoNextFold)
  • 转到上一个折叠 (editor.gotoPreviousFold)
  • 转到父折叠 (editor.gotoParentFold)

这些命令目前没有默认的键绑定,但您可以通过首选项:打开键盘快捷键 (⌘K ⌘S(Windows、Linux Ctrl+K Ctrl+S) 添加自己的键盘快捷键。

自动折叠导入

使用设置 editor.foldingImportsByDefault 使导入语句自动折叠。折叠状态在文件打开一次后即被存储。此功能适用于 TypeScript、JavaScript、Java、C#、C++ 以及所有具有折叠范围提供程序的语言,这些语言使用 FoldingRangeKind.Imports 对导入语句进行注释。

从选择中播种搜索字符串

查找控件设置 editor.find.seedSearchStringFromSelection 已扩展为支持仅从非空选择中播种搜索字符串。默认情况下,当显示查找控件时,编辑器将使用选择或空选择周围的单词作为搜索键盘。

内联建议改进

我们改变了内联建议的呈现方式。这不仅修复了许多错误,而且使字词换行能够识别内联建议。

此外,现在支持在非尾部位置的多行内联建议。

内联提示改进

我们还更改了内联提示的渲染方式。通过使用与内联建议相同的机制,内联提示现在也考虑了自动换行。这种机制还可以在内联提示周围启用独立的光标停止。

终端

在窗口之间拖放终端

将终端从一个窗口的选项卡列表或编辑器区域拖放到另一个窗口的选项卡列表、编辑器区域或面板。

Drag and drop terminal across windows

子进程跟踪和关闭警告

现有的terminal.integrated.confirmOnExit 和新的 terminal.integrated.confirmOnKill 设置使用子进程跟踪,在尝试关闭在 shell 进程下有子进程的终端时显示警告。默认情况下,此跟踪仅影响编辑器区域中的终端,但现在可以配置为显示所有终端或面板区域中的终端的警告。

将贡献的终端配置文件设置为默认值

扩展程序贡献的终端配置文件现在可以设置为默认配置文件。默认终端配置文件由终端下拉菜单中的默认后缀指示。

The terminal profile dropdown displays indicates the extension terminal profile is set as the default

下划线和删除线支持

集成的终端现在支持下划线和删除线属性。例如,Git 可以配置 为使用这些新属性

Git output in terminal with underline and strikethrough text

主题:Sapphire 主题

上面的示例在 .gitconfig 中使用以下设置

[color "status"]
  added = green bold
  changed = red bold strike
  untracked = cyan
  branch = yellow black bold ul

在编辑器区域中创建侧面的终端

有一个新的命令 workbench.action.createTerminalEditorSide 用于在编辑器区域的活动编辑器旁边创建终端。

活动终端选项卡指示器

主题现在可以使用主题键 terminal.tab.activeBorder 设置垂直线的颜色,以指示活动终端选项卡。

Highlighted active terminal

如果未设置 terminal.tab.activeBorder,该颜色将回退到 tab.activeBorder

禁用终端选项卡图标中的动画

新的设置 terminal.integrated.tabs.enableAnimation 将禁用终端选项卡图标中的动画。对于任务,将使用播放按钮,而不是旋转动画

Terminal tab without animation and play button displayed

调试

改进的编辑器标题中的运行/调试按钮

在 2 月份发布的版本中,我们引入了一个下拉按钮,用于将运行和调试命令分组到编辑器标题区域的中心(和紧凑)位置(请参阅1.54 版本说明)。根据用户反馈,我们尝试通过记住上次执行的操作来改进下拉按钮。下拉按钮现在有两个点击区域,一个用于默认操作(左侧),另一个用于下拉菜单(右侧),当选择下拉菜单时,它将运行该操作并将其记忆为新的默认操作。

Debug/run split button shown for Java

下拉菜单行为

  • 如果只有一个运行或调试操作,则省略下拉菜单。
  • 如果有多个运行或调试操作,则所有操作都将出现在下拉菜单中,默认操作设置为下拉菜单中的第一个操作(只要没有记住的操作)。
  • 默认操作在特定工作空间中跨 VS Code 重启保持;它在每个编辑器中保持。

对扩展的贡献

实时预览

实时预览 扩展程序,上个月发布,有一些令人兴奋的新功能。这些包括

  • 与内置 JavaScript 调试器兼容以进行外部预览。
    • 运行实时预览:显示调试预览以试用它!
  • 对嵌入式浏览器进行了改进,例如“在页面中查找”支持以及快速访问 webvivew DevTools。
  • 自动生成的文件的系统文件监视。
  • 还有更多!🎉

要详细了解本月的进展,请参阅扩展程序的版本说明

Live Preview Debugging

Live Preview new browser features

主题:GitHub 深色主题

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展程序上继续进行工作,该扩展程序允许您处理、创建和管理拉取请求和问题。本月的亮点之一是开始处理问题已扩展到允许您处理当前存储库之外的问题。

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

Jupyter

Jupyter 扩展程序上继续进行工作。要了解所有新功能和更新,您可以阅读完整的7 月份版本的变更日志

如果您想了解有关 VS Code 如何支持笔记本电脑的本机支持的更多信息,您可以阅读最近的笔记本电脑的成熟 博客文章。

交互式窗口

Jupyter 交互式窗口提供了一种使用文本文件而不是笔记本接口来构建和使用 Jupyter 笔记本的替代方法。上个月,我们预览了 Jupyter 交互式窗口的升级版本,该版本具有更深层的 工作台 集成,包括对主题、自定义键绑定、代码段、与扩展程序的兼容性等的 支持。非常感谢我们的用户通过 GitHub 问题提供有关预览体验的反馈。内置的交互式窗口现在是 1.59 中的默认接口。以前的接口将在设置 "jupyter.enableNativeInteractiveWindow": false 后继续可用,并将在即将发布的版本中删除。我们期待着您的反馈

Shift+Enter to run code in the Interactive window

逐行运行

我们一直在努力支持 Jupyter 笔记本中的“逐行运行”功能。此功能本质上是一种简化的调试模式,允许您逐行逐步执行单元格的代码,而无需任何复杂的调试 UI。这仍然是实验性的,但您可以尝试通过设置 "jupyter.experimental.debugging": true,在选定的内核中安装 ipykernel 的版本 6,然后选择单元格工具栏中的逐行运行按钮来试用它。

Run by line

Python

Python 扩展程序中,我们改进了 Python 解释器列表的排序。过去,虚拟环境将显示在列表底部,导致大量滚动和/或搜索。现在,位于项目根目录的虚拟环境将首先显示,其次是全局安装的环境。

List of Python interpreters

Dev Containers devcontainer CLI

Dev Containers 扩展程序,用于在 VS Code 中使用 Docker 容器,现在包含一个 devcontainer 命令行界面,允许您在 dev 容器中打开文件夹(devcontainer open)或构建 dev 容器映像(devcontainer build)。

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

预览功能

未命名文件的自动语言检测

我们很高兴宣布未命名文件的自动语言检测的初始预览,该功能使用机器学习来检测您正在使用的语言并自动设置未命名文件的语言模式。此功能使用开源 ML 库 Tensorflow.js 以及来自 GitHub 用户 @yoeoGuesslang 的 ML 模型。

在此版本中,此功能默认情况下将关闭,但我们计划在下一次迭代中将其设置为默认值。要启用它,请应用以下设置

"workbench.editor.untitled.experimentalLanguageDetection": true

要查看该功能的实际操作,请打开一个未命名的文件(文件 > 新建文件)并将源代码粘贴到您的编辑器中。

以下是如何自动检测 Python 代码的示例

paste a code snippet right into VS Code and it will detect the language

主题:熊猫主题

此外,您可以通过打开语言选择器来查看正在检测的语言。

the language picker also shows the detected languages if there are any

主题:熊猫主题

注意:如果语言检测不够自信,那么您将保持在当前语言模式,并且在语言检测更加自信之前,语言选择器中不会显示任何结果。

该设置还允许您提供语言覆盖来指定您不希望自动切换的语言模式。

以下是如何不自动检测 Markdown 文件的示例

"workbench.editor.untitled.experimentalLanguageDetection": true
"[markdown]": { "workbench.editor.untitled.experimentalLanguageDetection": false }

使用上面的设置,在您编辑未命名的 Markdown 文件时,自动语言检测不会运行。但是,如果您修改任何其他类型的未命名文件,自动语言检测运行这些文件的內容。

我们已将与 ML 模型交互的代码分离到其自己的库中,并作为 npm 包发布,位于vscode-languagedetection 存储库 中。

请告诉我们未命名文件的自动语言检测对您有什么帮助!

TypeScript 4.4

此版本包括对即将发布的 TypeScript 4.4 版本的支持。您可以在 TypeScript 博客 上阅读有关 TypeScript 4.4 中的新语言功能和改进的更多信息。一些工具亮点

  • 在 JavaScript 和 TypeScript 文件中为参数名称和类型提供内联提示。
  • 在纯 JavaScript 文件中提供基本的拼写建议。只有当 TypeScript 语言服务对错误和修复有信心时才会显示这些建议。

要开始使用 TypeScript 4.4 nightly 构建,请安装TypeScript Nightly 扩展程序。

请分享您的反馈,并让我们知道您在使用 TypeScript 4.4 时是否遇到任何错误。

反汇编视图

感谢 Microsoft C++ 团队的重大贡献,我们很高兴在本次里程碑中包含调试反汇编视图的预览。

反汇编视图可以从编辑器的上下文菜单中打开,以显示活动堆栈帧的反汇编源代码,并且它支持逐步执行汇编指令并在各个指令上设置断点。

反汇编视图仅在活动调试会话中以及底层调试扩展程序支持它时可用。截至今天,只有 Microsoft C++Mock Debug 扩展程序可以为反汇编视图提供数据。

Disassembly view in Mock Debug extension

从技术角度来看,VS Code 对反汇编视图的实现现在支持调试适配器协议的另外四个功能

  • disassembly 请求,用于提供内存位置的反汇编源代码。
  • 堆栈帧上的 instructionPointerReference 属性。
  • 步进请求上的 granularity 属性。
  • 指令断点和 setInstructionBreakpoints 请求。

扩展编写

测试 API

去年秋天,我们开始着手在 VS Code 中添加对运行测试的本机支持,而本月第一组与测试相关的 API 已最终确定。与在扩展程序中以前找到的 API 相比,这些 API 提供了更大的灵活性、更好的性能和更丰富的 UX。查看编写测试扩展程序的指南 以深入了解。

Image showing the test explorer and rich diff view experience

主题:codesong

现有 Test Explorer UI 扩展程序的用户可以通过将 testExplorer.useNativeTesting 设置为 true 来获得本机体验。但是,转换是 Test Explorer UI 扩展程序现有 API 的反映,因此一些功能(例如丰富的差异支持)不包括在内。

最早采用测试 API 的扩展之一是 Microsoft Java 测试运行器,它包含在 Java 扩展包 中。

Java extension using the native test API in VS Code

新建文件菜单的贡献点

提供创建新文件编辑器方式的扩展(例如笔记本或自定义编辑器)现在可以为新的 file/newFile 菜单贡献点贡献命令。可以通过欢迎页面或文件菜单中的 **新建文件...** 项目访问此菜单。

New File menu in use via Welcome page

丰富的状态栏悬停

现在,状态栏项目 StatusBarItem.tooltip: string | IMarkdownString 支持包括链接和图标在内的丰富悬停。

Rich Status bar hover

  • 如果 MarkdownString.supportThemeIcons 为 true,则可以使用 $(iconName) 语法使用图标。
  • 如果 MarkdownString 是可信的,您还可以添加命令链接。语法:([test](command:vscode.newWindow))

状态栏警告颜色

表示警告的状态栏项目可以使用新添加的颜色 statusBarItem.warningBackgroundstatusBarItem.warningForeground

没有 additionalProperties 的对象设置

对象设置必须将 additionalProperties 设置为 false,以便在设置编辑器中支持对象。否则,设置编辑器将解释该设置是一个可以采用任何形状的复杂设置,并引导用户到设置 JSON 文件。

多行字符串设置

要在设置编辑器中添加对多行字符串设置的支持,请将 "editPresentation": "multilineText" 作为键值对添加到字符串设置中。将字符串设置更改为多行将导致设置编辑器在多行文本区域而不是单行输入框中呈现设置值。

更新的 codicon

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

List of updated icons

  • azure
  • compass-active
  • compass-active
  • compass-dot
  • compass
  • debug-all
  • debug-coverage
  • git-pull-request-closed
  • git-pull-request-draft
  • issue-draft
  • layers-active
  • layers-dot
  • layers

文本文档更改原因

当事件 workspace.onDidChangeTextDocument 被触发时,事件对象上的新属性 reason 表示文本更改是由于撤消或重做操作引起的。

语言服务器协议

已发布 语言服务器协议 的新版本,以及相应的 npm 模块。 3.17 版本 包含对完成项标签详细信息的建议,该建议与 VS Code 本身最新的更改一致。

调试适配器协议

最终确定“writeMemory”请求和“memory”事件提案

writeMemory 请求现已最终确定,并在 调试适配器协议 的 1.48 版本以及相应的 npm 模块中可用。如果调试适配器具有 supportsWriteMemoryRequest 功能,则客户端可以使用 writeMemory 请求将字节写入给定位置的内存。

memory 事件有一个 提案,将在下一个里程碑中添加到 DAP。

建议的扩展 API

每个里程碑都包含新的 API 提案,扩展作者可以尝试使用这些提案。和往常一样,我们希望您提供反馈。这是尝试使用 API 提案所需要做的操作

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

您不能发布使用 API 提案的扩展。下一个版本中可能存在重大更改,我们永远不会想破坏现有扩展。

TaskGroup 的 isDefault

group 属性存在于 tasks.json 文件中定义的任务中,并且还通过任务 API 公开。group 属性有一个 isDefault 属性,该属性直到现在在 API 中不可用。此提案在 TaskGroup 上将 isDefault 属性公开为只读,以便扩展可以读取哪个任务是组的默认任务,但不能通过设置组的默认任务来覆盖用户的配置。

AuthenticationGetSessionOptions 的 forceRecreate

到目前为止,用于获取身份验证会话对象的 getSession API 始终没有能够要求用户登录的功能。对于使用 SAML/单点登录 (SSO) 的身份验证服务(例如 GitHub),需要提示登录,这些服务使用访问令牌,当 SSO 会话过期时,该访问令牌最终会失去对资源的访问权限。此提案在 AuthenticationGetSessionOptions 中添加了另一个属性,称为 forceRecreate,它允许您要求用户再次登录。向用户显示类似于指定 createIfNone 时的模态体验。

工程

基于 iframe 的 webview 现在在桌面上的所有地方使用

本月,我们完成了从 Electron 的 webview 标签 元素到基于正常 <iframe> 元素的 webview 的过渡。这使 VS Code 的 webview 在桌面和 Web 上的实现更一致,还可以让我们删除许多现在已变得多余的代码。

Electron 13 更新

在本里程碑中,我们完成了将 Electron 13 打包到 VS Code 中的探索工作,感谢所有参与在 Insiders 上进行测试和自托管的人员。这是一个主要的 Electron 版本,它附带了 Chromium 91.0.4472.124。此版本没有更改 Node.js 版本,它将保持为 v14.16.0。

Electron 沙箱支持的进展

随着我们继续使 VS Code 工作台准备好启用 Electron 的 沙箱,我们希望在 Linux 上启用混合沙箱模式,不再在我们的分发包 deb、rpm、snap 和 tar 存档中捆绑 CLI 参数 --no-sandbox。Chromium 在 Linux 上有多层沙箱模型。如果 Chromium 无法使用命名空间沙箱作为第 1 层,它将尝试使用 setuid 沙箱 通过与应用程序二进制文件一起提供的辅助二进制文件 chrome-sandbox。为了使 setuid 二进制文件工作,它需要满足以下条件

  • 沙箱二进制文件必须可以被 Chromium 进程执行。
  • 它必须是 SUID 且可以被其他人执行。

我们能够为 deb 和 rpm 包保留这些条件。目前,snap 包无法实现这些权限,我们正在跟踪 问题 #127140 以解决 snap 包的未来发展。

至于使用 tar 存档,如果应用程序无法使用命名空间沙箱,这在容器内运行时可能会出现,它将显示以下错误

FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that chrome-sandbox is owned by root and has mode 4755.

如果发生这种情况,您可以使用以下两种选项之一来使其正常工作

  • 修复 setuid 辅助程序的权限

    sudo chown root <path-to-vscode>/chrome-sandbox
    sudo chmod 4755 <path-to-vscode>/chrome-sandbox
    
  • 使用 --no-sandbox 标志运行

冒烟测试改进

我们运行一套冒烟测试,在每次构建时触发,这些测试启动 VS Code(桌面和 Web),并练习各种 UI 元素以确保功能正常。在本里程碑中,我们对该基础设施进行了投资,以便我们可以从发布检查表中删除手动冒烟测试。

冒烟测试现在在所有平台(macOS、Linux 和 Windows)上运行。最重要的是,我们其中一个更复杂的冒烟测试套件专门检查 VS Code 的上一个稳定版本和新版本之间的回归,该套件已自动化,并在每次提交时运行。

最后,感谢出色的 Playwright 库,我们使用它进行自动化的 Web 冒烟测试,我们启用了它们的跟踪功能,以便我们可以使用它们的 跟踪查看器 工具重播失败的冒烟测试。

值得注意的修复

  • 26425:当不存在更改时,打开更改按钮不应显示
  • 100815:连接到远程 WSL 时外部终端出现故障
  • 106981:窗口缩放设置为 -1 时终端光标重影
  • 127959:调试器暂停时调试面板打开
  • 129059:设置编辑器中的对象窗口不呈现描述
  • 129070:无法仅通过按下确定按钮来更正下拉列表设置值
  • 129415:用户任务无法在单文件模式下运行

感谢

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

对我们的问题跟踪的贡献

vscode 的贡献

vscode-extension-samples 的贡献

vscode-languageserver-node 的贡献

vscode-pull-request-github 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

language-server-protocol 的贡献

monaco-editor 的贡献

monaco-languages 的贡献