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 月版本。此版本包含许多更新,我们希望您会喜欢。其中一些关键亮点包括:
- 标题栏自定义 - 隐藏/显示菜单栏、命令中心或布局控制。
- 折叠选区 - 在编辑器中创建您自己的折叠区域。
- 多选搜索 - 选择然后对多个搜索结果执行操作。
- 树视图搜索和过滤 - 在树视图中(例如查找资源管理器)查找和过滤。
- 终端改进 - 默认启用 Shell 集成,扩展 PowerShell 键绑定。
- 命令行选项 --merge - 将三向合并编辑器用作默认合并工具。
- 笔记本:转到最近失败的单元格 - 直接跳转到笔记本错误。
- Python 入门体验 - 快速安装和配置 VS Code 中的 Python。
- 粘性滚动预览 - 新的滚动 UI 显示当前源代码范围。
- Dev 容器 CLI 主题 - 了解更新的开发容器 CLI。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
观看发布派对: 聆听 VS Code 团队讨论一些新功能。您可以在我们的 YouTube 频道上找到 活动录像。
内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。
工作台
更轻松的标题栏自定义
对于使用自定义标题栏(Windows、macOS 和 Web 上的默认设置)的用户,您可能已经注意到我们正在向标题栏引入更多交互式内容。虽然已经有设置可以单独隐藏这些元素中的每一个,但现在您可以右键单击标题栏以访问上下文菜单,该菜单可以切换菜单栏(在 macOS 桌面版上未显示)、命令中心和布局控制。

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

对于 Linux 用户,由于 问题 #156397,标题栏中的空白区域将不会打开上下文菜单。您必须右键单击标题栏中的某个您想要隐藏的项目。
改进的菜单栏折叠
随着命令中心的添加,我们尝试将菜单栏缩小为汉堡菜单以腾出空间。在听取用户反馈后,我们恢复了旧的菜单栏折叠行为,直到大多数菜单折叠起来,然后才切换到汉堡菜单。
可访问的 macOS 标题栏缩放
作为改进命令中心体验的一部分,当 macOS 标题栏中存在交互式组件时,标题栏现在将随着 UI 的其余部分一起缩放,以提高可访问性。
折叠选区
命令 从选区创建手动折叠范围 (⌘K ⌘, (Windows, Linux Ctrl+K Ctrl+,)) 从当前选定的行创建 折叠范围并将其折叠起来。该范围称为 手动 折叠范围,它位于折叠提供程序计算的范围之上。
可以使用命令 删除手动折叠范围 (⌘K ⌘. (Windows, Linux Ctrl+K Ctrl+.)) 再次删除手动折叠范围。
手动折叠范围对于没有编程语言折叠支持的情况特别有用。
保留折叠范围
VS Code 现在即使折叠范围不再是折叠提供程序计算的范围的一部分,也会保留折叠范围。一个典型的例子是,当用户注释掉文件、启动字符串字面量或创建导致无法创建所有范围的语法错误时。此类折叠范围变为“恢复”范围。一旦折叠提供程序在相同位置返回范围,或者使用命令 删除手动折叠范围,它们将被删除。
隐藏折叠控件
现在可以使用设置 "editor.showFoldingControls": "never" 隐藏边距中的折叠控件。仍然可以使用折叠命令和快捷键展开和折叠折叠范围。
三向合并编辑器改进
我们继续完善新的三向合并编辑器,并在本版本中默认启用它。可以通过单击“源代码管理”视图中的冲突文件来打开合并编辑器。
亮点包括接受来自一侧的所有更改的新命令、改进的上下文菜单、增强的差异颜色以及对冲突更改与非冲突更改的更多强调。
我们还开始探索替代差异算法,以提高合并冲突的精度。如果您遇到次优的更改突出显示或对齐,我们希望在我们的 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.
这使您可以将 VS Code 用作 Git 的合并工具,例如,如果您在 .gitconfig 中配置了它
[merge]
tool = code
[mergetool "code"]
cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED
搜索文件装饰
“搜索”视图中的搜索结果现在具有文件装饰和右侧的颜色,以表达文件的存在问题和源代码管理信息。这类似于 “文件资源管理器”中已经显示的的文件装饰。

多选搜索
“搜索”视图现在也支持多选。对选择中的一个结果执行的任何操作(例如,关闭或替换)也会对其他选定的项目执行。
树形查找控件
诸如“文件资源管理器”之类的树形视图现在支持“查找”控件。您可以按 ⌥⌘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"
}
通过“新建文件”进行任意文件创建
文件 > 新建文件...(或“欢迎”页面上的 新建文件... 链接)体验已得到改进,以允许进行任意文件创建。现在,您可以在快速输入框中键入文件名以在磁盘上创建该文件。

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

