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

2022 年 7 月(版本 1.70)

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

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

更新 1.70.3:此更新仅适用于 Windows 7 用户,是 最后一个支持 Windows 7 的版本

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


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

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

观看发布会:收听 VS Code 团队讨论一些新功能。您可以在我们的 YouTube 频道上找到 活动的录制

内部人员:希望尽早尝试新功能?您可以下载每日 内部人员 版本并尝试最新的更新。

工作区

更轻松的标题栏自定义

对于使用自定义标题栏的用户(Windows、macOS 和 Web 上的默认设置),您可能已经注意到我们在标题栏中引入了更多交互式内容。虽然已经存在设置可以单独隐藏这些元素中的每一个,但您现在可以右键单击标题栏以访问一个上下文菜单,该菜单可以切换菜单栏(在 macOS 桌面版上未显示)、命令中心 和布局控件。

title bar context menu

对于希望使用系统上下文菜单的 Windows 用户,仍然可以通过右键单击窗口左上角的 VS Code 图标或按 Alt+Space 来触发菜单。鼠标位置用于确定使用 Alt+Space 触发时的行为,因此如果自定义菜单位于标题栏上方,它将显示。

system context menu

对于 Linux 用户,由于 问题 #156397,标题栏中的空白区域将不会打开上下文菜单。您必须右键单击标题栏中要隐藏的项目之一。

改进的菜单栏折叠

随着命令中心的加入,我们尝试将菜单栏缩减为汉堡菜单,以腾出空间。在听到用户反馈后,我们将菜单栏切换回旧的折叠行为,直到大部分菜单都折叠起来,然后才切换到汉堡菜单。

无障碍的 macOS 标题栏缩放

同样,为了改善命令中心体验,当 macOS 上的标题栏中存在交互式组件时,标题栏现在将与其余 UI 一起缩放,以提高无障碍性。

折叠选择

命令 **从选择创建手动折叠范围** (⌘K ⌘,(Windows、Linux Ctrl+K Ctrl+,))从当前选定的行创建一个 折叠 范围并将其折叠。该范围称为 **手动** 折叠范围,它位于折叠提供程序计算的范围之上。

可以使用命令 **删除手动折叠范围** (⌘K ⌘.(Windows、Linux Ctrl+K Ctrl+.))再次删除手动折叠范围。

手动折叠范围特别适用于没有编程语言支持折叠的情况。

保留折叠范围

VS Code 现在会保留折叠范围,即使折叠范围不再是折叠提供程序计算的范围的一部分。一个典型的例子是当用户注释掉文件、开始一个字符串文字或创建语法错误,导致无法创建所有范围时。这种折叠范围成为“恢复”范围。一旦折叠提供程序在同一位置返回范围,或者使用命令 **删除手动折叠范围**,它们就会被删除。

隐藏折叠控件

现在可以通过设置 "editor.showFoldingControls": "never" 隐藏槽中的折叠控件。仍然可以使用折叠命令和快捷方式扩展和折叠折叠范围。

3 路合并编辑器改进

我们继续完善新的 3 路合并编辑器,并在本版本中默认启用它。合并编辑器可以通过单击源代码管理视图中的冲突文件来打开。

亮点包括用于接受来自一侧的所有更改的新命令、改进的上下文菜单、增强的差异颜色以及对冲突更改与非冲突更改的更多强调。

我们还开始探索替代的差异算法,以提高合并冲突的精度。如果您在差异或合并编辑器中遇到次优的更改突出显示或对齐,我们希望您在我们的 GitHub 问题跟踪器中记录这些情况!

命令行选项合并

您现在可以使用命令行选项在 VS Code 中打开合并编辑器

-m --merge <path1> <path2> <base> <result> Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions, and the output file to save merge results.

例如,如果您在 .gitconfig 中配置了此选项,则可以使用 VS Code 作为 Git 的合并工具

[merge]
  tool = code
[mergetool "code"]
  cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED

搜索文件装饰

搜索视图中的搜索结果现在在右侧具有文件装饰和颜色,以表示文件的错误和源代码管理信息。这类似于 文件资源管理器中已显示的文件装饰

Search file decorations

搜索多选

搜索视图现在也支持多选。您对选择中一个结果执行的任何操作(例如,取消或替换)也将对其他选定项目执行。

树查找控件

