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

2021 年 7 月 (版本 1.59)

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

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

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


欢迎使用 Visual Studio Code 2021 年 7 月版。此版本中有许多我们希望您会喜欢的更新,其中一些主要亮点包括

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

美西时间 8 月 10 日星期二上午 8 点(伦敦时间下午 4 点)参加 VS Code 团队直播,观看此版本中的新功能演示并向我们提问。

内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。

工作台

扩展

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

Dynamic Extensions view

主题:GitHub Light Theme

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

Custom Extension hover

主题:GitHub Light Theme

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

Extension Runtime Status

主题:GitHub Light Theme

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

Extension Details

主题:GitHub Light Theme

设置编辑器

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

Object setting showing validation errors

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

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 Notebook

本月,我们将处理读取*.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 Theme

上述示例在 .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

调试

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

在二月发布版中,我们引入了一个下拉按钮,将“运行”和“调试”命令集中(且紧凑地)放置在编辑器的标题区域中(请参阅1.54 发布说明)。根据用户反馈,我们尝试通过记住上次执行的操作来改进下拉按钮。下拉按钮现在有两个点击区域,一个用于默认操作(左侧),另一个用于下拉(右侧),选择后将运行该操作并将其记住为新的默认操作。

Debug/run split button shown for Java

下拉行为

  • 如果只有一个“运行”或“调试”操作,则省略下拉菜单。
  • 如果有一个以上的“运行”或“调试”操作,所有操作都会出现在下拉菜单中,并且默认操作设置为下拉菜单中的第一个操作(只要没有记住的操作)。
  • 默认操作会跨 VS Code 重启为特定工作区保留;它不会按编辑器保留。

对扩展的贡献

实时预览

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

  • 与内置 JavaScript 调试器兼容,用于外部预览。
    • 运行实时预览:显示调试预览即可尝试!
  • 嵌入式浏览器的改进,例如“页面查找”支持和快速访问webvivew开发者工具。
  • 自动生成文件的文件系统监视。
  • 还有更多!🎉

有关本月进展的更多详细信息,请参阅扩展的发布说明

Live Preview Debugging

Live Preview new browser features

主题:GitHub 深色主题

GitHub 拉取请求和议题

GitHub Pull Requests and Issues”扩展的开发仍在继续,该扩展允许您处理、创建和管理拉取请求和问题。本月的一个亮点是“开始处理”问题的功能已扩展,允许您处理当前存储库之外的问题。

要了解所有新功能和更新,您可以查看扩展的 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

开发容器扩展,用于在 VS Code 中处理 Docker 容器,现在包含一个devcontainer命令行界面,允许您在开发容器中打开文件夹(devcontainer open)或构建开发容器镜像(devcontainer build)。

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

预览功能

无标题文件的自动语言检测

我们很高兴地宣布无标题文件自动语言检测的初始预览版,它使用机器学习来检测您正在编写的语言,并自动设置无标题文件的语言模式。此功能使用开源机器学习库 Tensorflow.js 和 GitHub 用户 @yoeoGuesslang 中的机器学习模型。

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

"workbench.editor.untitled.experimentalLanguageDetection": true

要查看该功能的实际效果,请打开一个无标题文件(文件 > 新建文件)并将源代码粘贴到编辑器中。

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

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

主题:Panda Theme

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

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

主题:Panda Theme

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

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

这是一个不自动检测 Markdown 文件的示例

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

使用以上设置,当您编辑无标题的 Markdown 文件时,自动语言检测将不会运行。但是,如果您修改任何其他类型的无标题文件,自动语言检测运行并处理这些文件的内容。

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

请告诉我们无标题文件的自动语言检测功能对您来说效果如何!

TypeScript 4.4

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

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

要开始使用 TypeScript 4.4 每夜构建版本,请安装 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 提供了更大的灵活性、更好的性能和比以前在扩展中发现的更丰富的用户体验。请查看编写测试扩展指南以深入了解。

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"作为键值对添加到字符串设置中。将字符串设置更改为多行将导致设置编辑器在多行文本区域而不是单行输入框中渲染设置值。

更新的 codicons

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

List of updated icons

  • azure
  • 指南针-激活
  • 指南针-激活
  • 指南针-点
  • 指南针
  • 调试所有
  • 调试覆盖率
  • git-拉取请求-已关闭
  • git-拉取请求-草稿
  • 问题草稿
  • 图层-激活
  • 图层-点
  • 图层

文本文档更改原因

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

语言服务器协议

新版 Language Server Protocol 及其相应的 npm 模块已发布。3.17 版包含与 VS Code 最新更改一致的完成项标签详细信息提案。

调试适配器协议

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

writeMemory 请求已最终确定,现在可在 Debug Adapter Protocol 的 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 中尚不可用。此提案将 isDefault 属性作为只读属性公开在 TaskGroup 上,以便扩展可以读取哪个任务是组的默认任务,但不能通过设置组的默认任务来覆盖用户的配置。

AuthenticationGetSessionOptions 的 forceRecreate

迄今为止,用于获取身份验证会话对象的 getSession API 从未能够要求用户登录。对于使用 SAML/单点登录 (SSO) 且访问令牌最终在 SSO 会话过期时失去对资源的访问权限的身份验证服务(如 GitHub),需要提示登录。此提案向 AuthenticationGetSessionOptions 添加了另一个名为 forceRecreate 的属性,允许您要求用户重新登录。向用户显示类似于您指定 createIfNone 时的模式体验。

工程

现在所有桌面平台都使用基于 iframe 的 webview

本月,我们完成了从 Electron 的 webview 标签元素到普通