2022 年 7 月 (版本 1.70)
版本 1.70.1 更新:此更新修复了这些问题。
版本 1.70.2 更新:此更新修复了这些问题。
版本 1.70.3 更新:此更新仅适用于 Windows 7 用户,并且是支持 Windows 7 的最后一个版本。
下载:Windows:x64 Arm64 | Mac:通用 Intel Apple 芯片 | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2022 年 7 月版。此版本中包含许多你可能会喜欢的新更新,其中一些主要亮点包括:
- 标题栏自定义 - 隐藏/显示菜单栏、命令中心或布局控制。
- 折叠选区 - 在编辑器中创建自己的折叠区域。
- 搜索多选 - 选择多个搜索结果并对其进行操作。
- 树状视图搜索和过滤 - 在树状视图(例如查找资源管理器)中进行查找和过滤。
- 终端改进 - 默认启用 Shell 集成,扩展了 PowerShell 键绑定。
- 命令行选项 --merge - 使用三向合并编辑器作为你的默认合并工具。
- 笔记本:转到最近失败的单元格 - 直接跳转到笔记本错误。
- Python 入门体验 - 在 VS Code 中快速安装和配置 Python。
- 粘滞滚动预览 - 新的滚动 UI 显示当前源代码作用域。
- Dev container CLI 主题 - 了解更新的开发容器 CLI。
如果你想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
观看发布会: 听 VS Code 团队讨论一些新功能。你可以在我们的 YouTube 频道上找到活动录像。
Insiders 版: 想尽快尝试新功能吗?你可以下载每日构建的Insiders 版本,并在最新更新可用时立即试用。
工作台
更轻松的标题栏自定义
对于使用自定义标题栏(Windows、macOS 和网页版中的默认设置)的用户,你可能已经注意到我们正在向标题栏引入更多交互式内容。虽然已经有单独隐藏这些元素的设置,但你现在可以右键单击标题栏来访问一个上下文菜单,该菜单可以切换菜单栏(在 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 问题跟踪器中!
命令行选项 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
搜索文件装饰
搜索视图中的搜索结果现在在右侧显示文件装饰和颜色,以表示文件的问题和源代码管理信息。这类似于文件资源管理器中已显示的文件装饰。
搜索多选
搜索视图现在也支持多选。你对选区中的一个结果执行的任何操作(例如,忽略或替换)也将对其他选中的项目执行。
树状查找控件
树状视图(例如文件资源管理器)现在支持查找控件。你可以在树状视图中按下 ⌥⌘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 集成脚本,并且跨平台工作,当连接到远程窗口时也有效,这意味着你可以在你的 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 键绑定
由于 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 集成的较小改进
-
命令导航的视觉反馈得到了改进,短暂显示“焦点边框”,然后在行号栏中保留一个持久的矩形,以帮助高亮缓冲区中的位置。
-
新命令
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.enableSmartCommit
git.suggestSmartCommit
git.smartCommitChanges
- 提交操作按钮图标根据分支保护设置进行更新
git.branchProtection
git.branchProtectionPrompt
改进的 rebase 冲突解决
在这个里程碑中,我们解决了 rebase 流程中解决合并冲突的一些较小问题。用户现在应该可以在解决所有合并冲突后,使用源代码管理视图中的提交按钮继续 rebase 操作。
提交输入字段拼写检查
在这个里程碑中,我们确认了所有必要的扩展 API 都已可用,以支持在提交输入字段中进行拼写检查。我们联系了两个流行的拼写检查扩展的作者,并提交了 pull request,演示了如何更新他们的扩展以提供提交描述文本的拼写检查。
调试
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"]
}
调试会话选择器
调试时,你现在可以在命令面板中运行调试:选择调试会话。这将显示一个带有你当前活动的调试会话的选择器,你可以用它来搜索和过滤你的各个调试会话。每个选择器项目的描述将显示生成它的会话(如果适用)。
在选择器中选择一个项目将使调用堆栈视图中的调试会话获得焦点。调试操作(例如,暂停、单步执行、重新启动、停止)将在获得焦点的调试会话上执行。选择一个会话还会显示该会话的调试控制台。
任务
运行任务命令的过滤支持
任务:运行任务 (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 笔记本中并通过 
引用的图像,现在将在 VS Code 笔记本中按预期渲染。
以下 Markdown 源代码
将渲染为
共享笔记本链接
共享子菜单中的复制 vscode.dev 链接命令现在支持笔记本链接。
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 扩展页面)。你可以在项目仓库中的Ideas 类别中阅读正在考虑的其他想法,包括 conda 支持。
Jupyter
将绘图图像复制到剪贴板
现在可以在 Jupyter 扩展中将单元格输出中的绘图复制到剪贴板。请确保选择了正确的呈现方式,因为目前仅支持 PNG 输出
设置正确的呈现类型后,选择右上角的复制到剪贴板按钮
网页扩展
以下功能已移植到 Jupyter 扩展的网页版本
- 绘图查看器
- 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 and Issues
GitHub Pull Requests and Issues 扩展取得了更多进展,该扩展允许你处理、创建和管理拉取请求和问题。此版本的亮点包括
- 新增了一个按钮,仅显示自查看者上次评审以来拉取请求的更改。
- 源代码管理视图中的新操作提交并创建拉取请求允许你一步完成 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=""粘滞滚动" 显示 TypeScript 文件的源代码作用域">
TypeScript 4.8 支持
此更新包含对即将发布的 TypeScript 4.8 的支持。有关 TypeScript 团队当前正在进行的工作的更多详细信息,请参阅TypeScript 4.8 迭代计划。
要开始使用 TypeScript 4.8 每夜构建版本,请安装TypeScript Nightly 扩展。
设置配置文件
在过去的几个月里,我们一直在努力支持 VS Code 中的设置配置文件,这是社区中最受欢迎的需求之一。此功能已在 Insiders 版本中通过 workbench.experimental.settingsProfiles.enabled
设置提供预览。试用一下,并通过在VS Code 仓库中创建问题或在问题 #116740 中评论来告知我们你的反馈。
在这个里程碑中,我们还在 VS Code 网页版中添加了对设置配置文件的支持。你可以使用 insiders.vscode.dev 和相同的 workbench.experimental.settingsProfiles.enabled
设置来试用它。
主题:Light Pink
任务重连
窗口重新加载时,可以通过启用 task.experimental.reconnection
重新连接到 watch 任务,这样在扩展更改或 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 网页版和桌面版之间的编辑会话
编辑会话的工作仍在继续,它允许你在 VS Code 网页版或桌面版中继续处理仓库时,携带未提交的更改。一些亮点包括
- 现在关闭编辑会话功能时,可以从云中删除所有存储的编辑会话。
- 现在支持使用 Microsoft 身份验证登录。
- 如果你找不到你的编辑会话,可以使用编辑会话:显示编辑会话命令查看所有编辑会话。
要试用编辑会话,请在设置中设置 workbench.experimental.editSessions.enabled
,然后使用编辑会话:存储当前编辑会话命令,并在提示时使用 GitHub 或 Microsoft 身份验证登录。然后在另一台机器或 VS Code 实例的仓库中使用编辑会话:恢复最新编辑会话命令,以将所有已修改文件的工作内容恢复到你的工作区。你可以随时使用编辑会话:注销命令注销编辑会话。
在我们继续迭代编辑会话体验时,请试用并在此问题 #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 中生成。
要将文件拖放到编辑器中,用户可以在拖动时按住 Shift
,然后将文件拖放到文件中的特定位置。此时,你的扩展可以选择如何处理拖放的数据。
查看拖放到编辑器扩展示例以了解此 API 的简单示例。
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以试用它们。一如既往,我们希望得到你的反馈。以下是试用提议 API 的步骤
- 找到你想要尝试的提议,并将其名称添加到
package.json#enabledApiProposals
。 - 使用最新的 vscode-dts 并运行
vscode-dts dev
。它会将相应的d.ts
文件下载到你的工作区。 - 你现在可以针对该提议进行编程了。
你不能发布使用提议 API 的扩展。下一版本中可能会有重大更改,我们绝不希望破坏现有的扩展。
Webview 上下文菜单
新的 webview 上下文菜单提议使得高级webviews 可以轻松自定义用户在 webview 中右键单击时显示的上下文菜单。这个新的贡献点使用了 VS Code 的常规上下文菜单,因此自定义菜单与编辑器的其余部分完美契合。Webview 还可以为 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
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>
内部右键单击,他们将看到
视图大小
视图大小提议允许扩展为其贡献的视图提供权重
"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 笔记本渲染器
我们内置的笔记本渲染器现在公开了一个实验性 API,该 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 工具!如果你感兴趣,请查看相关项目
- Markdown Language Service — 一个提供 Markdown 工作工具的 TypeScript 库。
- Markdown Language Server — 一个使用语言服务构建的 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
命令列表,请参阅开发者 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 同时更改正文文本并进入编辑模式 PR #155767
- @jzyrobert (Robert Jin)
- 在资源管理器视图中添加“全部展开”按钮 PR #153614
- 修改 showFoldingControls 以添加 never 设置 PR #153764
- @liby (Bryan Lee):在 TypeScript 中添加对尖括号匹配和着色的支持 PR #151705
- @mingwiki:修复 Socks5 Proxy Regex Checking Warning 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):添加缺失的 disposals PR #155976
- @yiliang114 (易良):修复:错别字 PR #155310
对 vscode-generator-code
的贡献
- @hawkticehurst (Hawk Ticehurst)
- @MatejKastak:杂项:统一生成的 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 添加配置和分词器 PR #3102