树视图(例如文件资源管理器)现在支持查找控件。您可以在树中按 ⌥⌘F(Windows、Linux Ctrl+Alt+F))弹出查找控件。您可以使用查找控件突出显示匹配的元素,或切换 **过滤** 按钮以隐藏所有与搜索词不匹配的元素。

注意:如果您习惯在文件资源管理器处于焦点时调用 ⌥⌘F(Windows、Linux Ctrl+Alt+F))时在编辑器中打开查找控件,您可以相应地配置您的键绑定

{
  "key": "cmd+f", // "ctrl+f" on Windows/Linux
  "command": "-list.find",
  "when": "listFocus && listSupportsFind"
}

通过新建文件创建任意文件

**文件** > **新建文件...**(或 **欢迎** 页面上的 **新建文件...** 链接)体验得到了改进,允许创建任意文件。您现在可以在快速输入框中键入文件名以在磁盘上创建文件。

A input box with test.js inputted into it and the entry New File(test.js) selected

终端

默认启用 Shell 集成

Shell 集成的自动注入,在上一个版本中已移出预览版,现在默认启用。对于支持的 Shell 设置(大多数 bash/zsh/pwsh 配置),它应该无需任何更改就能正常工作,您应该会看到命令装饰

When shell integration is enabled, blue, red and grey circles appear next to commands run in the terminal

主题:蓝宝石主题

注意:在 Windows 上,您需要 PowerShell 7 (pwsh) 才能获得 Shell 集成支持。您可以通过 https://aka.ms/PSWindows 安装。

如果 Shell 集成功能没有自动亮起,您需要设置 手动安装,该安装在 本版本中已简化

terminal.integrated.shellIntegration.enabled 设置设置为 true 时,将启用自动注入,将此添加到您的 settings.json 文件中以禁用此功能

"terminal.integrated.shellIntegration.enabled": "false"

这只会禁用 VS Code 的 Shell 集成注入。即使禁用,如果您的设置为 VS Code 理解的其他一些终端启用了 Shell 集成,它仍然会接收这些集成。如果您不喜欢命令和/或滚动条装饰,您可以只禁用它们的显示,同时仍然利用 Shell 集成带来的 额外功能

简化的 Shell 集成手动安装

以前,手动安装需要多个步骤,并且是特定于平台和 Shell 的。新的手动安装使用 code CLI 获取 Shell 集成脚本,并且可在跨平台和连接到远程窗口时工作,这意味着您可以在 dotfiles 中同步它,它应该可以正常工作。

# Manual install on bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"

您可以在 终端 Shell 集成 中阅读有关如何为其他 Shell 安装 Shell 集成的更多信息。

更多 Shell 集成配置选项

新设置 terminal.integrated.shellIntegration.decorationsEnabled 允许您在 gutteroverviewRuler 或两者都不显示命令装饰。为了方便访问,您可以在单击装饰时,通过上下文菜单中的“配置命令装饰”修改此设置(选择“切换可见性”以显示选项下拉菜单)。

The command decoration context menu contains the new option Configure Command Decorations

您也可以从下拉菜单中配置默认、成功或错误图标。

默认颜色和图标选项卡设置

默认图标和终端选项卡颜色可以通过 terminal.integrated.tabs.defaultIconterminal.integrated.tabs.defaultColor 为每个文件夹设置。

扩展的 PowerShell 键绑定

由于 shell 集成,存在额外的 PowerShell 键绑定,例如 Ctrl+Space。由于缺乏 VT 编码,这些在以前是不可能的。如果 shell 集成在 pwsh 中正常工作,则以下键绑定现在应该可以使用

  • Ctrl+Space - 默认情况下在 Windows 上为 MenuComplete
  • Alt+Space - 默认情况下为 SetMark
  • Shift+Enter - 默认情况下为 AddLine
  • Shift+End - 默认情况下为 SelectLine
  • Shift+Home - 默认情况下为 SelectBackwardsLine

这适用于 **所有平台**,即使是 Linux/macOS,在这些平台上通常不可能使用这些键绑定。默认值始终可以在 pwsh 配置文件中使用 Set-PSReadLineKeyHandler 重置。如果您还有其他期望的键绑定,请 告知我们

当启用 shell 集成时,我们的目标是使“运行最近的命令”成为 shell 反向搜索(Ctrl+R)的跨 shell 替代品。有一个新的连续搜索模式,它是触发命令时的默认模式。这在大多数 shell 中的行为类似于 Ctrl+R,可以选择切换回模糊搜索