注意:在 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 集成脚本,并且跨平台工作,并且在连接到远程窗口时工作,这意味着您可以将其同步到点文件中,它应该可以正常工作。
# Manual install on bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"
您可以在 终端 Shell 集成 中了解有关如何为其他 Shell 安装 Shell 集成的更多信息。
更多 Shell 集成配置选项
新的设置 terminal.integrated.shellIntegration.decorationsEnabled 允许您在 gutter、overviewRuler 或两者都不显示命令装饰。为了方便访问,您可以单击装饰(选择 切换可见性 以显示选项下拉菜单)来修改此设置。

您还可以从下拉菜单配置默认、成功或错误图标。
默认颜色和图标选项卡设置
默认的图标和终端选项卡颜色可以使用 terminal.integrated.tabs.defaultIcon 和 terminal.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。通常,这意味着它们都将添加到相同的提示符中,而不是单独执行它们。

其他 shell 集成改进
以下是 shell 集成的一些较小的改进
-
命令导航具有改进的视觉反馈,会短暂显示“焦点边框”,然后在 gutter 中保留一个持久的矩形以帮助突出显示缓冲区中的位置。

-
新的
workbench.action.terminal.copyLastCommand命令可用,允许键绑定复制上一个命令的输出(Ctrl/Cmd+Shift+Up、Ctrl/Cmd+C、Escape、Ctrl/Cmd+End 的快捷方式)。 -
Bash shell 集成
- 支持更多
$PROMPT_COMMAND格式。 - 如果已经在使用
bash-preexec辅助工具,shell 集成应该可以更好地工作。
- 支持更多
渲染改进
在启用 GPU 加速时,对终端渲染进行了一些改进
-
半圆形 Powerline 符号现在是自定义渲染的。与先前版本中的箭头符号类似,这些符号应该与相邻单元格无缝融合,并且即使使用了行高,也会扩展到单元格的高度。

-
圆角盒绘制字符 (
╭、╮、╰、╯) 现在使用更平滑的曲线。
-
改进了背景颜色更改时字形的裁剪,这通常在
npm输出警告时可以看到。
-
与上述裁剪问题类似,存在一个问题,即某些字形的反锯齿会重叠其他字符并降低视觉效果。使用上面的背景示例可以最容易地说明此问题。
Work中的k的一个像素也可能从另一个方向逃脱单元格的边界。由于该像素几乎与背景颜色相同,因此它将完全从字形中删除。
源代码管理
操作按钮改进
我们根据用户反馈继续完善源代码管理操作按钮
- 仅当高度确定本地分支要么领先于远程跟踪分支,要么落后于远程跟踪分支时,才会显示“同步更改”操作按钮。
- “提交”操作按钮仅根据已更改的资源列表以及智能提交设置启用
git.enableSmartCommitgit.suggestSmartCommitgit.smartCommitChanges
- “提交”操作按钮图标会根据分支保护设置进行更新
git.branchProtectiongit.branchProtectionPrompt
改进了 rebase 冲突解决
在本里程碑中,我们解决了一些在解决合并冲突时 rebase 流程中的较小问题。用户现在应该能够在解决所有合并冲突后使用源代码管理视图中的“提交”按钮继续 rebase 操作。
提交输入字段拼写检查
在本里程碑中,我们确认所有必要的扩展 API 都可用于支持提交输入字段中的拼写检查。我们联系了两个流行的拼写检查扩展的作者,并提交了拉取请求,说明如何更新他们的扩展以提供提交描述文本的拼写检查。
调试
JavaScript 调试
当您创建用于调试 JavaScript/TypeScript 程序时,您可以设置 "console": "integratedTerminal" 以在终端中运行该程序(而不是直接生成进程)。几个月前,我们注意到 launch.json 配置中的 "args" 被部分转义到 shell 中,但并非完全转义。这意味着尝试将参数传递给您的程序可能会意外地触发 shell 中的特殊行为。我们清理了它,然后意识到包含对 shell 具有特殊含义的字符的参数是一个有用的操作,并且一些用户依赖于此行为。
我们讨论了正确的修复方法,并决定此行为应该选择加入,并且需要对 调试适配器协议 (DAP) 进行更改。我们对 DAP 进行了此更改,并在 VS Code 和 js-debug 中实现了它,并且其他调试适配器也应该很快跟进。
以下是如何在 node 启动配置中使用新行为
{
"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"]
}
调试会话选择器
在调试时,您现在可以在命令面板中运行“调试:选择调试会话”。这将显示一个包含您的活动调试会话的选择器,您可以使用它来搜索和筛选您的各个调试会话。选择器中的每个项目的描述将显示生成它的会话(如果适用)。
选择选择器中的项目将使 Call Stack 视图中的调试会话获得焦点。调试操作(例如,暂停、步进、重新启动、停止)将在聚焦的调试会话上执行。选择会话还会显示会话的调试控制台。
任务
“运行任务”命令的筛选支持
“任务:运行任务” (workbench.action.tasks.runTask) 操作支持按任务名称和类型进行筛选,从而提供更简洁和可配置的方式来选择和执行任务。
例如
{
"key": "ctrl+h",
"command": "workbench.action.tasks.runTask",
"args": {
"task": "VS Code - Build",
"type": "npm"
}
}
改进了自动任务流程
Trusted Workspace 功能允许 VS Code 简化运行自动任务的流程。默认情况下,如果文件夹受信任,自动任务将运行,否则您将每隔一个文件夹收到一次提示。可以使用 task.allowAutomaticTasks 设置(默认值为 auto)配置此行为,以始终(on)或从不(off)在运行自动任务之前提示。
语言
格式化 JSON 时保留换行符
现在,您可以在格式化 JSON 文档中的一行时保留初始行位置。例如,包含在一行上值的数组在格式化后仍将保持这些值在同一行上。JSON 文件中的额外换行符也会被保留。要启用此功能,请在设置编辑器中设置选项“JSON > 格式:保留行”。
Notebook
转到最近失败的单元格
如果您最近运行的单元格失败了,现在有一个按钮将跳转到该单元格。您还可以运行“笔记本:转到最近失败的单元格”以执行相同的操作。
当您运行一组单元格并想知道哪个单元格失败并停止了组执行时,这很有用。
笔记本 Markdown 预览附件渲染
现在可以在 Jupyter 笔记本中渲染嵌入的 base64 图像。
粘贴到 Jupyter 笔记本并引用为  的图像现在将在 VS Code 笔记本中按预期渲染。
以下 Markdown 源代码

