2022年7月(1.70版)
下载。Windows:用户 系统 ARM| Mac。Universal 64 bit Arm64| Linux:deb rpm tarball ARM snap
欢迎来到Visual Studio Code的2022年7月版。这个版本有许多更新,我们希望你会喜欢,其中一些关键的亮点包括:
- 标题栏定制- 隐藏/显示菜单栏、命令中心或布局控制。
- 折叠选择- 在编辑器中创建你自己的折叠区域。
- 搜索多选- 选择然后对多个搜索结果采取行动。
- 树状视图搜索和过滤--在树状视图中查找和过滤,如查找浏览器。
- 终端改进--默认打开Shell集成,扩展PowerShell键绑定。
- 命令行选项 -- 合并-- 使用三向合并编辑器作为你的默认合并工具。
- 笔记本。转到最近失败的单元- 直接跳到笔记本错误处。
- Python入门体验- 在VS Code中快速安装和配置Python。
- 粘性滚动预览- 新的滚动UI显示当前的源代码范围。
- 开发容器 CLI 专题- 了解更新的开发容器 CLI。
工作台
更容易定制标题栏
对于那些使用自定义标题栏(Windows、macOS和网络上的默认值)的人来说,你可能已经注意到,我们正在为标题栏引入更多的互动内容。虽然已经有设置可以单独隐藏这些元素,但你现在可以右击标题栏来访问一个上下文菜单,以切换菜单栏(在macOS桌面上不显示)、命令中心和布局控制。

对于期待系统上下文菜单的Windows用户,仍然可以通过右击窗口左上角的VS Code图标或按Alt+Space 来触发该菜单。鼠标的位置被用来决定用Alt+Space 触发时的行为,所以如果自定义菜单位于标题栏的顶部,它就会出现。

对于Linux用户,由于问题#156397,标题栏中的空位不会打开上下文菜单。你必须右键点击你想隐藏的标题栏中的一个项目。
改进了菜单栏的折叠
随着命令中心的增加,我们尝试将菜单栏缩小为汉堡包菜单以腾出空间。在听取了用户的反馈后,我们改回了旧的菜单栏折叠行为,直到大部分的菜单被折叠,然后才切换到汉堡包菜单。

无障碍的macOS标题栏缩放
同样作为改善命令中心体验的一部分,当交互式组件出现在macOS的标题栏中时,标题栏现在将与UI的其他部分一起缩放,以提高可访问性。

折叠选择
命令 "从选区创建手动折叠范围"(⌘K ⌘,(Windows, LinuxCtrl+K Ctrl+,))从当前选定的行中创建一个折叠范围,并将其折叠起来。这个范围被称为手动折叠范围,它位于折叠提供者计算的范围之上。
手动折叠范围可以通过命令Remove Manual Folding Ranges(⌘K ⌘.(Windows, LinuxCtrl+K Ctrl+.))。

手动折叠范围在没有编程语言支持折叠的情况下特别有用。
保留折叠的范围
VS Code现在可以保留折叠的范围,即使折叠的范围不再是折叠提供者计算的范围的一部分。一个典型的例子是,当用户注释了文件,开始了一个字符串字面,或者产生了一个语法错误,使得无法创建所有的范围。这种折叠的范围成为 "恢复的 "范围。一旦折叠提供者在相同的位置返回了范围,或者通过使用删除手动折叠范围的命令,它们就会被删除。

隐藏折叠控件
现在可以用设置"editor.showFoldingControls": "never" 来隐藏地沟里的折叠控件。折叠范围仍然可以使用折叠命令和快捷键来展开和折叠。
三向合并编辑器的改进
我们继续完善新的三向合并编辑器,并在这个版本中默认启用它。合并编辑器可以通过点击源控制视图中的冲突文件来打开。
亮点包括接受来自一方的所有修改的新命令,改进的上下文菜单,增强的差异颜色,以及更加强调冲突与非冲突的修改。
我们也开始探索替代性的差异算法,以提高合并冲突的精确性。如果你在diff或合并编辑器中遇到不理想的修改高亮或对齐,我们希望在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-insiders
[mergetool "code-insiders"]
cmd = code-insiders --wait --merge $REMOTE $LOCAL $BASE $MERGED
搜索文件的装饰
搜索视图中的搜索结果现在具有文件装饰和右边的颜色来表达文件的问题和源控制信息。这与文件资源管理器中已经显示的文件装饰相似。

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