新的 inTerminalRunCommandPicker 上下文键可用,允许设置一个像 Ctrl+R 这样的键绑定,以转到下一个匹配项。例如,以下键绑定现在可以完全替代 shell 的反向搜索,Ctrl+Alt+R 作为旧行为的回退

{ "key": "ctrl+r",     "command": "workbench.action.terminal.runRecentCommand", "when": "terminalFocus" },
{ "key": "ctrl+alt+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u0012"/*^R*/ }, "when": "terminalFocus" },
{ "key": "ctrl+r",     "command": "workbench.action.quickOpenNavigateNextInViewPicker", "when": "inQuickOpen && inTerminalRunCommandPicker" },
{ "key": "ctrl+c",     "command": "workbench.action.closeQuickOpen", "when": "inQuickOpen && inTerminalRunCommandPicker" },

多行命令现在会在适当的地方显示一个新行符号,并且还会使用方括号粘贴模式,这意味着它们会被视为粘贴到支持 shell 的命令中。这通常意味着它们都会添加到同一个提示符中,而不是单独执行。

Run recent command now shows the "Return Symbol" Unicode character (⏎, U+23CE) to visualize new lines

其他 shell 集成改进

以下是 shell 集成的较小改进

  • 命令导航改进了视觉反馈,短暂地显示“焦点边框”,然后在 gutter 中保留一个持久矩形,以帮助突出显示缓冲区中的位置。

    A solid rectangle the color of your theme's focus color now appears to the left of the command being navigated to

  • 新的 workbench.action.terminal.copyLastCommand 命令可用,允许键绑定复制最后一个命令的输出(Ctrl/Cmd+Shift+UpCtrl/Cmd+CEscapeCtrl/Cmd+End 的快捷方式)。

  • Bash shell 集成

    • 支持更多 $PROMPT_COMMAND 格式。
    • bash-preexec 助手正在使用时,shell 集成应该会更好地工作。

渲染改进

当启用 GPU 加速时,对终端渲染进行了多项改进

  • 半圆形 Powerline 符号现在是自定义渲染的。与上一个版本中的箭头符号一样,这些符号应该与相邻单元格无缝融合,并且即使使用行高,也能扩展到单元格的高度。

    Semi-circle Powerline symbols now render without needing to configure a font

  • 圆角方框绘制字符()现在使用更平滑的曲线。

    These round corner symbols now render as perfect 1/4 circles

  • 改进了背景颜色改变时的字形裁剪,这在 npm 输出警告时很常见。

    Wide characters like W would sometimes escape the background of a cell. For example, when the background of the text was yellow, the W in "WARN" could show unexpected yellow pixels in the top left. The After image shows that it is now fixed

  • 与上面的裁剪问题类似,存在一个问题,即某些字形中的抗锯齿会与其他字符重叠并降低视觉效果。这个问题最容易用上面的背景示例来说明。Workk 的一个像素也可能从另一个方向逃离单元格的边界。这个像素将不再出现在字形中,因为它被移除,因为它几乎与背景相同颜色。

    A pixel in  could overlap with the cell to the right, in this case that pixel may not be rendered at all if the difference in color and the background is small

源代码管理

操作按钮改进

我们根据用户反馈继续完善源代码管理操作按钮

  • 只有在高度确定本地分支领先或落后于远程跟踪分支时,才会显示“同步更改”操作按钮。
  • “提交”操作按钮仅在考虑智能提交设置的情况下,根据已更改资源列表启用。
    • git.enableSmartCommit
    • git.suggestSmartCommit
    • git.smartCommitChanges
  • “提交”操作按钮图标根据分支保护设置更新
    • git.branchProtection
    • git.branchProtectionPrompt

改进的变基冲突解决

在这个里程碑中,我们解决了解决合并冲突时变基流程中的一些较小问题。现在,用户应该能够在解决所有合并冲突后,使用源代码管理视图中的“提交”按钮继续变基操作。

提交输入字段拼写检查

在这个里程碑中,我们确认了所有必要的扩展 API 可用于支持提交输入字段中的拼写检查。我们联系了两个流行的拼写检查扩展的作者,并提交了拉取请求,说明如何更新他们的扩展以对提交描述文本提供拼写检查。

调试

JavaScript 调试

