2021 年 5 月 (版本 1.57)
更新 1.57.1:此更新解决了这些问题。
工作区信任功能解决了 CVE-2021-34529。
下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2021 年 5 月版本。此版本中有许多更新,希望您会喜欢,其中一些主要亮点包括
- 工作区信任 - 浏览不熟悉源代码时,提供额外的安全防护,防止代码执行。
- 全新入门体验 - 帮助您快速设置和了解 VS Code。
- 远程仓库 - 无需在本地克隆仓库即可浏览和编辑代码。
- 终端标签页 - 标签页让您可以轻松创建、管理和分组多个打开的终端。
- Edge 浏览器调试 - 将 Microsoft Edge Developer Tools 直接集成到 VS Code 中。
- JSDoc @link 支持 - 在注释中添加 @link 标签,以便快速导航符号。
- 非代码文件 Go to Definition - 快速跳转到图像和样式表。
- Notebook API 定版 - 用于在 VS Code 中原生支持 Notebook 的 Notebook API。
- Build 2021 上的 VS Code 博客文章 - 回顾按需观看的 VS Code 特色会话。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
在 VS Code 团队的发布派对中观看此版本新功能的亮点。您可以在我们的 YouTube 频道上找到活动的录制。
Insiders:想尽快尝试新功能吗?您可以下载每晚的 Insiders 版本,并在最新更新发布后立即试用。
工作台
工作区信任
Visual Studio Code 非常重视安全性,希望帮助您无论代码来源或作者是谁,都能安全地浏览和编辑代码。工作区信任功能让您可以决定您的项目文件夹是否允许或限制自动代码执行。
注意:如有疑问,请将文件夹保留在限制模式下。您可以随时启用信任。
安全的代码浏览
公共仓库和文件共享中有如此多的源代码可用,这真是太棒了。无论是什么编码任务或问题,很可能在某个地方已经有了一个很好的解决方案。然而,使用开源代码和工具确实存在风险,您可能会面临恶意代码执行和漏洞利用的风险。
当工作区在限制模式下打开时,工作区信任通过阻止自动代码执行,在使用不熟悉的代码时提供了额外的安全层。
注意:如果您想禁用工作区信任功能,可以将
security.workspace.trust.enabled
设置为false
。仅当您确信自己了解正在使用的文件的来源和完整性时,才禁用工作区信任。
限制模式
当工作区信任对话框提示时,如果您选择不,我不信任作者,VS Code 将进入限制模式以防止代码执行。工作台将在顶部显示一个横幅,其中包含通过工作区信任编辑器管理您的文件夹以及前往工作区信任用户指南的了解更多链接。
您还会在状态栏中看到一个限制模式徽章。
限制模式尝试通过禁用或限制 VS Code 的多项功能(任务、调试、工作区设置和扩展)的操作来防止自动代码执行。
要查看限制模式下禁用的功能完整列表,您可以通过横幅中的管理链接或单击状态栏中的限制模式徽章来打开工作区信任编辑器。
信任工作区
如果您信任项目的作者和维护者,您可以信任本地计算机上的项目文件夹。例如,信任来自知名 GitHub 组织(如 github.com/microsoft 或 github.com/docker)的仓库通常是安全的。当您打开新文件夹时出现的初始工作区信任提示允许您信任该文件夹及其子文件夹。
您还可以调出工作区编辑器并快速切换文件夹的信任状态。有几种方法可以调出工作区编辑器对话框。
在限制模式下
- 限制模式横幅中的管理链接
- 限制模式状态栏项
您也可以随时使用
- 命令面板中的工作区: 管理工作区信任命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))
- 通过活动栏中管理齿轮图标访问管理工作区信任
选择文件夹
当您信任一个文件夹时,它会被添加到工作区信任编辑器中显示的受信任的文件夹和工作区列表中。
您可以手动从此列表中添加、编辑和删除文件夹,当前启用了信任的活动文件夹会以粗体显示。
您还可以选择信任父文件夹。这将把信任应用于父文件夹及其所有子文件夹。如果您在同一个文件夹下有很多包含受信任内容的文件夹,这会很有帮助。
启用扩展
如果您想使用限制模式,但您喜欢的扩展不支持工作区信任怎么办?如果某个扩展程序虽然有用且功能正常,但未得到积极维护且尚未声明其支持工作区信任,则可能会发生这种情况。为了处理这种情况,您可以使用 extensions.supportUntrustedWorkspaces
设置来覆盖扩展的信任状态。
注意:覆盖扩展的工作区信任支持时要小心。扩展作者可能有充分的理由在限制模式下禁用其扩展。
您可以在下方看到 Prettier 扩展的用户 settings.json
条目。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
您可以使用 supported
属性启用或禁用工作区信任支持。version
属性指定适用的确切扩展版本,如果您想为所有版本设置状态,可以删除 version 字段。
如果您想了解更多关于扩展作者如何评估和确定在限制模式下限制哪些功能的信息,您可以阅读工作区信任扩展指南。
设置
以下是可用的工作区信任设置
security.workspace.trust.enabled
- 启用工作区信任功能。默认为 true。security.workspace.trust.startupPrompt
- 是否在启动时显示工作区信任对话框。默认为每个不同的文件夹或工作区仅显示一次。security.workspace.trust.emptyWindow
- 是否始终信任空窗口(未打开文件夹)。默认为 true。security.workspace.trust.untrustedFiles
- 控制如何处理工作区中的零散文件。默认为提示。extensions.supportUntrustedWorkspaces
- 覆盖扩展工作区信任声明。值为 true 或 false。
要了解更多关于工作区信任的信息,您可以阅读工作区信任用户指南。
全新入门体验
在过去的几个迭代中,我们一直在努力改进 VS Code 的欢迎页,我们很高兴地宣布,从本次迭代开始,我们的新欢迎页(入门)默认对所有用户启用。在这种新体验中,VS Code 的核心和已安装的扩展都可以为欢迎页贡献“演练”,旨在帮助您开始使用 VS Code 本身或新的扩展。例如,Luna Paint 扩展就贡献了一个演练,其中包含帮助理解图像编辑器每个组件的指南。
此外,一旦您完成(或忽略)了所有演练,VS Code 会重新排列内容,将一键访问的最近工作区数量增加一倍。
设置
workbench.startupEditor
- 控制启动时显示的默认编辑器。新值gettingStarted
替换了旧的默认值welcome
。其他可用选项包括readme
、gettingStartedInEmptyWorkbench
、newUntitledFile
或none
。workbench.welcomePage.walkthroughs.openOnInstall
- 是否在安装扩展后自动打开扩展贡献的演练。
在新欢迎页完全取代现有欢迎页之前,新页面将被称为入门。
远程仓库
远程仓库扩展作为1.56 版本中的内置预览功能引入,现已正式发布,但它不再内置于 VS Code 中,因此您需要从 VS Code Marketplace 安装它。
快速回顾一下,远程仓库扩展允许您直接从 VS Code 内部即时浏览、搜索、编辑和提交到任何 GitHub 仓库,而无需在本地克隆或拥有仓库。
在本次迭代中,虽然我们主要专注于错误修复和完善扩展以供发布,但我们也添加了一些新功能。您现在可以在远程资源管理器中看到您的远程仓库,以快速打开或比较您可能有的任何未提交更改。此外,您可以将同一仓库中的更改应用到当前的远程仓库,让您可以快速轻松地将未提交的更改从一个分支移动到另一个分支。
主题:紫水晶暗色主题
要了解更多关于远程仓库的信息,您可以查看远程仓库博客文章和YouTube 视频。
改进了编辑器在窗口间的拖放功能
此版本改进了将编辑器拖到其他窗口的支持。您现在可以将 diff 编辑器、自定义编辑器和整个编辑器组拖到另一个窗口中打开这些编辑器。
注意:如果您经常使用此功能,请确保启用自动保存 (files.autoSave
),以便在一个窗口中的更改能自动反映在另一个窗口中。
当没有打开编辑器时,移除了使用 Cmd+W / Ctrl+W 关闭窗口的快捷键绑定
我们收到了反馈,称用户在使用 Cmd+W
/ Ctrl+W
快速关闭最后一个编辑器后,VS Code 窗口(实例)突然关闭时感到沮丧。团队内部的快速调查也显示,许多人已经取消了关闭窗口的此快捷键绑定,因此我们决定移除在没有编辑器打开时使用 Cmd+W
/ Ctrl+W
关闭窗口的快捷键绑定。
您可以通过在用户 keybindings.json
文件中如下配置来轻松恢复该快捷键绑定
macOS
{
"key": "cmd+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
Windows/Linux
{
"key": "ctrl+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
注意:在所有平台上,都有一个专门用于关闭窗口的快捷键绑定
- macOS:
Cmd+Shift+W
- Linux:
Alt+F4
- Windows:
Alt+F4
Notebook 布局自定义
本月我们添加了几个 Notebook 布局设置,允许用户根据其工作流程自定义 Notebook 编辑器。默认启用的自定义功能包括
Notebook 工具栏
我们在编辑器中添加了一个 Notebook 工具栏,您可以在其中轻松访问插入单元格、运行所有单元格或切换内核等操作。通过将 notebook.globalToolbar
设置为 false
可以禁用该工具栏。
输出工具栏
清除单元格输出操作和选择不同输出渲染器或 MIME 类型的按钮现已合并到单元格输出旁边的单个 ... 省略号菜单中。通过将 notebook.consolidatedOutputButton
设置为 false
可以禁用此功能。
编辑区域边缘的聚焦单元格高亮
VS Code 现在支持在单元格的编辑区域边缘区域渲染聚焦单元格高亮,这有助于在 Notebook 包含许多单元格时识别哪个单元格处于聚焦状态。设置 notebook.cellFocusIndicator
可以是新的默认值 gutter
,也可以是 border
以高亮显示整个单元格边框。
鼠标悬停时显示折叠图标
Markdown 单元格上的折叠图标现在仅在鼠标悬停时可见,而不是始终可见。您可以通过将 notebook.showFoldingControls
设置为 mouseover
(默认)或 always
来自定义行为。
本月实现的 Notebook 布局设置完整列表如下
notebook.cellFocusIndicator
:添加了单元格选项,可以使用单元格侧面的彩色条(gutter
)指示其聚焦状态,类似于 Jupyter。notebook.cellToolbarVisibility
:确定单元格工具栏应在单元格聚焦时还是悬停时显示。默认是仅在单元格聚焦时显示。notebook.compactView
:启用后,单元格以更紧凑的样式渲染,减少了空白空间。默认已启用。notebook.consolidatedOutputButton
:清除单元格输出操作和选择不同输出渲染器或 MIME 类型的按钮已合并到单元格输出旁边的单个 ... 省略号菜单中。此设置可以禁用新的菜单。notebook.consolidatedRunButton
:新增了两个操作:执行上方单元格和执行当前单元格及下方单元格。默认情况下,它们将出现在单元格工具栏中,但启用此设置会将其移动到执行按钮旁边的新上下文菜单中。notebook.dragAndDropEnabled
:禁用单元格的拖放功能。您仍然可以使用命令(默认 Alt+Up/Alt+Down)重新排列单元格。notebook.globalToolbar
:在 Notebook 编辑器顶部添加一个工具栏。notebook.insertToolbarLocation
:控制插入新单元格的按钮是显示在单元格之间、工具栏中、两者都显示,还是隐藏。notebook.showCellStatusBar
:此设置新增了一个选项visibleAfterExecute
,它会在单元格执行前隐藏单元格状态栏以节省空间。一旦执行,它将变为可见,以便用户可以查看执行详情。notebook.showFoldingControls
:控制 Markdown 标题上的折叠箭头是始终可见,还是仅在鼠标悬停时可见。notebook.editorOptionsCustomizations
:允许用户在 Notebook 中自定义单元格编辑器设置。
下图显示了其中几个设置的效果(顶部工具栏、边缘高亮、输出 ... 按钮)
更新了 Quick Pick 和建议窗口的颜色
我们更新了 Quick Pick 和建议窗口的焦点状态,使其更好地与我们的树状窗口样式对齐。这引入了一些新的颜色令牌来控制焦点前景
list.focusHighlightForeground
quickInputList.focusForeground
editorSuggestWidget.selectedForeground
图标主题:Fluent Icons
更新了 macOS 的触控栏图标
我们更新了 macOS 触控栏图标,使其与我们更新的图标风格对齐。
默认视图
调试时
WebView 的上下文菜单
VS Code 现在支持在 WebView 中显示简单的上下文菜单,例如 Markdown 预览、发布说明和扩展详情页面
此上下文菜单目前包含复制和粘贴文本的操作。将来我们可能会向菜单中添加更多操作。
如果此上下文菜单干扰了您扩展中的 WebView,您可以通过在 contextmenu
事件上调用 preventDefault
来阻止其显示。
document.body.addEventListener('contextmenu', e => {
e.preventDefault(); // cancel the built-in context menu
});
编辑器
建议预览
启用新设置 editor.suggest.preview
后,选中的建议或片段预览会显示在光标位置。
主题:Dark+(默认暗色)
隐藏已弃用的建议
新增了一个设置 editor.suggest.showDeprecated
,默认为 on
,但当设置为 off
时,建议将不显示标记为已弃用的项。
集成终端
终端标签页
终端标签页作为1.56 版本中的预览功能引入,现已默认启用。新的标签页视图默认仅在至少有两个终端时显示。对于单个终端,标签页会“内联”到面板标题中。这还引入了终端状态的概念,例如任务是否正在运行、成功或失败
以下是此版本的一些亮点
- 可以更改标签页的颜色,以便快速导航和区分它们。
- 可以拖放标签页以重新排列。
- 将终端组中的一个标签页拖到空白区域会将其从组中移除(取消拆分终端,也可以通过上下文菜单进行此操作)。
- 将一个标签页拖到主终端区域可以加入一个组(也可以通过上下文菜单进行此操作)。
- 现在,点击标签页、+ 按钮或单个标签页时,按住 Alt 会拆分终端。中键单击关闭终端也同样适用。
- 内联操作不会显示,除非标签页列表足够大,以避免意外拆分/关闭终端。
- 当关闭一个终端,使其仅剩一个时,标签页列表不会隐藏,直到鼠标离开视图。
如果您不喜欢新的用户体验,可以通过设置 "terminal.integrated.tabs.enabled": false
返回到下拉菜单,计划是继续支持此选项。
终端配置文件改进
终端配置文件系统在此版本中有许多改进,以下是一些亮点
- 如果在启动 VS Code 时恢复终端,
defaultProfile
将会被遵守,并用于任务和调试。 - Intellisense 现在在
settings.json
中对icon
和defaultProfile
生效。 overrideName
现在对默认配置文件生效。defaultProfile
现在可以在工作区设置中设置。此设置现在也受新的工作区信任功能控制。- 如果同时使用了
defaultProfile
和shell
或shellArgs
设置,现在会提示您将已弃用的设置迁移到配置文件系统。 - 现在可以在配置文件上设置
color
。
标题序列支持
设置 terminal.integrated.experimentalUseTitleEvent
已升级为稳定版,名称为 terminal.integrated.titleMode
。默认情况下,此设置的值为 executable
,它根据检测到的前台进程命名终端
当此设置设置为 sequence
时,标题将基于 shell 的设置。这需要 shell 的支持才能工作,一个示例是 oh-my-zsh 的默认提示符,它显示了关于会话的额外信息
改进了在干净环境中启动
设置 terminal.integrated.inheritEnv
自 v1.36 版本起就已可用,但其实现存在一些缺陷,在 Linux 上可能因权限问题失败,在 macOS 上可能无法按预期工作。
由于 VS Code 设置其底层环境的方式有所改进,现在可以访问它启动时的初始环境,这是大多数终端的工作方式。当 inheritEnv
设置为 true
时,VS Code 现在将使用初始环境,当设置为 false
时,则使用 sourced 的“shell 环境”。此设置可以帮助终端更像一个常规终端。但是,如果您的配置文件/rc 配置未正确设置,您可能会遇到问题。
Windows 上原生支持行换行
终端中的行换行会影响任务问题匹配器和链接检测。以前,Windows 终端使用启发式方法来标记换行行,因为模拟 Unix pty 的仿真技术不支持换行。这在 Windows 的最新版本中发生了变化,并且在更新到 Windows 10 21376+(目前仅 Insiders 版本)时,此启发式方法将被禁用,换行行应与 Windows Terminal 中一样正常工作。
任务
终端标签页上的任务状态
任务的状态现在显示在其终端标签页中。对于后台任务,仅当存在相关的任务问题匹配器时才显示状态。
自动关闭任务终端
任务的 presentation
属性新增了一个 close
属性。将 close
设置为 true
将导致任务退出时终端关闭。
{
"type": "shell",
"command": "node build/lib/preLaunch.js",
"label": "Ensure Prelaunch Dependencies",
"presentation": {
"reveal": "silent",
"close": true
}
}
调试
JavaScript 调试
像往常一样,完整的更改列表可以在 vscode-js-debug 变更日志中找到。
Edge Developer Tools 集成
JavaScript 调试器与 Microsoft Edge Developer Tools 集成,为浏览器调试提供 DOM、样式和网络检查器,可通过调试工具栏中的新“检查”图标访问。
下面的短视频演示了选择“检查”按钮并在 Edge DevTools 中导航元素。
主题:Codesong
如果您尚未使用 Microsoft Edge 进行浏览器调试,可以通过在 launch.json
中将 "type": "chrome"
或 "type": "pwa-chrome"
替换为 "type": "pwa-msedge"
来切换到它。通过在其启动配置中设置 "browser": "edge"
,Blazor 应用程序也支持此功能。
支持 sourcemaps 中的重命名标识符
一个长期请求的功能,JavaScript 调试器现在支持 sourcemaps 中的重命名标识符。这在调试压缩代码时特别有用
主题:Codesong
变量视图、监视视图和调试控制台 REPL 中都支持重命名变量。您可以通过查看您的工具生成的 sourcemap 文件中是否存在非空的“names”数组来检查您的工具是否会发出重命名信息。
在 BREAKPOINTS 视图中显示命中的断点
当命中一个断点时,VS Code 现在会在 BREAKPOINTS 视图中选中并显示它。这应该有助于更容易地了解是哪个具体的断点导致程序中断。
目前只有 JS-debug 扩展支持此功能,但我们预计其他调试扩展也将很快支持。
语言
TypeScript 4.3.2
VS Code 现在附带 TypeScript 4.3.2。此重要更新包含许多 TypeScript 语言改进,以及针对 JavaScript 和 TypeScript 工具的许多改进和错误修复。
您可以在TypeScript 博客上阅读更多关于 TypeScript 4.3 的信息。
JSDoc @link 支持
VS Code 现在支持在 JavaScript 和 TypeScript 注释中使用JSDoc @link 标签。这些标签可以创建文档中指向某个符号的可点击链接
JSDoc @link
标签的写法是:{@link symbolName}
。您也可以选择指定要替换符号名称显示的文本:{@link class.property 替代文本}
。
悬停提示、建议和签名帮助都支持 @link
。我们还更新了 VS Code 扩展类型声明文件 vscode.d.ts
以使用 @link
。
导入语句中的补全
JavaScript 和 TypeScript 中的自动导入功能会在您接受建议时自动添加导入。借助 VS Code 1.57,此功能在编写导入语句本身时也可用
如果您需要手动添加导入,这可以节省时间。
非 JS/TS 文件的 Go to Definition
许多现代 JavaScript 打包工具和框架使用 import
语句导入图像和样式表等资源。我们现在支持通过转到定义来导航这些导入
在您使用 Ctrl
/Cmd
单击来导航代码时,这可能最有用。
排序导入源代码操作
用于 JavaScript 和 TypeScript 的排序导入代码操作可以对导入进行排序。但与组织导入不同,它不会删除任何未使用的导入。
您还可以通过设置在保存时启用导入排序
"editor.codeActionsOnSave": {
"source.sortImports": true
}
推断函数返回类型快速修复
用于 TypeScript 的推断函数返回类型重构会为函数添加显式返回类型注解
如果您想添加更显式的类型,这很有用。此重构在您想要将返回类型提取到命名类型/接口时,或者在您需要修改函数的返回类型时,也能节省时间。
提示禁用 TS Server 日志记录
如果您长时间启用 TypeScript 服务器日志记录,VS Code 现在会提示您
日志记录会显著影响性能,因此除非您正在积极诊断问题,否则最好将其禁用。
对扩展的贡献
远程开发
远程开发扩展的工作仍在继续,它允许您使用容器、远程计算机或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.57 版的特性亮点包括
- 控制转发端口所需的协议。
- 可选监视转发端口冲突。
- 开发容器支持工作区信任安全功能。
- 在开发容器中更好地检测环境变量。
您可以在远程开发发布说明中了解新的扩展功能和错误修复。
扩展创作
Notebook API
我们已经最终确定了大部分 notebook API。该 API 分为三个独立的部分
NotebookSerializer
API 与notebooks
贡献点结合使用,使 VS Code 能够打开、修改和保存 notebook 文档。- 呈现单元格输出的 notebook 渲染器。它们通过扩展的
package.json
文件中的notebookRenderer
贡献点添加。 - 用于为代码单元格生成输出的
NotebookController
API。
简单 notebook 序列化程序和 echo 控制器的示例。序列化程序使用 JSON.parse
和 stringify
,并对空文件进行特殊处理。控制器返回单元格文本的大写变体 - 一次是纯文本,一次是 html。
// serialize/deserialize notebook
vscode.workspace.registerNotebookSerializer(
'echobook',
new (class implements vscode.NotebookSerializer {
// serializer is relying on JSON.parse/stringify
deserializeNotebook(content: Uint8Array) {
return JSON.parse(new TextDecoder().decode(content) || '{"cells":[]}');
}
serializeNotebook(data: vscode.NotebookData) {
return new TextEncoder().encode(JSON.stringify(data));
}
})()
);
// notebook controller
vscode.notebooks.createNotebookController(
'myId',
'echobook',
'Echo',
(cells, _notebook, controller) => {
for (let cell of cells) {
// execution means to echo in upper-case, once as plain text and once as html
const execution = controller.createNotebookCellExecution(cell);
execution.start();
const echo = cell.document.getText().toUpperCase();
const textItem = vscode.NotebookCellOutputItem.text(echo, 'text/plain');
const htmlItem = vscode.NotebookCellOutputItem.text(`<b>${echo}</b>`, 'text/html');
const output = new vscode.NotebookCellOutput([textItem, htmlItem]);
execution.replaceOutput(output);
execution.end(true);
}
}
);
该示例静态注册了 *.echobook
文件的 notebook 类型。此外,每当打开此类 notebook 时,VS Code 都会发出 onNotebook:echobook
激活事件。
"contributes": {
"notebooks": [{
"type": "echobook",
"displayName": "Echobook",
"selector": [{
"filenamePattern": "*.echobook"
}]
}]
}
状态栏项的“id”和“name”属性
我们最终确定了 StatusBarItem
标识符和名称属性的 API。标识符可以从 createStatusBarItem
方法的新重载中传递,而 name
属性可以在 StatusBarItem
本身上动态更改。
这些新属性用于状态栏上的上下文菜单,以为单个条目命名,并允许用户显示和隐藏条目。如果您不提供这些属性,菜单将把来自一个扩展的所有状态条目聚合到一个单个条目下。
如果您的扩展贡献了状态栏,请考虑更新到新的 API。
在新终端中打印消息
使用 window.createTerminal
创建终端时,现在可以通过 TerminalOptions.message
设置一条消息,该消息会打印在终端的顶部。此消息支持 ANSI 转义序列以启用文本样式
vscode.window.createTerminal({
name: `My terminal`,
message: '\x1b[3;1mSome custom message\x1b[0m'
});
内联值的新主题颜色
添加了新的颜色来为调试器内联值设置主题
editor.inlineValuesBackground
:调试器内联值前景色文本的颜色editor.inlineValuesForeground
:调试器内联值背景的颜色。
提醒一下,内联值在调试期间显示,适用于已注册内联值提供程序的调试扩展或设置 debug.inlineValues
为 true
的情况。
vscode-webview.d.ts
新发布的 @types/vscode-webview
包为VS Code 在 webview 内部公开的 API 添加了类型定义。
您可以使用 npm install --save-dev @types/vscode-webview
安装这些类型。如果 webview 类型在您的项目中未被识别,请尝试将它们添加到您的 jsconfig
/ tsconfig
的 typeAcquisition
部分
"typeAcquisition": {
"include": [
"@types/vscode-webview"
]
}
或在您的代码中添加三斜杠引用
///<reference types="@types/vscode-webview"/>
改进的 webview 数组缓冲区传输
在之前的 VS Code 版本中,向 webview 发送或从 webview 接收类型化数组有一些怪异之处
- 类型化数组,如
UInt8Array
,序列化效率低下。当您需要传输数兆字节的数据时,这可能会导致性能问题。 - 发送的类型化数组在接收端不会被重新创建为正确的类型。如果您发送一个
UInt8Array
,接收端会得到一个通用对象,该对象具有UInt8Array
的数据值。
虽然这两个问题都是 bug,但如果我们修复它们,可能会破坏依赖现有行为的扩展。与此同时,新编写的扩展完全没有理由想要当前令人困惑且低效的行为。
因此,我们决定保留现有扩展的现有行为,但将新扩展迁移到更正确的行为。这是通过查看扩展的 package.json
中的 engines
值来完成的。
"engines": {
"vscode": "^1.57.0",
}
如果扩展面向 VS Code 1.57+,则类型化数组应在接收端重新创建,并且大型类型化数组到 webview 的传输应更加高效。
调试会话上的 parentSession
一段时间前,VS Code 添加了对分层调试会话的支持,但在扩展 API 中没有公开关于层级的任何信息。为了解决这个问题,DebugSession
接口上新增了一个属性,用于引用父会话(如果存在)。会话的父级永远不会改变。
export interface DebugSession {
/**
* The parent session of this debug session, if it was created as a child.
* @see DebugSessionOptions.parentSession
*/
readonly parentSession?: DebugSession;
// ...
改进了 VS Code Insiders 版本定位
在开发使用建议 API 的扩展时,新的 Insiders 版本可能发布带有破坏性更改。为了给用户提供更顺畅的过渡,您现在可以使用日期标签精确地定位 Insiders 版本。例如,将 engines.vscode
设置为 ^1.56.0-20210428
将定位创建于 2020 年 4 月 28 日 0:00 UTC 或之后的任何 VS Code 1.56(或更新)版本。这使得您可以在即将发布的 Insiders 版本发布之前安全地发布后期的扩展更新。
"engines": {
"vscode": "^1.56.0-20210428",
}
树悬停支持命令 URI
当 TreeItem
具有受信任的 Markdown 工具提示时,该工具提示可以包含格式为 [这是一个链接](command:workbench.action.quickOpenView)
的命令。这与 Markdown 中支持命令链接的所有其他地方遵循相同的格式。
建议的扩展 API
每个里程碑都会带来新的建议 API,扩展作者可以尝试它们。一如既往,我们希望得到您的反馈。这是尝试建议 API 需要做的事情
- 您必须使用 Insiders 版本,因为建议的 API 经常更改。
- 您的扩展的
package.json
文件中必须有这一行:"enableProposedApi": true
。 - 将最新版本的vscode.proposed.d.ts 文件复制到您的项目的源代码位置。
您不能发布使用建议 API 的扩展。下一个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
测试
我们原计划在本迭代中最终确定测试 API 的第一部分,但由于其他正在进行的功能数量,这被推迟了。尽管本迭代中测试 API 没有破坏性更改,但我们在其编辑器体验方面继续取得进展。例如,Peek 视图增加了分屏视图,允许您浏览当前和过去测试运行的结果。
主题:Codesong
测试获得了一组新的组合键,以 Ctrl+; 开头,Peek 视图现在更好地支持 Markdown 消息,并且修复了许多 bug。
如果您使用Test Explorer UI 扩展进行测试,您可以启用设置 testExplorer.useNativeTesting
切换到新的原生 UI。在下一次迭代中,我们计划增加此设置的宣传,并开始与合作伙伴扩展团队一起采用。
终端配置文件贡献
此 API 将使扩展能够对终端配置文件系统做出贡献。扩展需要做几件事才能使其工作。首先在 package.json
中贡献配置文件
"contributes": {
"terminal": {
"profiles": [
{
"title": "Profile from extension",
"id": "my-ext.terminal-profile",
"icon": "lightbulb"
}
]
},
}
然后在新 onTerminalProfile
激活事件上激活扩展
"activationEvents": [
"onTerminalProfile:my-ext.terminal-profile"
]
最后,在激活事件中注册提供程序
vscode.window.registerTerminalProfileProvider('my-ext.terminal-profile', {
provideProfileOptions(token) {
return {
name: 'Profile from extension',
shellPath: 'cmd.exe'
};
}
});
如果启用了建议的 API,则扩展贡献的配置文件应显示在配置文件列表中
终端选项中的 iconPath 支持
TerminalOptions
和 TerminalExtensionOptions
支持标准 iconPath
类型,用于设置终端图标,该图标显示在终端的选项卡上
readonly iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon;
更改 Pseudoterminal 的标题
新事件 Pseudoterminal.onDidChangeName
启用了对基于 Pseudoterminal 的终端的控制
const writeEmitter = new EventEmitter<string>();
const nameEmitter = new EventEmitter<string>();
const pty = {
onDidWrite: writeEmitter.event,
open: () => writeEmitter.fire('Type to change the title of the terminal'),
close: () => {
/* noop*/
},
handleInput: (data: string) => nameEmitter.fire(data)
};
const terminal = vscode.window.createTerminal({
name: `My Terminal`,
pty
});
terminal.show();
使文件系统提供程序能够声明文件为只读
文件系统提供程序现在可以通过 FileStat
上的新 permissions
属性将单个文件标记为只读,方法是将该属性的值设置为 FilePermission.Readonly
。只读文件不可编辑。
注意: 如果所有文件都应被视为只读,您可以在调用 registerFileSystemProvider
时使用现有的 isReadonly
选项。
在 asExternalUri 中支持工作区 URI
现有的 vscode.env.asExternalUri
API 现在支持处理工作区 URI。这使得扩展作者可以创建系统范围的 URI,直接打开给定的工作区。
例如
const uri = await vscode.env.asExternalUri('file:///Users/john/work/code');
生成的 uri
可以由操作系统打开,VS Code 将打开该工作区。
工程
Electron 沙盒支持的进展
在这个里程碑中,我们继续使 VS Code 窗口为启用 Electron 的沙盒和上下文隔离功能做好准备。
具体而言
- 我们从渲染器中使用的更多代码中移除了 Node.js 依赖项。
- 我们继续调查完全放弃
webview
的使用并切换到iframe
来实现我们的自定义视图和编辑器。
文档
Build 2021 上的 VS Code
如果您错过了Microsoft Build 2021 开发者活动,您仍然可以按需观看会议。请查看Build 2021 上的 Visual Studio Code 博客文章,我们在其中整理了我们认为 VS Code 用户会感兴趣的会议列表。
浏览器调试
新的主题VS Code 中的浏览器调试介绍了对 Edge 和 Chrome 浏览器的内置调试支持。您可以配置 VS Code 以启动新的浏览器调试会话(通过调试:打开链接命令)或附加到正在运行的浏览器。
PyTorch
有一个关于如何在 VS Code 中使用PyTorch 机器学习框架的新主题。在VS Code 中的 PyTorch 支持文章中,您将学习如何使用 PyTorch 和TensorFlow 数据类型扩展 Jupyter Notebook。
重要修复
- 71966:经常出现窗口完全挂起
- 85332:Windows:文件删除时冻结
- 95077:终端“单词”链接提供程序不支持换行
- 108804:打开窗口前不要等待 shell 环境解析
- 120004:VS Code 集成终端中奇怪的字母间距
- 125035:调试控制台过滤器文本应在重新加载后保留
- iOS/iPadOS:对 iOS/iPadOS 平台进行了多项修复
致谢
最后但同样重要的是,在此衷心感谢本月为 VS Code 做出贡献的以下人士
对问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Nicholas Rayburn (@nrayburn-tech)
- Alessandro Fragnani (@alefragnani)
- ArturoDent (@ArturoDent)
对 vscode
的贡献
- @Ashray123 (Ashray Jha):修改了 Markdown 预览的嵌套列表样式 PR #124445
- @barbaravaldez (Barbara Valdez):拖放 API 的初步实现 PR #122239
- @CommaNet (Melvin ):更新 README.md PR #124654
- @danielgary (Daniel Gary):将 wmic 调用替换为 windows-process-tree PR #123895
- @DonJayamanne (Don Jayamanne):转换 dto 时保留执行摘要 PR #124549
- @eltociear (Ikko Ashimine):修复 files.ts 中的拼写错误 PR #124693
- @gjsjohnmurray (John Murray)
- 允许 FileSystemProvider 将文件 stat 为只读 (#_73122) PR #111237
- 修复 #123831 处理调试适配器 ErrorResponse 消息中的命令 URL PR #123833
- @habibkarim (Habib Karim):实现 Pseudoterminal.onDidChangeName PR #115276
- @hantatsang (Sang):修复欢迎视图链接缺少悬停颜色问题 PR #121835
- @huszkacs (Csaba Huszka):修复了安卓屏幕键盘退格键问题。 PR #124288
- @inidaname (Hassan Sani):在 Markdown 预览中为表格添加了底部间距 PR #124385
- @jeanp413 (Jean Pierre)
- 修复 pascalCase 代码片段格式化程序无法处理数字的问题 PR #122796
- 添加在终端选项卡上拖放文件的支持 PR #123429
- 修复了百分比编码的 markdown 链接解码不正确的问题 PR #123584
- 修复了进程资源管理器不显示展开/折叠图标的问题 PR #123910
- 修复了进程资源管理器列表样式不工作的问题 PR #123919
- 修复了终端查找小部件不应覆盖选项卡的问题 PR #124317
- 修复了更新终端面板操作时监听器泄漏的问题 PR #124741
- 在重新加载时保留 repl 过滤值 PR #125221
- @kabel (Kevin Abel):实现 GitHub Enterprise 身份验证提供程序 PR #115940
- @leilapearson (Leila Pearson):资源管理器的新排序顺序按字典顺序选项设置 PR #97272
- @mzainuddin51 (Mohammad Zainuddin):修复 issue #123772 的链接不正确问题 PR #124203
- @nrayburn-tech (Nicholas Rayburn)
- 为内联调试值添加颜色自定义 PR #123065
- 修复问题报告器提交时不关闭以及提交去抖动问题 PR #123340
- 为建议添加 showDeprecated 选项,过滤掉已弃用选项 PR #123351
- 如果 tsserver 日志开启超过 7 天,则添加通知 PR #124149
- 如果只有一个组,则隐藏终端选项卡的选项 PR #124480
- @plankp (Paul Teng):添加模式匹配“in” PR #121941
- @rtzoeller (Ryan Zoeller):为 Make 语言注册 .mak 扩展 PR #122614
- @shskwmt (Shunsuke Iwamoto):修复 #116335:将文件路径文本发送到拖放的终端区域 PR #116621
- @suzmue (Suzy Mueller):修复为异常设置调试调用堆栈显示的问题 PR #123726
- @tejasvi (Tejasvi S. Tomar):改进 TextEditor.setDecorations 的文档 PR #122785
- @ValeraS (Valeriy):修复:使用 addListener 而不是 addEventListener 观察媒体查询列表 PR #121557
- @vibhavsarraf (Vibhav):在终端单词链接中规范化路径 PR #123246
- @wendellhu95 (Wendell):测试:为事件 Relay 添加测试 PR #119070
对 vscode-css-languageservice
的贡献
- @jeanp413 (Jean Pierre):修复了带有包含点的后缀的文件名链接解析问题 PR #241
对 vscode-eslint
的贡献
- @edupsousa (Eduardo Pereira de Sousa):为 eslint.rules.customizations 添加严重性“off” PR #1243
- @karlhorky (Karl Horky):为 Node.js 的系统版本文档记录“node” PR #1247
对 vscode-js-debug
的贡献
- @danielgary (Daniel Gary):990 - 支持使用启动配置名称作为终端标题 PR #991
- @lhchavez:特性:允许 debugServerMain.ts 的调用者指定主机 PR #1006
对 vscode-languageserver-node
的贡献
- @yanmofeixi:为客户端未准备好错误添加更多信息 PR #764
对 vscode-pull-request-github
的贡献
- @IllusionMH (Andrii Dieiev):移除了 TSLint 推荐和剩余的提及 PR #2758
对 vscode-vsce
的贡献
- @jedwards1211 (Andy Edwards):为 .vscodeignore 使用 ignore npm 包而不是自定义代码 PR #418
- @oliversalzburg (Oliver Salzburg):修复:缺少错误响应处理 PR #564
对 language-server-protocol
的贡献
- @DanTup (Danny Tuppeny):澄清 textDocument/selectionRange 如何处理一些缺失结果 PR #1272
- @HO-COOH:更新 specification-3-16.md PR #1259
- @narnaud (Nicolas Arnaud-Cormos)
- @NTaylorMullen (N. Taylor Mullen)
对 monaco-languages
的贡献
- @akonatala (apoorva konatala):更新 cameligo 语言支持 PR #137
- @anark:为 liquid 语言添加别名和 mimetypes PR #136
- @mattvague (Matt Vague):修复 liquid 的文件名不正确问题 PR #135
对 monaco-typescript
的贡献
- @paranoidjk (paranoidjk):修复:支持 extraLib 文件的转到定义 PR #79