在 VS Code 中试试

2022 年 7 月 (版本 1.70)

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

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

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

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


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

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

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

Insiders 版:想尽快试用新功能?您可以下载每晚的 Insiders 版本,尽快体验最新的更新。

工作台

更轻松的标题栏自定义

对于使用自定义标题栏(Windows、macOS 和网页版上的默认设置)的用户,您可能已经注意到我们正在向标题栏引入更多交互式内容。虽然已经有设置可以单独隐藏这些元素,但您现在可以右键单击标题栏以访问上下文菜单,该菜单可以切换菜单栏(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" 隐藏槽中的折叠控件。仍然可以使用折叠命令和快捷方式展开和折叠折叠区域。

三向合并编辑器改进

我们继续优化了新的三向合并编辑器,并在此版本中默认启用。通过在源代码管理视图中单击冲突文件,可以打开合并编辑器。

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

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

命令行选项 merge

您现在可以使用命令行选项在 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.

这使您可以使用 VS Code 作为 Git 的合并工具,例如,如果您在 .gitconfig 中进行配置

[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

主题:Sapphire Theme

注意:在 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 集成,VS Code 仍然会识别它们。如果您不喜欢命令和/或滚动条装饰,可以仅禁用它们的显示,同时仍可利用 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 编码,以前这些键绑定无法实现。如果在 pwsh 中 Shell 集成正常工作,以下键绑定现在应该可以工作

  • 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 集集成的一些较小改进

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

    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+Up, Ctrl/Cmd+C, Escape, Ctrl/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

改进的 rebase 冲突解决

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

提交输入字段拼写检查

在这个里程碑中,我们确认了支持在提交输入字段中进行拼写检查所需的所有扩展 API 都已可用。我们联系了两款流行的拼写检查扩展的作者,并提交了 pull request,演示如何更新他们的扩展以为提交描述文本提供拼写检查。

调试

JavaScript 调试

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

我们讨论了正确的修复方法,并决定此行为应为选择加入,并且需要修改调试适配器协议 (DAP)。我们对 DAP 进行了此项更改,并在 VS Code 和 js-debug 中实现,其他调试适配器也应很快跟进。

以下是如何在 Node launch 配置中使用新行为

{
    "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 文件中的额外换行符(newlines)也得到了保留。要启用此功能,请在设置编辑器中设置选项 JSON > Format: Keep Lines

Notebooks

转到最近失败的单元格

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

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

Notebook Markdown 预览附件渲染

现在可以在 Jupyter notebook 中渲染嵌入的 base64 图像。

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

以下 Markdown 源代码

Notebook Markdown cell source code with image link

将渲染为

Notebool Markdown cell preview with attachment rendered

共享子菜单中的 复制 vscode.dev 链接 命令现在支持 notebook 链接。

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

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

Jupyter

将绘图图像复制到剪贴板

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

Select image/png when copying plot to the clipboard

设置了正确的呈现类型后,选择右上角的复制到剪贴板按钮

Copy plot button

Web 扩展

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

  • 绘图查看器
  • Dataframe 查看器

如果您想尝试此功能,请在本地计算机上启动 Jupyter 并执行以下命令

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

然后从 vscode.dev 内使用命令 Jupyter: 为连接指定 Jupyter 服务器 连接到它。

有关更多信息(和评论),请参阅此讨论项

交互式窗口恢复

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

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

从 .env 文件加载环境变量

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

GitHub Pull Requests 和 Issues

GitHub Pull Requests and Issues 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括

  • 新增了一个按钮,用于仅显示自查看者上次审阅以来对 pull request 所做的更改。
  • 源代码管理视图中的新操作 提交并创建拉取请求 允许您一步完成 Git 提交并转到 创建 PR 视图。
  • 可以使用设置 githubPullRequests.pullRequestDescription 配置 PR 描述的源文本。

查看扩展 0.48.0 版本的更新日志以查看其他亮点。

远程开发

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

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

预览功能

编辑器 sticky scroll

现在可以在滚动期间显示 UI,显示用户当前位于哪个作用域。该“sticky scroll” UI 将显示编辑器顶部位于哪个类/接口/命名空间/函数/方法/构造函数中,帮助您了解在文档中的位置。使用设置 editor.experimental.stickyScroll.enabled 启用 sticky scroll。

<video src="/assets/updates/1_70/sticky-scroll.mp4" autoplay loop controls muted title="“粘性滚动”显示 TypeScript 文件的源代码范围">

TypeScript 4.8 支持

此更新包含对即将发布的 TypeScript 4.8 的支持。有关 TypeScript 团队当前正在处理内容的更多详细信息,请参阅 TypeScript 4.8 迭代计划

要开始使用 TypeScript 4.8 每夜版构建,请安装 TypeScript Nightly 扩展。

设置配置文件

在过去的几个月里,我们一直在努力支持 VS Code 中的设置配置文件,这是社区最受欢迎的功能之一。此功能可通过设置 workbench.experimental.settingsProfiles.enabledInsiders 版本中进行预览。欢迎试用并提供反馈,您可以在 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 身份验证登录。
  • 如果您无法找到编辑会话,可以使用编辑会话:显示编辑会话命令查看所有编辑会话。

要试用编辑会话,请在设置中设置 workbench.experimental.editSessions.enabled 并使用编辑会话:存储当前编辑会话命令,在提示时使用 GitHub 或 Microsoft 身份验证登录。然后,在另一台机器或 VS Code 实例上的仓库中使用编辑会话:恢复最新编辑会话命令,将所有已修改文件的工作内容恢复到您的工作区。您可以随时使用编辑会话:注销命令注销编辑会话。

随着我们不断迭代编辑会话体验,欢迎试用并通过在议题 #141293 中评论与我们分享您的反馈。

扩展创作

'not in' 运算符用于 'when' 子句

'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 上下文菜单

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

要试用此新 API,您需要启用 contribWebviewContext 提议。

"enabledApiProposals": [
  "contribWebviewContext"
]

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

"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"
    },
    ...
  ]
}

在 webview 内部,您还可以使用 data-vscode-context data 属性(或在 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 通常添加到 webview 上下文菜单中的复制和粘贴条目。

如果用户在 <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 的视图大小的两倍。只有当视图容器由同一个扩展贡献时,size 属性才会被尊重。

可扩展的 HTML Notebook 渲染器

我们的内置 Notebook 渲染器现在公开了一个实验性 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,并告诉我们您的想法!

调试适配器协议

RunInTerminalRequest 的 argsCanBeInterpretedByShell

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 Developer CLI (azd)

Azure Developer CLI 及其配套的 VS Code 扩展 现已公开发布预览版。Azure Developer CLI (azd) 通过提供映射到您工作流程关键阶段(编码、构建、部署、监控、重复)的对开发人员友好的命令,加快了您从本地开发环境迁移到 Azure 的时间。

Azure Developer CLI extension

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

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

致谢

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

议题跟踪

对我们的议题跟踪的贡献

拉取请求

vscode 的贡献

vscode-generator-code 的贡献

vscode-js-debug 的贡献

vscode-json-languageservice 的贡献

monaco-editor 的贡献