当您创建启动配置以调试 JavaScript/TypeScript 程序时,您可以设置 "console": "integratedTerminal" 以在终端中运行该程序(而不是直接生成进程)。几个月前,我们注意到 launch.json 配置中的 "args" 部分被转义为 shell,但并非全部。这意味着尝试将参数传递给程序可能会意外地触发 shell 中的特殊行为。我们清理了这一点,然后意识到设置包含对 shell 具有特殊含义的字符的参数是一件有用的事情,并且一些用户依赖这种行为。

我们讨论了正确的修复方法,并决定这种行为应该是可选的,并且需要对 调试适配器协议 (DAP) 进行更改。我们对 DAP 做了 这项更改,在 VS Code 和 js-debug 中实施了它,其他调试适配器应该很快就会跟进。

以下是如何在节点启动配置中使用新行为

{
    "type": "node",
    "console": "integratedTerminal",
    ...

    // If you pass args as a single string, the characters will not be escaped for the terminal,
    // so the command in backticks will be evaluated, and output will be redirected to "outfile".
    // The user is responsible for knowing the type of shell that this will be run in,
    // and doing any escaping necessary.
    "args": "`echo hello` > outfile",

    // If you pass args as an array, the characters will be escaped for the terminal,
    // so that the program receives them verbatim.
    "args": ["`echo hello` > outfile"]
}

调试会话选择器

调试时,您现在可以在命令面板中运行“调试:选择调试会话”。这将显示一个带有您活动调试会话的选择器,您可以使用它来搜索和过滤您的各个调试会话。每个选择器项目的描述将显示生成它的会话(如果适用)。

在选择器中选择一个项目将使调用堆栈视图中的调试会话获得焦点。调试操作(例如,暂停、单步执行、重新启动、停止)将在获得焦点的调试会话上执行。选择一个会话还会显示会话的调试控制台。

任务

运行任务命令的筛选器支持

“任务:运行任务”(workbench.action.tasks.runTask)操作支持按任务名称和类型进行筛选,以便以更简洁和可配置的方式选择和执行任务。

例如

{
  "key": "ctrl+h",
  "command": "workbench.action.tasks.runTask",
  "args": {
    "task": "VS Code - Build",
    "type": "npm"
  }
}

改进的自动任务流程

受信任的工作区功能允许 VS Code 简化运行自动任务的流程。默认情况下,如果文件夹受信任,则会运行自动任务,否则您将在每个文件夹中收到一次提示。此行为可以通过 task.allowAutomaticTasks 设置(默认值为 auto)进行配置,以始终(on)或从不(off)在运行自动任务之前提示。

语言

格式化 JSON 时保留换行符

您现在可以在格式化 JSON 文档中的行时保留初始行位置。例如,包含一行上值的数组在格式化后仍将保留这些值在同一行上。JSON 文件中的额外换行符也将保留。要启用此功能,请在设置编辑器中设置选项“JSON > 格式化:保留行”。

笔记本

转到最近失败的单元格

如果最近运行的单元格失败,现在有一个按钮可以跳转到该单元格。您也可以运行“笔记本:转到最近失败的单元格”来执行相同的操作。

当您运行一组单元格并想知道哪个单元格失败并停止了组执行时,这很有用。

笔记本 Markdown 预览附件渲染

现在可以在 Jupyter 笔记本中渲染嵌入的 base64 图像。

粘贴到 Jupyter 笔记本中并通过 ![image alt-text](attachment:image.png) 引用图像将现在按预期在 VS Code 笔记本中渲染。

以下 Markdown 源代码

Notebook Markdown cell source code with image link

将渲染为

Notebool Markdown cell preview with attachment rendered

“共享”子菜单中的“复制 vscode.dev 链接”命令现在支持笔记本链接。

Web 版 VS Code

设置显示语言

您现在可以使用扩展视图中的语言包扩展上的“设置显示语言”按钮来设置浏览器的显示语言。

Set Display Language button on a language pack in the Extensions view

设置后,您可以使用当前设置的语言包扩展上的“清除显示语言”按钮清除显示语言。

Clear Display Language button on the current language pack in the Extensions view

对扩展的贡献

Python

入门体验

Python 扩展演练现在可以顺利地将用户过渡到安装 Python(如果需要)并进行选择。当 Python 未安装时,将打开 Microsoft Store 或适当的演练图块,用户可以自动运行显示的说明。与解释器相关的任何提示仅在用户操作需要解释器时显示,而不是在启动时显示。此外,UI 提示已得到改进,可以更准确地说明错误和建议的更改。