将渲染为

共享笔记本链接
“共享”子菜单中的“复制 vscode.dev 链接”命令现在支持笔记本链接。
Web 版 VS Code
设置显示语言
现在,您可以使用扩展视图中语言包扩展上提供的“设置显示语言”按钮设置浏览器的显示语言。

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

对扩展的贡献
Python
入门体验
Python 扩展教程现在可以顺利地过渡到安装 Python(如果需要)并选择它。如果未安装 Python,则会打开 Microsoft Store 或适当的教程磁贴,并且用户可以自动运行显示的说明。仅当用户操作需要解释器时,才会显示与解释器相关的任何提示,而不是在启动时显示。此外,UI 提示已得到改进,可以更精确地说明错误和建议的更改。

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

自动调试配置
Python 扩展现在支持自动调试配置,它会分析当前项目并为您提供一个无需额外修改的调试配置。
该扩展能够识别 Django、Flask 和 FastAPI 项目,以及简单的 Python 文件。
您可以了解更多关于 自动调试配置 和 一些最近的改进 的信息。
实验性扩展:WWBD
有一个名为 WWBD 的新的实验性 Python 扩展,它充当 Python 环境工作流想法的沙盒。目前,有一个 创建环境 命令用于虚拟环境,以查看单个命令是否可以帮助用户设置新的虚拟环境(有关完整详细信息和其他扩展功能,请参阅 WWBD 扩展页面)。您可以在项目仓库的 想法分类 中阅读正在考虑的其他想法,包括 conda 支持。
Jupyter
将绘图图像复制到剪贴板
现在可以在 Jupyter 扩展中将单元格输出中的绘图复制到剪贴板。请确保您选择了正确的呈现方式,因为目前仅支持 PNG 输出。

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