树形查找控制
树状视图,如文件资源管理器,现在支持查找控件。你可以在树里面按⌘F(Windows,LinuxCtrl+F)来弹出查找控件。你可以使用查找控件来突出显示匹配的元素,或者切换过滤按钮来隐藏所有不匹配搜索词的元素。

**注意:**如果你习惯于在文件资源管理器有焦点时调用⌘F(Windows,LinuxCtrl+F)在编辑器中打开查找控件,你可以相应地配置你的键盘绑定。
{
"key": "cmd+f", // "ctrl+f" on Windows/Linux
"command": "-list.find",
"when": "listFocus && listSupportsFind"
}
通过新建文件任意创建文件
文件>新建文件...(或入门页面上的新建文件...链接)的体验已经得到改进,允许任意创建文件。你现在可以在快速输入框中输入一个文件名,在磁盘上创建文件。

终端
默认启用Shell集成
Shell集成的自动注入在上个版本中被移出预览,现在默认启用。对于支持的shell设置(大多数bash/zsh/pwsh配置),它应该都只是工作,没有任何变化,你应该看到命令的装饰。

如果shell集成功能没有自动点亮,你需要设置手动安装,在这个版本中已经简化。
当terminal.integrated.shellIntegration.enabled 设置为true ,自动注入功能就会启用,将此添加到你的settings.json 文件中以禁用该功能:
"terminal.integrated.shellIntegration.enabled": "false"
这将只禁用VS Code的外壳集成注入。即使在禁用的情况下,如果你的设置中启用了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 可以让你在gutter ,overviewRuler ,或者两者都不显示命令装饰。为了方便使用,当你点击一个装饰时,你可以通过上下文菜单中的配置命令装饰来修改这个设置(选择切换可见性来显示选项下拉)。

你也可以从下拉菜单中配置默认图标、成功图标或错误图标。
默认颜色和图标标签设置
默认的图标和终端标签颜色可以使用terminal.integrated.tabs.defaultIcon 和terminal.integrated.tabs.defaultColor 来设置每个文件夹。
扩展的PowerShell键盘绑定
有额外的PowerShell按键绑定,比如Ctrl+Space,这要归功于shell的整合。由于缺乏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集成的较小改进:
-
命令导航改进了视觉反馈,短暂地显示 "焦点边界",然后在沟槽中保持一个持久的矩形,以帮助突出缓冲区中的位置。

-
新的
workbench.action.terminal.copyLastCommand,允许用一个键绑定来复制上一个命令的输出(Ctrl/Cmd+Shift+Up,Ctrl/Cmd+C,Escape,Ctrl/Cmd+End的快捷方式)。 -
Bash shell集成:
- 支持更多的
$PROMPT_COMMAND格式。 - 当已经使用帮助器时,Shell集成应该工作得更好。
bash-preexechelper已经被使用的情况下,Shell集成应该工作得更好。
- 支持更多的
渲染的改进
在启用GPU加速时,对终端的渲染进行了一些改进。
-
半圆形的Powerline符号现在是自定义渲染的。就像前一版本中的箭头符号一样,这些符号应该与相邻的单元格无缝融合,即使在使用行高的情况下也能延伸到单元格的高度。