Python in-product Get started walkthrough

状态栏中的解释器信息

添加了一个新的设置 python.interpreter.infoVisibility,它控制何时在状态栏中显示有关所选解释器的信息。默认情况下,解释器信息仅在打开与 Python 相关的文件时显示(onPythonRelated)。它可以设置为 always 以恢复旧的行为,无论打开什么文件,都会显示所选解释器。将添加警告状态以指示所选解释器无效的情况

Interpreter information in the Status bar

自动调试配置

Python 扩展现在支持自动调试配置,它会分析当前项目并为您提供一个不需要额外修改的调试配置。

扩展识别 Django、Flask 和 FastApi 项目,以及简单的 Python 文件。

您可以了解有关 自动调试配置一些最近的改进 的更多信息。

实验性扩展:WWBD

有一个名为 WWBD 的新的实验性 Python 扩展,它充当 Python 环境工作流想法的沙盒。到目前为止,有一个用于虚拟环境的“创建环境”命令,可以查看一个命令是否可以帮助用户设置新的虚拟环境(有关完整的详细信息和其他扩展功能,请参阅 WWBD 扩展页面)。您可以阅读项目存储库中的 想法类别,以了解其他正在考虑的想法,包括 conda 支持。

Jupyter

将绘图图像复制到剪贴板

现在,您可以在 Jupyter 扩展中将单元格输出中的绘图复制到剪贴板。确保您已选择正确的呈现方式,因为目前仅支持 PNG 输出。

Select image/png when copying plot to the clipboard

设置好正确的呈现方式后,选择右上角的“复制到剪贴板”按钮。

Copy plot button

Web 扩展

以下功能已移植到 Jupyter 扩展的 Web 版本。

  • 绘图查看器
  • 数据框查看器

如果您想尝试使用该功能,请使用以下命令从本地机器启动 Jupyter:

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

然后,使用 vscode.dev 中的命令 Jupyter: Specify Jupyter server for connections 连接到 Jupyter。

有关更多信息(以及发表评论),请参阅此 讨论项目

交互式窗口恢复

通过启用设置 interactiveWindow.restore,现在可以跨 VS Code 窗口重新加载恢复交互式窗口会话。

限制:原始内核状态在窗口重新加载时不会保持持久性(有关更多信息,请参阅此 讨论项目)。如果您使用的是远程 Jupyter 服务器,则交互式窗口将在重新加载时连接到之前的内核会话。

从 .env 文件加载环境变量

已对从 .env 文件加载环境变量进行了许多修复,包括检测对 .env 文件的更改。Python 内核现在将从设置 python.envFile 中定义的文件加载环境变量。

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展方面取得了更多进展,该扩展使您可以处理、创建和管理拉取请求和问题。此版本的主要亮点包括

  • 新增了一个按钮,用于仅显示自查看器上次审查以来的拉取请求更改。
  • 源代码管理视图中的新 Commit & Create Pull Request 操作使您能够一步完成 Git 提交并进入 Create PR 视图。
  • 可以使用 githubPullRequests.pullRequestDescription 设置配置 PR 描述的源文本。

查看 扩展 0.48.0 版本的变更日志,以了解其他亮点。

远程开发

远程开发扩展 方面继续进行工作,该扩展使您可以使用容器、远程机器或 Windows 子系统 Linux (WSL) 作为功能齐全的开发环境。

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

预览功能

编辑器粘性滚动

现在可以显示 UI,以在滚动时显示用户所在的范围。 “粘性滚动” UI 将显示编辑器顶部所在的类/接口/命名空间/函数/方法/构造函数,帮助您了解文档中的位置。使用 editor.experimental.stickyScroll.enabled 设置启用粘性滚动。

<video src="/assets/updates/1_70/sticky-scroll.mp4" autoplay loop controls muted title=""Sticky scroll" showing the source code scope for a TypeScript file">

TypeScript 4.8 支持

此更新包括对即将发布的 TypeScript 4.8 版本的支持。有关 TypeScript 团队当前正在进行的工作的更多详细信息,请参阅 TypeScript 4.8 迭代计划

要开始使用 TypeScript 4.8 nightly 版本,请安装 TypeScript Nightly 扩展。

设置配置文件