Web 扩展
以下功能已移植到 Jupyter 扩展的网络版本
- 绘图查看器
- 数据框查看器
如果您想体验此功能,请在本地机器上启动 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 拉取请求和议题
GitHub 拉取请求和问题扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括
- 有一个新按钮,可以仅显示自上次查看以来拉取请求的更改。
- “源控制”视图中的新 提交并创建拉取请求 操作可让您执行 Git 提交,并一步到位进入 创建 PR 视图。
- 可以使用
githubPullRequests.pullRequestDescription设置来配置 PR 描述的源文本。
查看 扩展 0.48.0 的变更日志,以查看其他亮点。
远程开发
远程开发扩展的工作仍在继续,它允许您使用容器、远程机器或 适用于 Linux 的 Windows 子系统 (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 中的 设置配置文件,这是社区最受欢迎的要求之一。此功能在 内部版本 中通过 workbench.experimental.settingsProfiles.enabled 设置提供预览。试用它,并通过在 VS Code 仓库 中创建问题或在 问题 #116740 中发表评论来告诉我们您的反馈。
在本里程碑中,我们还为 VS Code for the Web 添加了对 设置配置文件 的支持。您可以使用 insiders.vscode.dev 和相同的 workbench.experimental.settingsProfiles.enabled 设置进行试用。
主题:Light Pink
任务重新连接
通过启用 task.experimental.reconnection,可以在窗口重新加载时将监视任务重新连接起来,从而在扩展更改或 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。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤
- 查找您要尝试的提议并将其名称添加到
package.json#enabledApiProposals。 - 使用最新的vscode-dts并运行
vscode-dts dev。它会将相应的d.ts文件下载到您的工作区中。 - 您现在可以根据该提议进行编程。
您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
Webview 上下文菜单
新的 Webview 上下文菜单提案使得高级 webview 能够轻松自定义用户在 webview 内部右键单击时显示的上文菜单。这个新的贡献点使用 VS Code 的正常上下文菜单,因此自定义菜单可以很好地融入到编辑器的其余部分。Webviews 还可以为 webview 的不同部分显示自定义上下文菜单。
要试用这个新的 API,你需要启用 contribWebviewContext 提案。
"enabledApiProposals": [
"contribWebviewContext"
]
要向你的 webview 添加新的上下文菜单项,请在新的 webview/context 部分下的 menus 中添加一个新的条目。每个贡献都需要一个 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 数据属性(或在 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> 内右键单击,他们将看到

视图大小
视图大小提案允许扩展程序为其贡献的视图提供权重
"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 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 的 sandbox 取得了实质性进展。我们计划在八月份为 Insiders 启用 sandbox,并最终使其成为 Stable VS Code 的默认设置。
对于好奇的人来说,在设置中配置 "window.experimental.useSandbox": true 将启用 sandbox 模式。希望你不会注意到任何变化,但如果你发现问题,请向我们报告。
Markdown 语言服务器
在这个迭代中,我们将 VS Code 编写 Markdown 的许多工具提取到一个 库 和 语言服务器 中。这包括我们用于路径补全、文档大纲和诊断的工具。
VS Code 内置的 Markdown 扩展已经切换到使用这个新的语言服务器,虽然希望你不会注意到任何行为上的差异。这种切换应该有助于提高性能,因为它将 Markdown 工具移动到自己的进程中。迁移到语言服务器也帮助我们提高了实验性 Markdown 链接诊断的性能。
我们希望其他工具和编辑器也能从这些新的包中受益,甚至可以为它们做出贡献。 让我们一起为所有人构建更好的 Markdown 工具! 如果你有兴趣,请查看相关项目
- Markdown 语言服务 — 一个提供用于处理 Markdown 工具的 TypeScript 库。
- Markdown 语言服务器 — 使用语言服务构建的 Markdown 语言服务器。
Debian 包依赖项
Debian 包依赖项现在由脚本生成,而不是硬编码。这关闭了一个 在 2016 年提交的问题,该问题导致某些机器上缺少依赖项导致程序在运行时崩溃。
文档和扩展
开发容器 CLI
更新了 开发容器命令行界面 (CLI) 主题,以获取 最新版本的 CLI。开发容器 CLI 允许你构建和运行开发容器,并且是 开发容器规范 的一个开源参考实现

Azure Developer CLI (azd)
Azure Developer CLI 及其配套的 VS Code 扩展 现在处于公共预览阶段。Azure Developer CLI (azd) 加快了你从本地开发环境到 Azure 的时间,它提供了对你的工作流程的关键阶段(代码、构建、部署、监控、重复)进行映射的开发者友好的命令。

Azure Developer CLI 使用 可扩展的模板,其中包含将应用程序在 Azure 上启动和运行所需的一切。这些模板包括最佳实践、应用程序代码和可重用的基础设施即代码资产。更重要的是,它们涵盖了远不止“Hello World!” 的端到端场景。
使用 Azure Developer CLI,你可以初始化、配置和部署应用程序,或者更好的是,使用 'azd up' 一步完成!有关受支持的 azd 命令列表,请参阅 Developer CLI 参考。
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对我们问题跟踪的贡献
拉取请求
对 vscode 的贡献
- @0evan (Evan Spensley):区分测试装饰标签 PR #155433
- @amanasifkhalid (Aman Khalid):关闭 #134566:添加了终端选项卡默认颜色/图标设置 PR #147463
- @angelozerr (Angelo):为 html 语言服务器贡献一个自定义语言。PR #146731
- @babakks (Babak K. Shandiz)
- 🎁 将“用代码片段包围”添加到快速修复菜单 PR #152718
- 🔨 修复 Markdown 诊断问题,文件名称中带有句点 PR #153206
- @Balastrong (Leonardo Montini):正确显示警告消息 PR #154266
- @CGNonofr (Loïc Mangeonjean):为 monaco 代码操作提供程序提供触发器和文档 PR #149937
- @eamodio (Eric Amodio):关闭 #54285 添加 webview/context 贡献 PR #154524
- @eltociear (Ikko Ashimine):修复 languageDetectionWorkerServiceImpl.ts 中的拼写错误 PR #155923
- @fadeevab (Alexander Fadeev):为升级的语法添加 Makefile 测试:逗号、注释、shebang PR #154625
- @FantasqueX (FantasqueX):替换已弃用的 canceled 为 Cancellation Error。PR #156094
- @ferdnyc (Frank Dana)
- RPM:使 /usr/bin/code 由包拥有 PR #142907
- 删除构建 .rpm 包时的 fakeroot 包装器 PR #153249
- @gjsjohnmurray (John Murray):尝试防止以管理员身份运行时更新用户类型的 Windows 安装 (#_148428) PR #155631
- @jbicker (Jan Bicker):修复 SignatureInformation.activeParameter 注释错误 PR #155279
- @jeanp413 (Jean Pierre):提案 TerminalExitStatus.reason PR #152833
- @jlelong (Jerome Lelong):为以字母开头或结尾的括号对分隔符添加单词边界 PR #151204
- @joscol (Joshua Cole):允许 CommentNode 更改 body 文本并在同一时间进入编辑模式 PR #155767
- @jzyrobert (Robert Jin)
- 在资源管理器视图中添加展开全部按钮 PR #153614
- 编辑 showFoldingControls 以具有 never 设置 PR #153764
- @liby (Bryan Lee):为 TypeScript 添加角括号匹配和着色支持 PR #151705
- @mingwiki:修复 Socks5 代理正则表达式检查警告 PR #144954
- @MonadChains (MonadChains):添加复制上次命令输出的命令 (#_152097) PR #153235
- @nirabhromakhal (nirabhromakhal):修复状态栏溢出而不影响通知提示的问题 PR #155649
- @PieterBranderhorst:使隐藏折叠范围独立于范围提供程序,添加手动折… PR #139779
- @pingren (Ping)
- 修复 #114461 PR #151824
- 修复换行标签时标签位置的问题 PR #156116
- @pwxn (Paul Landers):添加将编辑器滚动到顶部/底部的命令 PR #155861
- @qingpeng9802 (Qingpeng Li):移除 es5 类兼容性 PR #153853
- @r3m0t (Tomer Chachamu)
- 修复展开时未显示测试错误的错误 PR #153994
- 更新工作区文件夹更新时的面包屑 PR #154616
- @SamirPS (SamirAk):代码扫描:弃用 CodeQL Action v1 PR #156271
- @ssigwart (Stephen Sigwart)
- 修复编辑器区域中的终端未重新加载的问题 PR #151852
- 修复建议小部件卡顿的问题 PR #152011
- 添加搜索编辑器文件过滤器的键盘快捷键 PR #153954
- 检测带有空格的终端链接,然后是行:列 PR #153957
- 修复显示 webview 后菜单快捷键不起作用的问题 PR #154648
- @SvanT (Svante Boberg):添加缺失的释放 PR #155976
- @yiliang114 (易良):修复:错别字 PR #155310
对 vscode-generator-code 的贡献
- @hawkticehurst (Hawk Ticehurst)
- @MatejKastak:chore:统一生成的 package.json 中的缩进 PR #357
- @nhedger (Nicolas Hedger):添加 pnpm 作为包管理器 PR #339
对 vscode-js-debug 的贡献
- @Balastrong (Leonardo Montini):双重检查本机 tostring 是否为 [object *] PR #1339
对 vscode-json-languageservice 的贡献
- @bytemain (Artin):feat:支持数字常量 PR #141
- @octogonz (Pete Gonzalez):当使用 "//" 作为注释时,不要报告“重复的对象键” PR #144
对 monaco-editor 的贡献
- @alexander-zw (Alexander Wu):[webpack readme] 添加如何获取语言/功能 PR #3171
- @MasterOdin (Matthew Peveler):移除 mysql 的重复测试用例 PR #3138
- @tonilastre (Toni):添加查询语言 Cypher 的配置和 tokenizer PR #3102