-
圆角框画字符 (
╭,╮,╰,╯) 现在使用更平滑的曲线。
-
改进了背景颜色变化时字形的剪切问题,这在
npm输出警告时经常出现。
-
与上面的剪切问题类似,有一个问题是一些字形的抗锯齿会与其他字符重叠并降低视觉效果。这个问题最容易用上面这样一个背景例子来说明。
kWork中的一个像素也可以从另一个方向逃出单元格的边界。这个像素根本不会再出现在字形中,因为它因与背景颜色几乎相同而被删除。
来源控制
动作按钮的改进
我们根据用户的反馈继续打磨源控制动作按钮:
- 只有在高度确定本地分支领先或落后于远程跟踪分支的情况下,才会显示同步更改的动作按钮。
- 在考虑智能提交设置的情况下,提交行动按钮只根据更改的资源列表启用。
git.enableSmartCommitgit.suggestSmartCommitgit.smartCommitChanges
- 提交行动按钮的图标会根据分支保护设置进行更新。
git.branchProtectiongit.branchProtectionPrompt
改进的重定位冲突解决
在这个里程碑中,我们解决了在解决合并冲突时rebase流程中的一些小问题。用户现在应该能够在解决所有合并冲突后,使用源码控制视图中的提交按钮继续进行重构操作。
提交输入字段的拼写检查
在这个里程碑中,我们确认所有必要的扩展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"]
}
调试会话的挑选器
调试时,你现在可以运行Debug。在命令调板中选择调试会话。这将显示一个带有你的活动调试会话的选择器,你可以用它来搜索和过滤你的个别调试会话。每个选取器项目的描述将显示催生它的会话(如果适用的话)。
在选取器中选择一个项目将在调用堆栈视图中聚焦该调试会话。调试动作(例如,暂停、步骤、重启、停止)将在重点调试会话上执行。选择一个会话也会显示该会话的Debug Console。