在过去的几个月里,我们一直在努力在 VS Code 中支持 设置配置文件,这是社区最受欢迎的功能之一。此功能在 Insiders 版本中通过 workbench.experimental.settingsProfiles.enabled 设置提供预览。试用它并通过在 VS Code 存储库 中创建问题或在 问题 #116740 中发表评论来告知我们您的反馈。

在此里程碑中,我们还为 VS Code for the Web 添加了对 设置配置文件的支持。您可以使用 insiders.vscode.dev 和相同的 workbench.experimental.settingsProfiles.enabled 设置进行尝试。

主题:浅粉色

任务重新连接

在窗口重新加载时,可以通过启用 task.experimental.reconnection 来重新连接到监视任务,这将在扩展更改或 VS Code 版本更新后更快地返回工作。

代码操作

我们一直在努力在 VS Code 中提供更好的 代码操作 体验。代码操作 包括 重构、源代码操作和快速修复。

新的实验性代码操作控件可以通过 上下文菜单 打开,方法是选择 重构源代码操作,从灯泡中打开,或通过快速修复打开。您可以通过 editor.experimental.useCustomCodeActionMenu 设置进行尝试。通过在 VS Code 存储库 中创建问题或在 问题 #152913 中发表评论来告知我们任何反馈。

代码操作的重构预览也可以从新的代码操作控件中访问。将鼠标悬停在已启用的项目上以查看预览。自定义键盘绑定支持选择代码操作,以及预览选择。

在此里程碑中,我们还添加了对代码操作自定义键盘绑定的支持,其中包括快速修复 (⌘. (Windows、Linux Ctrl+.))。您可以通过将以下代码段与您所需的键盘快捷键一起添加到 keybindings.json 中进行尝试。

[
  {
    "key": "ctrl+k",
    "when": "codeActionMenuVisible",
    "command": "focusPreviousCodeAction"
  },
  {
    "key": "ctrl+j",
    "when": "codeActionMenuVisible",
    "command": "focusNextCodeAction"
  }
]

跨 VS Code for the Web 和桌面编辑会话

编辑会话 方面继续进行工作,该功能允许您在继续使用 VS Code for the Web 或桌面跨不同存储库工作时将未提交的更改一同带走。一些亮点包括

  • 现在,您可以在关闭编辑会话功能时从云端删除所有存储的编辑会话。
  • 现在支持使用 Microsoft 身份验证进行登录。
  • 如果您在查找编辑会话时遇到问题,可以使用 Edit Sessions: Show Edit Sessions 命令查看所有编辑会话。

要试用编辑会话,请在您的设置中设置 workbench.experimental.editSessions.enabled 并使用 Edit Sessions: Store Current Edit Session 命令,并在出现提示时使用 GitHub 或 Microsoft 身份验证进行登录。然后,在另一台机器或 VS Code 实例上的存储库中使用 Edit Sessions: Resume Latest Edit Session 命令,将所有已修改文件的当前工作内容还原到您的工作区。您可以随时使用 Edit Sessions: Sign Out 命令退出编辑会话。

在我们继续迭代编辑会话体验时,请尝试使用它并在 问题 #141293 中发表评论,与我们分享您的反馈。

扩展编写

“when” 子句的“not in” 运算符

对于 when 子句,已经存在一个运算符 in,它允许在具有数组或对象类型值的另一个上下文键中动态查找上下文键的值。我们添加了一个新的运算符 not in,它对该运算符进行否定。有关详细信息,请参阅 when 子句上下文 文档。

htmlLanguageParticipants 贡献点

一个新的贡献点 htmlLanguageParticipants 允许类似 HTML 的语言声明它们希望继承所有 HTML 语言服务器功能,例如代码补全、悬停和大纲。这对于不想实现完整语言服务器的编程语言扩展非常有用。

一个例子是内置的 handlebars 扩展,它现在在 package.json 中将自身添加到 htmlLanguageParticipants 中。

"contributes": {
  "htmlLanguageParticipants": [
     {
       "languageId": "handlebars"
      }
    ]
}

Quarkus 扩展已经采用了该贡献点。它使用嵌入式 Qute HTML 模板语言的额外建议来丰富 HTML 功能。

进入编辑器 API

文本编辑器放置 API 使扩展能够处理将文件或其他内容放置到文本编辑器中。这些放置事件可能来自 VS Code 内部,例如将文件从 VS Code 的资源管理器拖放到文本编辑器中,或者可能是通过将文件从您的操作系统拖放到 VS Code 中生成的。

