2021 年 5 月(版本 1.57)
1.57.1 更新:此更新解决了这些 问题。
Workspace Trust 功能解决了 CVE-2021-34529 漏洞。
下载:Windows: x64 Arm64 | Mac: 通用 Intel silicon | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2021 年 5 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- Workspace Trust - 浏览不熟悉源代码时,提供额外的代码执行安全性。
- 全新的“开始使用”体验 - 帮助您快速设置并了解 VS Code。
- Remote Repositories - 无需本地克隆存储库即可浏览和编辑代码。
- 终端选项卡 - 选项卡使您可以轻松创建、管理和分组多个打开的终端。
- Edge 浏览器调试 - 将 Microsoft Edge 开发人员工具直接集成到 VS Code 中。
- JSDoc @link 支持 - 在您的注释中添加 @link 标记,以便快速符号导航。
- 跳转到非代码文件的定义 - 快速跳转到图像和样式表。
- Notebook API 已最终确定 - 用于在 VS Code 中提供原生笔记本支持的 Notebook API。
- VS Code 在 Build 2021 博客文章 - 了解以 VS Code 为特色的点播会议。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
观看亮点,了解 VS Code 团队发布派对中此版本的新功能。您可以在我们的 YouTube 频道上找到 活动录像。
尝鲜版用户:想尽快试用新功能吗?您可以下载每夜版 Insiders 构建版本,并在最新更新可用时立即试用。
工作台
Workspace Trust
Visual Studio Code 非常重视安全性,并希望帮助您安全地浏览和编辑代码,无论代码来源或作者是谁。Workspace Trust 功能使您可以决定您的项目文件夹是否应允许或限制自动代码执行。
注意:如有疑问,请将文件夹保留在 受限模式 下。您始终可以在以后启用信任。
安全代码浏览
公共存储库和文件共享上有如此多的源代码可用,这真是太好了。无论编码任务或问题是什么,都可能已经有可用的良好解决方案。但是,使用开源代码和工具确实存在风险,您可能会让自己面临恶意代码执行和漏洞利用的风险。
当在 受限模式 下打开工作区时,“Workspace Trust”通过阻止自动代码执行来提供额外的安全层,从而在使用不熟悉代码时提供保护。
注意:如果要禁用 Workspace Trust 功能,可以将
security.workspace.trust.enabled
设置为false
。仅当您确信自己了解所处理文件的来源和完整性时,才禁用 Workspace Trust。
受限模式
当 Workspace Trust 对话框提示时,如果您选择否,我不信任作者,VS Code 将进入“受限模式”以防止代码执行。工作台顶部将显示一个横幅,其中包含指向“通过 Workspace Trust 编辑器管理”您的文件夹和“了解更多”的链接,后者将您带到 Workspace Trust 用户指南。
您还将在状态栏中看到“受限模式”徽章。
“受限模式”尝试通过禁用或限制多个 VS Code 功能(任务、调试、工作区设置和扩展)的操作来防止自动代码执行。
要查看在“受限模式”下禁用的功能的完整列表,您可以通过横幅中的“管理”链接或单击状态栏中的“受限模式”徽章来打开 Workspace Trust 编辑器。
信任工作区
如果您信任项目的作者和维护者,则可以信任本地计算机上的项目文件夹。例如,通常可以安全地信任来自知名 GitHub 组织(如 github.com/microsoft 或 github.com/docker)的存储库。当您打开新文件夹时,初始 Workspace Trust 提示将允许您信任该文件夹及其子文件夹。
您还可以调出 Workspace 编辑器并快速切换文件夹的信任状态。有几种方法可以调出 Workspace 编辑器对话框。
当处于“受限模式”时
- “受限模式”横幅“管理”链接
- “受限模式”状态栏项目
您也可以随时使用
- 从命令面板中使用工作区:管理 Workspace Trust命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))
- 从活动栏中的“管理”齿轮中使用管理 Workspace Trust
选择文件夹
当您信任文件夹时,它会被添加到 Workspace Trust 编辑器中显示的“受信任的文件夹和工作区”列表中。
您可以手动从此列表中添加、编辑和删除文件夹,并且启用信任的活动文件夹将以粗体突出显示。
您还可以选择信任父文件夹。这将对父文件夹和所有子文件夹应用信任。如果您在同一文件夹下有许多包含受信任内容的文件夹,这将很有帮助。
启用扩展
如果您想使用“受限模式”,但您最喜欢的扩展不支持 Workspace Trust,会发生什么情况?如果扩展虽然有用且功能齐全,但未得到积极维护且未声明其 Workspace Trust 支持,则可能会发生这种情况。为了处理这种情况,您可以使用 extensions.supportUntrustedWorkspaces
设置覆盖扩展的信任状态。
注意:请谨慎覆盖扩展的 Workspace Trust 支持。扩展作者可能有充分的理由在“受限模式”下禁用其扩展。
下面您可以看到 Prettier 扩展的用户 settings.json
条目。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
您可以使用 supported
属性启用或禁用 Workspace Trust 支持。version
属性指定适用的确切扩展版本,如果您想为所有版本设置状态,则可以删除 version 字段。
如果您想了解更多关于扩展作者如何评估和确定在“受限模式”下限制哪些功能的信息,您可以阅读 Workspace Trust 扩展指南。
设置
以下是可用的 Workspace Trust 设置
security.workspace.trust.enabled
- 启用 Workspace Trust 功能。默认为 true。security.workspace.trust.startupPrompt
- 是否在启动时显示 Workspace Trust 对话框。默认设置为每个不同的文件夹或工作区仅显示一次。security.workspace.trust.emptyWindow
- 是否始终信任空窗口(未打开文件夹)。默认为 true。security.workspace.trust.untrustedFiles
- 控制如何处理工作区中的松散文件。默认为提示。extensions.supportUntrustedWorkspaces
- 覆盖扩展 Workspace Trust 声明。可以是 true 或 false。
要了解有关 Workspace Trust 的更多信息,您可以阅读 Workspace Trust 用户指南。
全新的“开始使用”体验
在过去的几次迭代中,我们一直在努力刷新 VS Code 的欢迎页面,我们很高兴地宣布,从本次迭代开始,我们的新欢迎页面(开始使用)默认对所有用户启用。在这种新体验中,VS Code 的核心和已安装的扩展都可以为欢迎页面贡献“演练”,这些演练旨在帮助您开始使用 VS Code 本身或新的扩展。例如,Luna Paint 扩展贡献了一个演练,其中包含帮助理解图像编辑器每个组件的指南。
此外,一旦您完成(或关闭)所有演练,VS Code 将重新排列内容,使您可以单击访问的最近工作区数量翻倍。
设置
workbench.startupEditor
- 控制启动时显示的默认编辑器。新值gettingStarted
替换了旧的默认值welcome
。其他一些可用选项包括readme
、gettingStartedInEmptyWorkbench
、newUntitledFile
或none
。workbench.welcomePage.walkthroughs.openOnInstall
- 是否在安装时自动打开扩展贡献的演练。
在我们完全淘汰现有欢迎页面之前,新页面将被称为“开始使用”。
Remote Repositories
Remote Repositories 扩展在 1.56 版本中作为内置预览功能引入,现在已公开可用,但不再内置于 VS Code,因此您需要从 VS Code Marketplace 安装它。
简单回顾一下,Remote Repositories 扩展允许您直接从 VS Code 中即时浏览、搜索、编辑和提交到任何 GitHub 存储库,而无需克隆或在本地拥有该存储库。
在本次迭代中,虽然我们主要专注于错误修复和扩展的发布打磨,但我们确实添加了一些新功能。您现在可以在远程资源管理器中看到您的远程存储库,以便快速打开或比较您可能拥有的任何未提交的更改。此外,您可以将来自同一存储库的更改应用于当前的远程存储库,从而使您可以快速轻松地将未提交的更改从一个分支移动到另一个分支。
要了解有关 Remote Repositories 的更多信息,您可以查看 Remote Repositories 博客文章 和 YouTube 视频。
改进了跨窗口的编辑器拖放
此版本改进了对将编辑器拖动到其他窗口的支持。您现在可以将差异编辑器、自定义编辑器和整个编辑器组拖动到另一个窗口,以在那里打开编辑器。
注意:如果您经常使用此功能,请确保启用自动保存 (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.globalToolbar
设置为 false
来禁用工具栏。
输出工具栏
“清除单元格输出”操作和用于选择其他输出渲染器或 mimetype 的按钮现在已合并到单元格输出旁边的单个 ... 省略号菜单中。可以通过将 notebook.consolidatedOutputButton
设置为 false
来禁用此菜单
聚焦单元格在装订线上的高亮显示
VS Code 现在支持在单元格的装订线区域中渲染聚焦单元格高亮显示,这有助于在笔记本包含许多单元格时识别哪个单元格处于聚焦状态。设置 notebook.cellFocusIndicator
可以是 gutter
(新的默认值)或 border
(以突出显示整个单元格边框)。
鼠标悬停时显示折叠图标
Markdown 单元格上的折叠图标现在在鼠标悬停时可见,而不是始终可见。您可以通过将 notebook.showFoldingControls
设置为 mouseover
(默认值)或 always
来自定义行为。
本月实施的笔记本布局设置的完整列表是
notebook.cellFocusIndicator
:添加了选项,允许单元格使用单元格侧面的彩色条 (gutter
) 指示其聚焦状态,类似于 Jupyter。notebook.cellToolbarVisibility
:确定单元格工具栏应在单元格聚焦时还是悬停时显示。默认设置为仅在单元格聚焦时显示。notebook.compactView
:启用后,单元格将以更紧凑的样式渲染,减少空白空间。默认情况下已启用。notebook.consolidatedOutputButton
:“清除单元格输出”操作和用于选择其他输出渲染器或 mimetype 的按钮已合并到单元格输出旁边的单个 ... 省略号菜单中。可以使用此设置禁用新菜单。notebook.consolidatedRunButton
:有两个新操作:“执行上方单元格”和“执行单元格及下方”。它们默认将显示在单元格工具栏中,但启用此设置会将它们移动到执行按钮旁边的新上下文菜单中。notebook.dragAndDropEnabled
:禁用单元格的拖放。您仍然可以使用命令(默认情况下为 Alt+Up/Alt+Down)重新排列单元格。notebook.globalToolbar
:在笔记本编辑器顶部添加工具栏。notebook.insertToolbarLocation
:控制用于插入新单元格的按钮是显示在单元格之间、工具栏中、两者都显示还是隐藏。notebook.showCellStatusBar
:此设置有一个新选项visibleAfterExecute
,它将隐藏单元格状态栏以节省空间,直到单元格被执行。一旦执行,它将变为可见,以便用户可以查看执行详细信息。notebook.showFoldingControls
:控制 Markdown 标题上显示的折叠 chevron 是始终可见还是仅在鼠标悬停时可见。notebook.editorOptionsCustomizations
:允许用户自定义笔记本中的单元格编辑器设置。
下图显示了其中几个设置的效果(顶部的工具栏、装订线高亮显示、输出 ... 按钮)
更新了快速选择和建议小部件颜色
我们更新了快速选择和建议小部件中的焦点状态,以更好地与我们的树小部件样式对齐。这引入了一些新的颜色标记,用于控制焦点前景色
list.focusHighlightForeground
quickInputList.focusForeground
editorSuggestWidget.selectedForeground
图标主题:Fluent Icons
更新了 macOS 的 Touch Bar 图标
我们更新了 macOS Touch Bar 图标,使其与我们更新的图标风格保持一致。
默认视图
调试时
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
,但当关闭时,建议将不会显示标记为已弃用的项。
集成终端
终端选项卡
终端选项卡在 1.56 版本中作为预览功能引入,现在默认启用。新的选项卡视图仅在至少有两个终端时才默认显示。对于单个终端,选项卡“内联”到面板标题中。这也引入了终端状态的概念,例如任务是否正在运行、成功或失败
以下是此版本中的一些亮点
- 可以更改选项卡的颜色,以实现它们之间的快速导航和区分。
- 可以拖放选项卡以进行重新排列。
- 将终端组中的选项卡拖动到空白区域将从组中删除它(取消拆分终端,也可以通过上下文菜单获得)。
- 将选项卡拖动到主终端区域允许加入组(也可以通过上下文菜单获得)。
- 当单击选项卡、“+”按钮或单个选项卡时,Alt 现在会拆分终端。同样适用于鼠标中键单击以杀死终端。
- 除非选项卡列表足够大以避免意外拆分/杀死终端,否则内联操作不会显示。
- 当杀死一个终端使得只有一个终端时,选项卡列表在鼠标离开视图之前不会隐藏。
如果您不喜欢新的 UX,您可以将 "terminal.integrated.tabs.enabled": false
设置为 false
返回到下拉列表,计划是继续支持此选项。
终端配置文件改进
终端配置文件系统在此版本中进行了许多改进,以下是一些亮点
- 如果在启动 VS Code 时恢复终端,
defaultProfile
将受到尊重,并将用于任务和调试。 - Intellisense 现在在
settings.json
中适用于icon
和defaultProfile
。 overrideName
现在适用于默认配置文件。defaultProfile
现在可以在工作区设置中设置。这也现在由新的 Workspace Trust 功能控制。- 如果使用
defaultProfile
和shell
或shellArgs
设置,现在将要求您将已弃用的设置迁移到配置文件系统。 - 现在可以在配置文件上设置
color
。
标题序列支持
设置 terminal.integrated.experimentalUseTitleEvent
已升级为稳定版,即 terminal.integrated.titleMode
。默认情况下,此设置将为 executable
,它根据检测到的前台进程命名终端
当设置为 sequence
时,标题将基于 shell 设置的内容。这需要 shell 支持才能工作,oh-my-zsh 的默认提示就是一个实际示例,它显示有关会话的其他信息
改进了使用干净环境启动
自 v1.36 以来,设置 terminal.integrated.inheritEnv
一直可用,但该实现存在一些缺陷,在 Linux 上可能会因权限问题而失败,并且在 macOS 上可能无法按预期工作。
由于 VS Code 设置其底层环境的方式得到了改进,现在可以访问其启动时使用的初始环境,这与大多数终端的工作方式相同。当 inheritEnv
设置为 true
时,VS Code 现在将使用初始环境;当为 false
时,使用源“shell 环境”。此设置可以帮助终端更像常规终端。但是,如果您的 profile/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 开发人员工具集成
JavaScript 调试器与 Microsoft Edge 开发人员工具集成,为浏览器调试提供 DOM、样式和网络检查器,可通过调试工具栏中的新“检查”图标访问。
下面的短视频演示了选择“检查”按钮并在 Edge DevTools 中浏览元素。
主题:Codesong
如果您尚未使用 Microsoft Edge 进行浏览器调试,则可以通过在 launch.json
中将 "type": "chrome"
或 "type": "pwa-chrome"
替换为 "type": "pwa-msedge"
来切换到它。Blazor 应用程序也支持此功能,方法是在其启动配置中设置 "browser": "edge"
。
支持 sourcemap 中重命名的标识符
JavaScript 调试器现在支持 sourcemap 中重命名的标识符,这是一个长期请求的功能。这在调试缩小后的代码时特别有用
主题:Codesong
变量视图、监视视图和调试控制台 REPL 中支持重命名的变量。您可以通过在其生成的 sourcemap 文件中查找非空“名称”数组来检查您的工具是否发出重命名。
在“断点”视图中显示命中的断点
当命中一个断点时,VS Code 现在会在“断点”视图中选择并显示它。这应该更容易理解哪个确切的断点导致程序中断。
目前只有 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 Alt text}
。
在悬停、建议和签名帮助中支持 @link
。我们还更新了 VS Code 可扩展性类型声明文件 vscode.d.ts
以使用 @link
。
导入语句中的补全
当您接受建议时,JavaScript 和 TypeScript 中的自动导入会自动添加导入。使用 VS Code 1.57,它们现在在编写导入语句本身时也有效
如果您需要手动添加导入,这可以节省时间。
跳转到非 JS/TS 文件的定义
许多现代 JavaScript 打包器和框架使用 import
语句来导入诸如图像和样式表之类的资源。我们现在支持使用“跳转到定义”来导航这些导入
当使用 Ctrl/Cmd 单击来浏览代码时,这可能最有用。
排序导入源操作
JavaScript 和 TypeScript 的“排序导入”代码操作会对您的导入进行排序。但是,与“组织导入”不同,它不会删除任何未使用的导入。
您还可以通过设置在保存时启用导入排序
"editor.codeActionsOnSave": {
"source.sortImports": true
}
推断函数返回类型快速修复
TypeScript 的“推断函数返回类型”重构为函数添加了显式的返回类型注解
如果您想添加更显式的类型,这将很有用。当您想将返回类型提取到命名类型/接口,或者需要修改函数的返回类型时,此重构也可以节省时间。
提示禁用 TS Server 日志记录
如果您长时间启用了 TypeScript 服务器日志记录,VS Code 现在会提示您
日志记录会显著影响性能,因此最好保持禁用状态,除非您正在积极尝试诊断问题。
扩展贡献
远程开发
远程开发扩展的工作仍在继续,这些扩展允许您使用容器、远程计算机或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
1.57 版本的功能亮点包括
- 控制转发端口的所需协议。
- 可选监视转发端口冲突。
- Dev Containers 支持 Workspace Trust 安全功能。
- 改进了开发容器中的环境变量检测。
您可以在 远程开发发行说明中了解有关新扩展功能和错误修复的信息。
扩展编写
Notebook API
我们已经最终确定了大部分笔记本 API。API 分为三个独立的部分
NotebookSerializer
API,它与notebooks
贡献点结合使用,使 VS Code 能够打开、修改和保存笔记本文档。- 笔记本渲染器,用于呈现单元格输出。它们通过扩展的
package.json
文件的notebookRenderer
贡献点添加。 NotebookController
API,用于为代码单元格生成输出。
简单的笔记本序列化器和回声控制器示例。序列化器使用 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
文件的笔记本类型。此外,每当打开此类笔记本时,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 日 UTC 时间 0:00 或之后创建的任何 VS Code 1.56(或更高版本)构建为目标。这使您可以在即将发布的 Insiders 版本发布之前安全地发布过期的扩展更新。
"engines": {
"vscode": "^1.56.0-20210428",
}
树悬停支持命令 URI
当 TreeItem
具有受信任的 Markdown 工具提示时,该工具提示可以包含格式为 [this is a link](command:workbench.action.quickOpenView)
的命令。这与 Markdown 中支持命令链接的所有其他位置的格式相同。
提议的扩展 API
每个里程碑都带有新的建议 API,扩展作者可以试用它们。与往常一样,我们希望收到您的反馈。以下是您试用建议 API 需要做的事情
- 您必须使用 Insiders 版本,因为建议 API 经常更改。
- 您必须在扩展的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您项目的源位置。
您不能发布使用建议 API 的扩展。下一个版本中可能会有重大更改,我们绝不希望破坏现有扩展。
测试
我们原本打算在此迭代中完成测试 API 的第一部分,但由于其他正在进行的功能数量众多而被推迟。虽然此迭代中测试 API 没有重大更改,但我们继续在其编辑器体验方面取得进展。例如,“查看”视图获得了一个拆分视图,允许您浏览当前和过去测试运行的结果。
主题:Codesong
测试获得了一组新的快捷键,作为以 Ctrl+; 开头的组合键,“查看”视图现在更好地支持 Markdown 消息,并且修复了许多错误。
如果您为测试使用 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 支持
标准 iconPath
类型在 TerminalOptions
和 TerminalExtensionOptions
上受支持,用于设置终端的图标,该图标显示在终端的选项卡上
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 将文件状态设为只读 (#_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):修复了问题 #123772 的不正确链接 PR #124203
- @nrayburn-tech (Nicholas Rayburn)
- 为内联调试值添加颜色自定义 PR #123065
- 修复问题报告器在提交时不关闭以及防抖提交的问题 PR #123340
- 为 suggest 添加 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):将严重性“off”添加到 eslint.rules.customizations PR #1243
- @karlhorky (Karl Horky):记录 Node.js 系统版本的“node” PR #1247
对 vscode-js-debug
的贡献
- @danielgary (Daniel Gary):990 - 支持使用启动配置名称作为终端标题 PR #991
- @lhchavez:feat:允许 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):使用 ignore npm 包而不是自定义代码来处理 .vscodeignore 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 语言添加别名和 mime 类型 PR #136
- @mattvague (Matt Vague):修复 liquid 的不正确文件名 PR #135
对 monaco-typescript
的贡献
- @paranoidjk (paranoidjk):修复:支持跳转到 extraLib 文件的定义 PR #79