任务
对运行任务命令的过滤支持
任务:运行任务(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 > Format:保留行在设置编辑器中。
笔记本
转到最近失败的单元
如果你最近运行的单元格失败了,现在有一个按钮可以跳到该单元格。你也可以运行笔记本。转到最近失败的单元,执行同样的操作。
当你运行一组单元并想知道哪个单元失败并停止了该组的执行时,这很有用。

笔记本Markdown预览附件的渲染
现在可以在Jupyter笔记本中渲染嵌入式base64图片。
粘贴到Jupyter笔记本中并通过 引用的图片现在将在VS Code笔记本中按预期呈现。
以下是Markdown源代码:

将被呈现为:

分享笔记本链接
分享子菜单中的复制 vscode.dev 链接命令现在支持笔记本链接。
VS Code for the Web
设置显示语言
你现在可以通过在扩展视图中的语言包扩展上的设置显示语言按钮来设置浏览器的显示语言:

设置后,您可以通过使用当前设置的语言包扩展上的清除显示语言按钮来清除显示语言:

对扩展的贡献
Python
上手体验
Python扩展演练现在可以让用户顺利过渡到安装Python(如果需要),并选择它。在未安装Python时,会打开Microsoft Store或适当的演练瓦片,用户可以自动运行显示的说明。任何与解释器有关的提示只有在用户操作需要解释器时才会显示,而不是在启动时。另外,UI提示也得到了改进,对错误和建议的修改更加精确。

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

自动调试配置
Python扩展现在支持自动调试配置,它分析了当前的项目并为你提供了不需要额外修改的调试配置。
该扩展可以识别Django、Flask和FastApi项目,以及简单的Python文件。

实验性扩展。WWBD
有一个新的实验性Python扩展名为WWBD,作为Python环境工作流程想法的沙盒。截至目前,有一个针对虚拟环境的Create Environment命令,看看一个命令是否可以帮助用户建立一个新的虚拟环境(完整的细节和其他扩展功能见WWBD扩展页)。你可以阅读项目库中的Ideas类别,了解正在考虑的其他想法,包括conda支持。
Jupyter
复制绘图图像到剪贴板
在Jupyter扩展中,现在可以将单元格输出中的绘图复制到剪贴板中。请确保你选择了正确的表现形式,因为目前只支持PNG输出。

一旦你设置了正确的表现形式,选择右上方的复制到剪贴板按钮。

网络扩展
以下功能被移植到Jupyter扩展的网络版中。
- 图形查看器
- 数据框架查看器
如果你想试验一下这些功能,可以在你的本地机器上用......启动Jupyter。
jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net
然后用Jupyter命令连接到它**。在vscode.dev内指定Jupyter服务器进行连接**。
更多信息(和评论),请看这个讨论项目。
交互式窗口恢复
交互式窗口会话现在可以通过打开设置interactiveWindow.restore ,在VS Code窗口重新加载时进行恢复。

限制。原始内核状态在窗口重载时并不持久(更多信息见本讨论项目)。如果你使用的是远程Jupyter服务器,交互式窗口在重载时将会连接到之前的内核会话。
从.env文件加载环境变量
对从.env 文件加载环境变量进行了一些修正,包括检测对.env 文件的修改。Python 内核现在将从设置python.envFile 中定义的文件中加载环境变量。
GitHub 拉动请求和问题
GitHub 拉动请求和问题扩展有了更多进展,它允许你处理、创建和管理拉动请求和问题。这个版本的亮点包括。
- 有一个新的按钮,只显示拉动请求自查看者最后一次审查以来的变化。
- 在源码控制视图中新的提交和创建拉动请求动作让你可以在一个步骤中完成Git提交并转到创建PR视图。
githubPullRequests.pullRequestDescription设置可用于配置PR描述的源文本。
远程开发
远程开发扩展的工作仍在继续,它允许你使用容器、远程机器或Windows Subsystem for Linux(WSL)作为一个全功能的开发环境。
你可以在远程开发发布说明中了解新的扩展功能和错误修复。
预览功能
编辑器粘性滚动
现在可以显示用户界面,显示用户在滚动过程中所处的范围。这个 "粘性滚动 "用户界面将显示编辑器顶部所处的类/界面/命名空间/函数/方法/构架,帮助你了解文档中的位置。通过editor.experimental.stickyScroll.enabled 设置启用粘性滚动。

支持TypeScript 4.8
这次更新包括对即将发布的TypeScript 4.8的支持。请参阅TypeScript 4.8迭代计划,了解更多关于TypeScript团队目前正在进行的工作的细节。
要开始使用TypeScript 4.8的夜间构建,请安装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中的Code Actions提供更好的体验。代码操作包括重构、源码操作和快速修复。
新的实验性的Code Actions控件可以从上下文菜单中选择 Refactor或Source Action,从lighbulb中打开,或通过Quick Fix打开。通过editor.experimental.useCustomCodeActionMenu 设置进行尝试。通过在VS代码库中创建问题或在问题#152913中发表评论,让我们了解任何反馈。
代码动作的重构预览也可以从新的代码动作控件中获得。将鼠标悬停在已启用的项目上,查看如何预览。自定义键绑定支持选择代码动作,以及预览选择。

在这个里程碑中,我们还增加了对代码动作的自定义键绑定的支持,其中包括快速修复(⌘.(Windows, LinuxCtrl+.))。你可以试试,把下面的片段加上你想要的键盘快捷键,keybindings.json 。
[ { "key": "ctrl+k", "when": "CodeActionMenuVisible", "command": "focusPreviousCodeAction" }, { "key": "ctrl+j", "when": "CodeActionMenuVisible", "command": "focusNextCodeAction" }]
跨越VS代码的网络和桌面的编辑会话
编辑会话的工作仍在继续,当你继续在VS Code for the Web或桌面的版本库上工作时,你可以带着你未提交的修改。一些亮点包括:
- 在关闭编辑会话功能时,你现在可以从云中删除所有存储的编辑会话。
- 现在支持用微软认证登录。
- 如果你在定位你的编辑会话时遇到困难,你可以用编辑会话查看你的所有编辑会话**。显示编辑**会话命令。
要试用编辑会话,请在您的设置中设置workbench.experimental.editSessions.enabled ,并使用编辑会话。存储当前的编辑会话命令,根据提示用 GitHub 或微软认证登录。然后使用 "编辑会话"。恢复最新的编辑会话命令,在另一台机器上的存储库或VS Code实例中,将所有修改的文件的工作内容恢复到你的工作空间。你可以在任何时候使用 "编辑会话 "签出**。签出**命令。
随着我们对编辑会话体验的不断迭代,请尝试它,并通过问题#141293的评论与我们分享您的反馈。
扩展编写
用于 "when "条款的 "not in "操作符
有一个操作符已经存在于when子句中,即in ,它允许在另一个具有数组或对象类型值的上下文键中动态查找一个上下文键的值。我们添加了一个新的操作符not in ,它否定了这一点。详情请参见when 条款contexts文档。
htmlLanguageParticipants贡献点
一个新的贡献点htmlLanguageParticipants ,允许类HTML语言声明它们要继承所有的HTML语言服务器功能,如代码补全、悬停和轮廓。这对于不想实现完整语言服务器的编程语言扩展是很有用的。
一个例子是内置的handlebars 扩展,现在它的package.json 中加入了自己的htmlLanguageParticipants 。
"contributes": {
"htmlLanguageParticipants": [
{
"languageId": "handlebars"
}
]
}
Quarkus扩展已经采用了这个贡献点。它通过对嵌入式QuteHTML模板语言的额外建议来丰富HTML的功能。

落入编辑器的API
文本编辑器投放API让扩展处理文件或其他内容投放到文本编辑器。这些投放事件可以来自VS Code内部,比如从VS Code的资源管理器中拖动一个文件到文本编辑器中,也可以从你的操作系统中投放一个文件到VS Code中产生。

要把文件拖入编辑器,用户可以在拖动时按住kbsytyle(Shift) ,然后把文件拖到文件的特定位置。在这一点上,你的扩展可以选择如何处理掉的数据。
请查看 "放入编辑器 "扩展示例,了解该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中添加一个新的上下文菜单项,在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 数据属性(或在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'- 这覆盖了来自父元素的 。webviewSectionmouseCount == 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笔记本渲染器
我们内置的笔记本渲染器现在暴露了一个实验性的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月为内部人员启用沙盒,并最终使其成为稳定版VS代码的默认选项。
对于那些好奇的人来说,在设置中配置"window.experimental.useSandbox": true ,就可以启用沙盒模式。希望你不会注意到任何变化,但如果你发现问题,请向我们报告。
Markdown语言服务器
在这次迭代中,我们将VS Code的大部分工具提取出来,用于编写Markdown的库和语言服务器。这包括我们的路径完成、文档大纲和诊断的工具。
VS Code 内置的 Markdown 扩展已经切换到使用这个新的语言服务器,尽管希望你不会注意到行为上的任何不同。不过这种转换应该有助于提高性能,因为它把Markdown工具移到了自己的进程中。转移到一个语言服务器也帮助我们改善了我们实验性的Markdown链接诊断的性能。
我们希望其他工具和编辑器也能从这些新的软件包中受益,甚至为它们做出贡献。我们可以一起为每个人建立更好的Markdown工具!如果你有兴趣,请查看相关项目:
- Markdown语言服务- 一个TypeScript库,提供了处理Markdown的工具。
- Markdown 语言服务器- 一个使用语言服务构建的 Markdown 语言服务器。
蝶变软件包的依赖性
蝶变软件包的依赖性现在由一个脚本生成,而不是硬编码。这解决了2016年提出的一个问题,即缺失的依赖关系会导致程序在某些机器上运行时崩溃。
文档和扩展
开发容器CLI
开发容器命令行界面(CLI)主题已更新为最新版本的CLI。开发容器CLI可以让你构建和运行开发容器,是开发容器规范的一个开源参考实现

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

Azure开发者CLI使用可扩展的模板,包括在Azure中启动和运行应用程序所需的一切。这些模板包括最佳实践、应用程序代码和可重复使用的基础设施作为代码资产。不仅如此,它们还涵盖了端到端的场景,远远超过了 "你好,世界!"。
通过Azure Developer CLI,你可以初始化、配置和部署一个应用程序,或者更好的是,使用'azd up',一步到位!关于支持的azd 命令的列表,请参见开发者CLI参考。
谢谢你
最后,但肯定不是最不重要的,我们要向 谢谢你向VS代码的贡献者致敬。