要将文件放置到编辑器中,用户可以按住 kbsytyle(Shift) 并拖动,然后将文件放置到文件中的特定位置。此时,您的扩展可以选择对放置的数据执行的操作。

查看 进入编辑器扩展示例,以了解此 API 在实际应用中的简单示例。

建议的 API

每个里程碑都附带新的提议 API,扩展作者可以尝试使用它们。与往常一样,我们需要您的反馈。以下是尝试使用提议 API 的步骤

  1. 找到您想尝试的提议 并将其名称添加到 package.json#enabledApiProposals 中。
  2. 使用最新的 vscode-dts 并运行 vscode-dts dev。它会将相应的 d.ts 文件下载到您的工作区。
  3. 您现在可以针对提议进行编程。

您不能发布使用提议 API 的扩展。在下一次发布中可能会有重大更改,我们不想破坏现有扩展。

Webview 上下文菜单

新的网页视图上下文菜单提案使高级 网页视图 能够轻松自定义用户在网页视图内右键单击时显示的上下文菜单。这个新的贡献点使用 VS Code 的普通上下文菜单,因此自定义菜单可以与编辑器的其他部分完美融合。网页视图还可以为网页视图的不同部分显示自定义上下文菜单。

要试用这个新的 API,您需要启用 contribWebviewContext 提案。

"enabledApiProposals": [
  "contribWebviewContext"
]

要向您的网页视图添加新的上下文菜单项,请在新的 webview/context 部分下的 menus 中添加一个新条目。每个贡献都带有一个 command(这也是标题的来源)和一个 when 子句。 when 子句 应该包含 webview == 'YOUR_WEBVIEW_VIEW_TYPE' 以确保上下文菜单只适用于您的扩展的网页视图

"contributes": {
  "menus": {
    "webview/context": [
      {
        "command": "catCoding.yarn",
        "when": "webview == 'catCoding'"
      },
      {
        "command": "catCoding.insertLion",
        "when": "webview == 'catCoding' && webviewSection == 'editor'"
      }
    ]
  },
  "commands": [
    {
      "command": "catCoding.yarn",
      "title": "Yarn 🧶",
      "category": "Cat Coding"
    },
    {
      "command": "catCoding.insertLion",
      "title": "Insert 🦁",
      "category": "Cat Coding"
    },
    ...
  ]
}

在网页视图内部,您还可以使用 data-vscode-context 数据属性(或在 JavaScript 中使用 dataset.vscodeContext)为 HTML 的特定区域设置上下文。data-vscode-context 值是一个 JSON 对象,它指定当用户在元素上右键单击时要设置的上下文。最终上下文是通过从文档根目录到被单击的元素来确定的。

例如,考虑以下 HTML

<div class="main" data-vscode-context='{"webviewSection": "main", "mouseCount": 4}'>
  <h1>Cat Coding</h1>

  <textarea data-vscode-context='{"webviewSection": "editor", "preventDefaultContextMenuItems": true}'></textarea>
</div>

如果用户在 textarea 上右键单击,将设置以下上下文

  • webviewSection == 'editor' — 这将覆盖父元素的 webviewSection
  • mouseCount == 4 — 这是从父元素继承的。
  • preventDefaultContextMenuItems == true — 这是一个特殊的上下文,它隐藏了 VS Code 通常添加到网页视图上下文菜单中的复制和粘贴条目。

如果用户在 <textarea> 内右键单击,他们将看到

Custom context menus showing in a webview

视图大小

视图大小提案允许扩展为其贡献的视图提供权重

"contributes": {
    "views": {
        "github-pull-request": [
            {
                "id": "github:createPullRequest",
                "type": "webview",
                "name": "Create Pull Request",
                "size": 2
            },
            {
                "id": "github:compareChanges",
                "name": "Compare Changes",
                "size": 1
            }
        ]
    }
}

大小的工作方式类似于 CSS 属性 flex-grow。在上面的例子中,"size": 2 的视图将是 "size": 1 的视图的两倍。只有当视图容器由同一个扩展贡献时,才会尊重大小属性。

可扩展的 HTML 笔记本渲染器

我们内置的 笔记本渲染器 现在公开了一个实验性 API,允许扩展自定义 HTML 内容的渲染。这个 API 目前公开了一个单独的钩子 postRender,它在最初渲染 HTML 内容后被调用。

要尝试使用这个实验性 API,您的扩展 需要扩展 vscode.builtin-renderer API

"contributes": {
  "notebookRenderer": [
    {
      "id": "vscode-samples.my-custom-html-extension",
      "displayName": "My custom html renderer extension",
      "entrypoint": {
        "extends": "vscode.builtin-renderer",
        "path": "./out/main.js"
      }
    }
  ]
}

然后,您的渲染器可以在 vscode-builtin-renderer 上注册一个渲染钩子

import type { RendererContext } from 'vscode-notebook-renderer';

export async function activate(ctx: RendererContext<void>) {
  const htmlRenderer = await ctx.getRenderer('vscode.builtin-renderer');
  if (!htmlRenderer) {
      throw new Error(`Could not load 'vscode.builtin-renderer'`);
  }

  htmlRenderer.experimental_registerHtmlRenderingHook({
    // Invoked after the HTML content for `outputItem` has been rendered to `element`
    postRender(outputItem: OutputItem, element: HTMLElement): HTMLElement | undefined {
      // You can either modify `element` or return a replacement element
    }
  });
}

测试一下这个新的 API,并告诉我们您的想法!

调试适配器协议

argsCanBeInterpretedByShell for RunInTerminalRequest

RunInTerminalRequest 支持一个新的属性 argsCanBeInterpretedByShell,它告诉客户端命令 args 中的特殊 shell 字符是否应该保持未转义状态。这是为了使用户能够编写将在终端中启动的启动配置,并包含应由 shell 解释的字符。

工程

Electron 沙盒支持的进度

在本里程碑中,我们在默认情况下启用 Electron 的 沙盒 方面取得了重大进展。我们计划在 8 月份为 Insiders 启用沙盒,并最终使其成为 Stable VS Code 的默认设置。

对于好奇的人来说,在设置中配置 "window.experimental.useSandbox": true 将启用沙盒模式。希望您不会注意到有任何变化,但如果您发现问题,请向我们报告。

Markdown 语言服务器

在本次迭代中,我们将 VS Code 中用于编写 Markdown 的大部分工具提取到了一个 和一个 语言服务器 中。这包括我们用于路径完成、文档大纲和诊断的工具。

VS Code 的内置 Markdown 扩展已经切换到使用这个新的语言服务器,尽管希望您不会注意到任何行为上的差异。这种切换应该有助于提高性能,因为它将 Markdown 工具迁移到自己的进程中。迁移到语言服务器也帮助我们提高了实验性 Markdown 链接诊断的性能。

我们希望其他工具和编辑器也能够从这些新软件包中获益,甚至能够回馈它们。我们可以共同为每个人构建更好的 Markdown 工具!如果您有兴趣,请查看相关项目

Debian 包依赖项

Debian 包依赖项现在由脚本生成,而不是硬编码。这解决了 2016 年提交的一个问题,该问题会导致程序在某些机器上运行时由于缺少依赖项而崩溃。

文档和扩展

开发容器 CLI

开发容器命令行界面 (CLI) 主题已更新至 CLI 的 最新版本。开发容器 CLI 允许您构建和运行开发容器,并且是 开发容器规范 的开源参考实现。

Banner from the Development Containers Specification website

Azure 开发人员 CLI (azd)

Azure 开发人员 CLI 及其补充 VS Code 扩展 现已进入公开预览版。Azure 开发人员 CLI (azd) 通过提供与工作流程中的关键阶段相对应的开发者友好型命令,缩短了从本地开发环境到 Azure 的时间:代码、构建、部署、监控、重复。

Azure Developer CLI extension

Azure 开发人员 CLI 使用 可扩展模板,其中包含在 Azure 中启动和运行应用程序所需的一切。模板包含最佳实践、应用程序代码和可重复使用的基础设施即代码资产。更重要的是,它们涵盖了远超“Hello World!” 的端到端场景。

使用 Azure 开发人员 CLI,您可以初始化、预配和部署应用程序,或者更好地使用 'azd up' 在一步中完成这些操作!有关支持的 azd 命令的列表,请参阅 开发人员 CLI 参考

感谢

最后但同样重要的是,对 VS Code 贡献者表示衷心的 感谢

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-generator-code 的贡献

vscode-js-debug 的贡献

vscode-json-languageservice 的贡献

monaco-editor 的贡献