2020 年 5 月(版本 1.46)
更新 1.46.1:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 Visual Studio Code 2020 年 5 月版。
- 辅助功能改进 - 状态栏导航,更易于键盘文本选择。
- 灵活的视图和面板布局 - 在侧边栏和面板中移动和分组视图。
- 固定编辑器标签页 - 在标题栏中固定编辑器,以便常用文件方便使用。
- 添加 GitHub 远程 - 将 GitHub 远程添加到本地存储库。
- 自动调试器配置 - 保存和修改生成的调试配置。
- JavaScript CommonJS 自动导入 - 自动导入现在将对 CommonJS 模块使用
require
。 - JS/TS 重构保留换行符 - 在重构操作期间保留格式。
- 设置同步预览 - 新的同步机器和数据视图,用于管理您的首选项。
- GitHub 问题笔记本 - 运行 GitHub 问题查询并在自定义笔记本中显示结果。
- Windows ARM64 支持 - 新的 VS Code Insiders ARM64 版本可用。
- Build 2020 上的 VS Code - 关于技巧和窍门、远程开发和 VS Code 历史的讨论。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的 更新。
辅助功能
这个里程碑我们再次收到了来自我们社区的有用反馈,这让我们识别并解决了许多 辅助功能问题。
- 状态栏现在支持键盘导航。当焦点通过聚焦下一个部分 (F6) 进入状态栏时,箭头导航会在状态栏条目之间移动。
- 为了更易于使用键盘开始和结束选择,有四个新命令
- 设置选择锚点 (⌘K ⌘B(Windows,Linux Ctrl+K Ctrl+B))
- 从锚点选择到光标 (⌘K ⌘K(Windows,Linux Ctrl+K Ctrl+K))
- 取消选择锚点 (Escape)
- 转到选择锚点
- 活动栏条目现在具有
tab
角色,并设置适当的aria-expanded
状态。 - 编辑器的 Aria 标签现在正确传达以下编辑器状态:
pinned
、preview
和readonly
。
工作台
灵活的布局
经过几次迭代,我们宣布了在使我们的布局更加灵活方面取得的进展。在此版本中,这组功能现在可以正式使用了。以下是对这些功能的概述。
在侧边栏和面板之间移动视图
也许您更喜欢将侧边栏中的视图放置在面板中,反之亦然。为此,您现在可以从其当前位置拖动视图的标题,或者拖动整个组的图标或标题,并将其移动到所需的位置。从键盘上,可以使用命令视图:移动视图 (workbench.action.moveView
) 和视图:移动焦点视图 (workbench.action.moveFocusedView
)。
下面演示了将“搜索”拖到面板并将“问题”拖到侧边栏。
将“搜索”拖到面板并将“问题”拖到活动栏
主题:GitHub Light
之前有一个用于将“搜索”视图从侧边栏移动到面板的设置,现在该设置已过时,因为可以使用拖放代替。
分组视图
您可能还想将来自不同扩展的一些视图分组在一起,或者您觉得内置视图的默认组对您来说不太合适。您可以将视图移动到现有组中,也可以为一组选定的视图创建新组。这与之前一样,在侧边栏和面板中都有效。以下是几个例子。
将“时间线”视图从“资源管理器”拖到“源代码管理”
将“监视”视图从“运行”侧边栏拖到面板中的“调试控制台”旁边
在侧边栏和面板中创建一个带有“时间线”和“GitLens”的自定义历史记录组
主题:GitHub Light
重置视图位置
可以通过其上下文菜单将视图和视图组重置为其默认位置。当视图已从其默认位置移动时,将有一个条目重置位置将其移回其主页。还有命令视图:重置焦点视图位置 (workbench.action.resetFocusedViewLocation
) 和视图:重置视图位置 (workbench.action.resetViewLocations
),用于将所有视图和组重置回其默认位置。
对于贡献视图或视图容器的扩展作者
当视图在工作台中移动时,它们有时需要以不同的方式呈现,要么带有图标,要么在它们不在默认位置时带有额外的上下文。当贡献视图时,作者现在可以提供 icon
属性和 contextualTitle
。如果未提供,这些属性将默认为其贡献的视图容器的图标和标题。
最后,扩展作者现在可以直接将视图容器贡献到 panel
,而不是 activitybar
,如 树视图扩展指南中所述。
固定标签页
您现在可以从上下文菜单或使用新命令 workbench.action.pinEditor
(⌘K ⇧Enter(Windows,Linux Ctrl+K Shift+Enter)) 来固定标签页。
主题:GitHub Light
固定标签页具有许多有用的功能,可帮助标记对您重要的文件
- 固定标签页始终显示在非固定标签页之前。
- 如果您打开了很多标签页,它们不会滚动出视图。
- 使用诸如关闭其他之类的命令时,它们不会关闭。
- 即使您超出了打开的编辑器数量的设置限制,它们也不会关闭。
您也可以拖放标签页以更改固定状态。
固定标签页在视觉上缩小到图标的大小(如果禁用图标,则会显示文件名的第一个字母)以节省空间。如果您想查看带有固定标签页的脏指示器,可以将 workbench.editor.highlightModifiedTabs: true
设置为 true。
注意:我们仍在考虑呈现固定标签页的其他方式。如果您有意见,请随时在现有的问题中分享您的想法,例如显示辅助标签栏或具有一个设置来显示更多固定标签页的上下文。
搜索编辑器
有几个新选项用于配置如何创建 搜索编辑器
search.searchEditor.defaultNumberOfContextLines
- 配置搜索编辑器默认显示的上下文行数。search.searchEditor.reusePriorSearchConfiguration
- 在创建新的搜索编辑器时重用上一个活动搜索编辑器的配置。- 支持在键绑定参数中传递搜索编辑器配置变量(参数详细信息)。
资源管理器自动显示焦点而不强制滚动
explorer.autoReveal
设置有一个新选项 focusNoScroll
。使用此选项时,资源管理器会在打开文件时自动选择文件,但不会滚动以在资源管理器视图中显示它们。
列表和树的平滑滚动
启用 workbench.list.smoothScrolling
设置将使在缺少平滑滚动硬件(例如,Windows 上的独立鼠标滚轮)的列表中和树中滚动更加平滑。
调整大小栏大小配置
您现在可以使用 workbench.sash.size
设置来配置视图/编辑器之间拖动区域的反馈区域大小(以像素为单位)。如果您觉得使用鼠标很难调整视图大小,请将其设置为更大的值。
屏幕广播模式字体大小
新的 screencastMode.fontSize
设置允许您配置屏幕广播模式中使用的字体大小(以像素为单位)。
受信任的链接保护
VS Code 现在将允许直接打开指向您的工作区中任何 GitHub 远程的 URL 链接。此外,如果您已使用 GitHub 登录,则所有指向您的 GitHub 个人资料下的页面的链接都将被信任。
编辑器
跨文件撤消已关闭的文件
现在可以跨文件进行撤消,即使这些文件在此期间已关闭。将重新打开编辑的文件,并且将在所有受影响的文件中撤消跨文件操作(例如重命名符号)。
不寻常的行终止符
VS Code 目前将 CR(回车符)、LF(换行符)和 CRLF 识别为行终止符。一些编程语言对行终止符的定义不同。例如,LS(行分隔符)和 PS(段落分隔符)在 C# 和 JavaScript 中是行终止符,但在 HTML、PHP 或 Java 中则不是。当 VS Code 与语言服务器通信时,这些行尾差异可能会导致问题,因为 VS Code 和语言服务器之间使用 (行;字符)
坐标来传递各种概念。如果行终止符的定义不同,则会导致文件中行和位置的映射不同。
打开文件时,VS Code 现在会检查打开的文件中是否存在 LS 或 PS,并会提示并请求删除这些字符的权限。这些不常见的行终止符在实践中很少见,很可能是通过复制粘贴意外插入到源代码中的。
集成终端
改进的链接支持
上个月的集成终端链接预览已取代旧的实现。新的链接实现现在支持:
- 通过使用编辑器的链接检测,改进了 Web 和
file://
链接的检测。 - 文件夹链接支持,可以在资源管理器中打开文件夹或打开新的 VS Code 窗口。
- 不同链接类型的不同链接操作,回退到搜索工作区的“单词”链接(基于
terminal.integrated.wordSeparators
设置)。 - 与编辑器类似的链接高亮显示和悬停体验。
主题:Topaz (Dim)
任务
在最近的任务性能改进的基础上,运行生成任务 不再总是向扩展请求其任务。如果您的文件夹的 tasks.json
中配置了默认生成任务,则 运行生成任务 将仅尝试解析该任务,而不是在运行默认生成任务之前查找所有扩展的所有任务。
源代码管理
在终端中打开
您现在可以从源代码管理视图的上下文菜单中在终端中打开存储库。
从 GitHub 添加远程
您现在可以使用 Git:添加远程... 命令将 GitHub 存储库作为远程添加到您的本地存储库。
发布到 GitHub 时生成 .gitignore
现在可以将工作区发布到 GitHub 时生成 .gitignore
文件。将工作区发布到 GitHub 时,系统会提示您选择要包含在存储库中的文件,并且未包含的文件将添加到 .gitignore
文件中。
输入字段字体系列
您现在可以使用 Scm:输入字体系列 设置自定义源代码管理输入字段中使用的字体系列。该设置支持以下值:
default
- 工作台用户界面字体系列。editor
- 在 编辑器:字体系列 设置中指定的字体系列。字体系列名称
- 要在输入字段中使用的字体系列的名称(例如,Cascadia Code
)。
中止正在进行的变基
您现在可以使用 Git:中止变基 命令中止正在进行的变基操作。
调试
自动调试配置改进
在本里程碑中,我们改进了自动调试配置的体验
-
在上一个里程碑中,我们引入了一个功能,以便扩展作者可以分析当前项目并自动提供调试配置。这些调试配置是动态创建的,因此它们不会显示在
launch.json
配置文件中。只要它们可以开箱即用,这很好,但是有时您可能需要修改配置,例如添加一个额外的参数。现在可以选择将自动调试配置保存到launch.json
中,以便打开它进行编辑。要执行此操作,请使用 调试:选择并开始调试 快速选择中的自动调试配置末尾的齿轮按钮 -
现在可以从“运行和调试”开始视图中显示所有自动调试配置。
-
调试下拉列表现在会记住先前选择的自动调试配置。
单步执行目标
调试包含许多嵌套函数调用的语句可能会很痛苦,因为您可能必须单步执行您不真正感兴趣的函数。为了改进这种情况,调试适配器协议支持“单步执行目标”功能,该功能显示 UI 以直接单步执行您感兴趣的函数。
在本里程碑中,VS Code 已开始使用此功能。当调试停止在语句上时,上下文菜单会显示一个新操作 单步执行目标。此操作会显示当前堆栈帧中所有可用目标(通常是函数)的列表。选择其中一个将单步执行到该目标。
请注意,每个堆栈帧都可以有自己的目标集。因此,单步执行目标 操作的结果取决于“调用堆栈”视图中当前选择的帧。
目前,只有 Mock Debug 扩展具有(伪)单步执行目标 支持,但很快其他调试扩展也将跟进 - 例如 Julia 调试器。
语言
TypeScript 3.9
VS Code 现在包含 TypeScript 3.9.4。此主要的 TS 更新带来了一些新的工具功能、性能改进和许多错误修复。您可以在 TypeScript 博客上阅读有关 TS 3.9 的更多信息。
CommonJS 自动导入
如果 VS Code 检测到您正在使用 CommonJS 风格的 JavaScript 模块,自动导入现在将使用 require
而不是 import
。
重构保留换行符
JavaScript 和 TypeScript 的重构(例如 提取到方法 和 移动到新文件)现在尝试保留重构源代码的原始格式。这包括选择中存在的任何换行符
添加所有缺失导入的源操作
VS Code 长期以来一直支持一个快速修复,该修复添加 JavaScript 或 TypeScript 文件中所有缺失的导入。在此迭代中,我们引入了一个新的 添加所有缺失导入 源操作,可让您从文件中的任何位置触发此操作。
这也允许您为 添加所有缺失导入 设置键绑定
{
"key": "ctrl+shift+i",
"command": "editor.action.sourceAction",
"args": {
"kind": "source.addMissingImports",
"apply": "first"
}
}
甚至可以在保存时启用 添加所有缺失导入
"editor.codeActionsOnSave": [
"source.addMissingImports"
]
JS/TS 工作区中的转到符号包括所有打开的项目
默认情况下,JavaScript 和 TypeScript 的工作区符号搜索现在搜索所有打开的 jsconfig
和 tsconfig
项目。它以前仅包括来自焦点文件所属项目的搜索结果。
此行为由 typescript.workspaceSymbols.scope
设置控制,并且需要 TS 3.9+。要恢复到以前的行为并且仅搜索当前项目,请设置 "typescript.workspaceSymbols.scope": "currentProject"
添加缺失的导入快速修复现在可以标记为首选
JavaScript 和 TypeScript 的 添加缺失的导入 快速修复现在可以标记为错误的首选修复。这使您可以使用单个按键 ⌥⌘. (Windows, Linux Shift+Alt+.) 添加缺失的导入。
请注意,仅当存在单个有效导入时,添加缺失的导入 才会被标记为首选修复。如果您的项目中存在多个潜在的导入,您仍然需要使用正常的代码操作菜单来选择要使用的导入。此外,要在 JavaScript 中启用 添加缺失的导入 快速修复,您必须启用类型检查。
JSON 离线模式
一个新设置 json.schemaDownload.enable
可让您控制是否允许 JSON 扩展从 http
和 https
获取 JSON 模式。
当当前编辑器想要使用无法下载的模式时,状态栏中会出现一个警告三角形。然后,基于模式的功能(如验证、代码完成和悬停)将受到限制。
浏览器支持
选项卡标题中的调试停止指示器
在浏览器中调试扩展时,被调试的扩展会显示在一个新的浏览器选项卡中,该选项卡会停用(隐藏)调试器选项卡。当被调试者由于某种原因停止时,例如,命中一个断点,我们无法激活调试器选项卡(因为浏览器没有为此提供 API)。这使得几乎不可能发现被调试的扩展已停止。
为了缓解这个问题,我们现在更新选项卡标题以包含一个红色圆圈指示器 🔴(类似于断点)。一旦激活调试器选项卡,红色圆点就会被删除。
从集成终端运行 VS Code
当您在浏览器中运行的 VS Code 中打开集成终端时,您可以键入 code
以访问几个在浏览器中都很有用的命令。
在此迭代中,我们扩展了对许多选项的支持
--goto
在特定行上打开文件--diff
比较两个文件--wait
让程序等待文件关闭--add
将文件夹添加到当前工作区
例如,在 GitHub Codespaces 中,这使您可以将基于浏览器的 VS Code 用作 Git 的编辑器
主题:GitHub Light
文件/文件夹上传
VS Code 允许您将文件拖放到文件资源管理器中以进行上传。在此迭代中,我们改进了此功能,允许您拖放文件夹以进行上传,包括所有子文件夹和文件。由于这可能是一个长时间运行的操作,您将在状态栏中看到报告的进度,并且可以根据需要取消该操作。
帐户管理
在之前的版本中,我们引入了新的账户管理 UI 的预览版,以及设置同步功能的预览版。现在,此 UI 将默认显示。使用新的 身份验证提供程序 API 的扩展可以在此处显示登录请求,您可以查看您的帐户并管理扩展访问权限。目前使用此 API 的扩展数量有限,一旦 API 稳定,我们将致力于提高采用率。
预览功能
预览功能尚未准备好发布,但功能足以使用。我们欢迎您在它们开发过程中提供早期反馈。
设置同步
我们过去几个月一直在努力支持跨机器同步 VS Code 首选项,此功能可在 Insiders 版本上进行预览。
在此里程碑中,我们增强了对管理和诊断设置同步的支持。
已同步的机器视图
我们添加了已同步的机器视图,以显示同步您的 VS Code 首选项的机器列表。根据您使用的 VS Code 类型(Insiders 或 Stable)和平台,会提供默认名称,但您始终可以使用视图中机器条目上的编辑操作来更新名称。
主题:带有自定义项的 GitHub Sharp
您可以使用命令面板中的 首选项同步:显示同步数据 命令打开此视图。
同步数据视图
我们向同步数据视图添加了以下增强功能。
- 您现在可以看到数据正在从哪台机器同步。
- 您可以使用视图中数据条目上的还原操作还原到特定状态。
- 您可以使用视图标题中的更多操作(...)按钮下的重置同步数据操作重置云上的数据。
主题:带有自定义项的 GitHub Sharp
我们现在在开启同步时提供更多帮助,检查您是否要与来自不同机器的数据同步,并允许您采取适当的操作。
- 替换本地 - 将当前机器上的数据替换为云中的同步数据。
- 合并 - 将当前机器上的数据与云中的同步数据合并。
- 显示同步数据 - 打开同步数据视图以查看云中的同步数据。
新的 JavaScript 调试器
本月,我们继续在新 JavaScript 调试器上取得进展。自 5 月中旬以来,它已成为 Insiders 上的默认调试器,并包含在此版本的 VS Code Stable 中(但默认情况下未启用)。您可以通过启用 debug.javascript.usePreview
设置开始使用现有的启动配置。
本月的工作主要集中在完善和稳定现有功能上
- 浏览器调试的多标签支持: 您现在可以在运行浏览器或 Webview 时附加到多个标签页。默认情况下,js-debug 会附加到与
urlFilter
匹配的所有标签页。附加到浏览器时,您可以在启动配置中设置"targetSelection": "pick"
以像之前的调试器一样连接到单个标签页。 - 改进的标签页消除歧义: 调试会话名称更准确地消除了多个标签页的歧义。此外,我们在“调用堆栈”视图中为调试会话的上下文菜单添加了 焦点标签页 操作,您可以使用该操作来确保您正在查看正确的页面。
- 自动展开 getter 的选项: 与 Chrome 的行为匹配,默认情况下,属性 getter 在“变量”视图或“调试控制台”中显示时不会进行评估。您现在可以通过设置
debug.javascript.autoExpandGetters
选项来配置此行为。 - webpack 包类型的性能改进: 某些类型的 webpack 包(使用
eval
sourcemap 构建的包)在 js-debug 下运行速度较慢。现在它们不再如此。
TS 4.0 夜间构建支持
VS Code 1.46 包括对 TypeScript 4.0 夜间构建的预览支持。夜间构建包括我们正在积极开发的一些新工具功能的支持,例如 用于重构的更灵活的选择。
您今天可以通过安装 TypeScript Nightly 扩展 来尝试 TypeScript 4.0 夜间构建。请分享反馈,并告知我们您是否在 TypeScript 4.0 中遇到任何错误。
对扩展的贡献
笔记本
快速大纲
笔记本扩展(例如 GitHub Issue Notebooks)现在支持快速大纲。按 kb('workbench.action.gotoSymbol')
,或使用 转到编辑器中的符号 命令,查看当前笔记本的所有 Markdown 和代码单元格的预览。
主题:GitHub 主题
错误和符号导航
我们改进了 F8
和 查找所有引用 的工作方式。所有代码导航手势都应该感觉像在笔记本之外一样自然。例如,“问题”视图现在将显示所有单元格的所有错误,按笔记本分组,而不是再按单元格分组。
主题:GitHub 主题
连接/拆分单元格
我们引入了两组命令,让您可以快速连接单元格或将单元格拆分为更小的片段
主题:GitHub 深色主题
保留的笔记本
固定的或已更改的笔记本编辑器现在在工作区中是持久的,因此,如果笔记本被移动到后台或移动到另一个编辑器组,用户不会丢失笔记本中的工作状态。
主题:GitHub 深色主题
统一的撤消/重做堆栈
用户操作(如操作笔记本单元格或修改笔记本单元格内容)现在在同一个撤消/重做堆栈中进行跟踪。
主题:GitHub 深色主题
GitHub Pull Requests and Issues
我们正在继续开发 GitHub Pull Requests and Issues 扩展,它允许您处理、创建和管理拉取请求和问题。此版本的一些更新包括
- 改进了问题悬停中的标签。
- 问题和用户建议现在仅在注释和纯文本中触发。
- 新的问题编辑器允许您设置受让人和标签。
要了解所有新功能和更新,您可以查看该扩展的 0.17.0 版本的完整变更日志。
远程开发
我们正在继续开发 远程开发扩展,它允许您使用容器、远程计算机或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.46 中的新功能包括
- 开发容器:支持 GPG 转发。
- 开发容器:支持检查 Docker 卷。
- 开发容器:新的
devcontainer.json
命令属性。
您可以在 远程开发发行说明 中了解新的扩展功能和错误修复。
十六进制编辑器
随着自定义编辑器 API 最终确定了对 二进制编辑器 的支持,我们开发了一个 十六进制编辑器扩展,以提供原生的十六进制编辑体验。
此扩展仍在开发中,目前仅支持以十六进制形式打开和导航文件。我们将继续改进导航体验,然后再支持编辑。您可以试用该扩展,并提供反馈或在 vscode-hexeditor 存储库 中提出问题。
扩展编写
文件路径大小写
我们修复了 VS Code 在不区分大小写的文件系统上处理路径和 URI 的一些错误。在此版本之前,具有不同大小写的路径不会打开同一文档,而是单独打开断开连接的文档。这种行为常常引起混淆,有时会导致数据丢失。
但是,在修复这些错误时,openTextDocument
函数的行为已更改。该函数现在可以返回具有与传入的 URI 大小写不同的 URI 的文档。这意味着扩展应使用 TextDocument#uri 作为事实来源,而不是它们请求的 URI。
下面的示例说明了新行为
// case-insensitive file system
const uriA = vscode.Uri.file('/foo/bar.code');
const docA = await vscode.workspace.openTextDocument(uriA);
const uriB = vscode.Uri.file('/foo/BAR.code');
const docB = await vscode.workspace.openTextDocument(uriB);
assert.ok(docA === docB); // same document
assert.ok(docB.uri.toString() === uriA.toString()); // uriA is used, NOT uriB
assert.ok(docB.uri.toString() !== uriB.toString());
新的调试控制台主题颜色
有新的颜色可用于设置调试控制台视图的样式
debugConsole.infoForeground
:调试控制台中信息消息的前景色debugConsole.warningForeground
:调试控制台中警告消息的前景色debugConsole.errorForeground
:调试控制台中错误消息的前景色debugConsole.sourceForeground
:调试控制台中源文件名的前景色debugConsoleInputIcon.foreground
:调试控制台输入标记图标的前景色
新的输入主题颜色
我们还为输入提供了新的颜色主题选项。您可以通过 inputOption.activeForeground
设置活动输入选项的前景色。这些选项会显示在“搜索”视图和“查找”小组件(编辑器、终端、调试控制台)中。
主题:GitHub 深色主题
新的 codicon 图标
我们已将以下新图标添加到我们的 codicon 库
server-process
server-environment
record
pass
stop-circle
play-circle
主题:GitHub 深色主题
提供程序使用泛型类型
我们的 vscode.d.ts
类型现在使所有两阶段提供程序(具有单独的“提供”和“解析”方法的提供程序)成为泛型。目标是更清楚地表明“提供”调用的结果会传递回“解析”调用。
例如,以下是 DocumentLinkProvider
的新泛型定义
export interface DocumentLinkProvider<T = DocumentLink> {
provideDocumentLinks(
document: TextDocument,
token: CancellationToken
): ProviderResult<T[]>;
resolveDocumentLink?(link: T, token: CancellationToken): ProviderResult<T>;
}
所有提供程序都有一个默认泛型参数,因此此更改不应导致现有扩展出现任何错误。如果您以前在实现“解析”时使用强制转换或类型检查,请考虑更新您的代码以改用泛型提供程序
class MyDocLinkProvider implements DocumentLinkProvider<MyDocumentLink> {
provideDocumentLinks(document: TextDocument, token: CancellationToken): MyDocumentLink[] { ... }
resolveDocumentLink(link: MyDocumentLink, token: CancellationToken): MyDocumentLink { ... }
}
在 Webview 中编写特定于主题的 CSS
Webview 的 body 元素有一个新的数据属性,名为 vscode-theme-name
,用于存储当前活动主题的完整名称。这让您可以在 Webview 中编写特定于主题的 CSS
body[data-vscode-theme-name="One Dark Pro"] {
background: hotpink;
}
请记住,考虑到 VS Code 可用的主题数量,您应该仅在特殊情况下编写特定于主题的 CSS。正常的 Webview 应改为使用 .vscode-light
和 .vscode-dark
类名以及 VS Code CSS 变量 来编写 CSS,以适应用户选择的任何主题。
自定义二进制编辑器
我们已最终确定自定义二进制编辑器的 API。自定义编辑器 API 允许扩展创建自定义的基于 Webview 的编辑器,这些编辑器可以替换 VS Code 的默认文本编辑器,或者用户可以切换到这些编辑器。这可以用于直接在 VS Code 中预览资产文件(例如图像或 3D 模型),或者用于为特定文件类型构建更专业的编辑界面。借助新的二进制自定义编辑器 API,您现在还可以为非基于文本的文件格式构建读/写编辑器。
有关 自定义编辑器扩展指南 更详细地介绍了 API。另请查看 自定义编辑器扩展示例,其中包含文本和二进制文件格式的自定义编辑器示例。
放宽的 resolveCompletionItem
CompletionItemProvider#resolveCompletionItem 函数允许提供程序延迟地用更多数据丰富补全项。此“延迟”数据必须是可选的,并且不得更改补全项的插入行为。扩展程序仍然可以填写 additionalTextEdits
,并且如果其他编辑在补全项插入**之后**到达,编辑器仍会尝试应用它们。请注意,这仅适用于其他编辑,不适用于主编辑 (insertText
),主编辑一旦提供就不得更改。
onStartupFinished 激活事件
我们现在有一个新的激活事件,类似于已经存在的 *
激活事件。当扩展程序希望在 VS Code 启动后不久(但不是作为启动的一部分)被激活时,应使用新的 onStartupFinished
激活事件。
环境变量集合
ExtensionContext.EnvironmentVariableCollection
API 现在是稳定的,并允许扩展程序为终端环境做出贡献。
const collection = context.environmentVariableCollection;
const separator = process.platform === 'win32' ? ';' : ':';
collection.prepend('PATH', `/foo${separator}`);
collection.replace('JAVA_HOME', '/bar');
这些集合是特定于扩展程序和工作区的,VS Code 处理多个扩展程序之间的冲突。它们会跨窗口重新加载进行持久化,以便在窗口加载后立即创建的终端不会阻塞扩展主机启动,而是使用上次已知的版本。这些持久化集合可以通过释放集合或卸载扩展程序来删除。
当集合更改时,终端上会出现一个指示符。此指示符是显示任何活动更改还是仅显示“过时”终端,由 terminal.integrated.environmentChangesIndicator
设置定义。此 API 现在也由内置的 Git 扩展程序使用,以使 VS Code 成为身份验证提供程序。
调试适配器协议
新的指令断点
现在有一种新的“指令”断点类型,可以中断内存地址上的指令。内存地址以符号形式指定,可以从 evaluate
、variables
、stackTrace
和 gotoTargets
请求中可选地获得。相应的能力 supportsInstructionBreakpoints
指示调试适配器是否支持指令断点。
支持“单步粒度”
一个新的可选 granularity
参数已添加到单步请求 next
、stepIn
、stepOut
、stepBack
中,以控制该请求是单步执行“语句”、“行”还是“指令”。相应的能力 supportsSteppingGranularity
指示调试适配器是否支持该功能。
建议的扩展 API
每个里程碑都附带新的提议 API,扩展程序作者可以试用它们。一如既往,我们希望收到您的反馈。以下是您试用提议 API 需要执行的操作
- 您必须使用 Insiders 版本,因为提议的 API 会频繁更改。
- 您必须在扩展程序的
package.json
文件中包含以下行:"enableProposedApi": true
。 - 将 vscode.proposed.d.ts 文件的最新版本复制到项目的源位置。
请注意,您不能发布使用提议 API 的扩展程序。下一个版本中可能会有重大更改,我们绝不希望破坏现有的扩展程序。
Git 扩展程序 API
内置的 Git 扩展程序 提供一个 API 供扩展程序使用。现有的 API 提供了一种获取 Repository
的 log
结果的方法。更新的 API 现在允许通过 path
约束 log
。
export interface LogOptions {
readonly maxEntries?: number;
readonly path?: string;
}
export interface Repository {
log(options?: LogOptions): Promise<Commit[]>;
}
现在还有一个 Git 扩展程序 API,可以根据 BranchQuery
getBranches
。
export interface BranchQuery {
readonly remote?: boolean;
readonly contains?: string;
}
export interface Repository {
getBranches(query: BranchQuery): Promise<Ref[]>;
}
AccessibilityInformation
我们已将 AccessibilityInformation
添加到 TreeItem
、StatusBarItem
和 TimelineItem
元素,以支持屏幕阅读器。AccessibilityInformation
包含 label
和 role
。label
由屏幕阅读器读取,而 role
描述了元素的可访问性特征。
工程
Windows ARM64 Insiders
适用于 ARM 64 位 Windows 的新的官方 Insiders 版本已在 Insiders 下载页面上提供。
这些版本适用于 Microsoft Surface Pro X,因此请试用一下,并告诉我们您的想法。
用于诊断问题的 --crash-reporter-directory 参数
新的命令行参数 --crash-reporter-directory
允许您传递一个本地文件夹,您希望将崩溃报告保存在该文件夹中。这甚至适用于扩展主机中的崩溃,并且可以在 VS Code 崩溃并且您想报告问题时使用。
预加载脚本
我们已将 Electron preload
脚本添加到 VS Code,以便向窗口公开某些 Electron API。这是实现完全沙盒化窗口的第一步。进度在 问题 #92164 中进行了概述。
扩展程序示例现在使用 ESLint
我们的 扩展程序示例 都已更新为使用 ESLint 进行代码检查,而不是现在已弃用的 TSLint。如果您的扩展程序仍在使用 TSLint,您可以查看 TSLint 到 ESLint 迁移指南和我们新更新的扩展程序示例,了解如何迁移到 ESLint。
GitHub Triage 扩展程序
我们为基于 Chromium 的浏览器创建了一个扩展程序,通过提供一个可模糊过滤的指派者、标签、里程碑和我们用来触发问题分类的各种特殊评论的菜单,帮助我们在 GitHub 上进行问题分类 GitHub Actions。我们已将代码 在 GitHub 上开源。
文档和扩展
Build 大会上的 Visual Studio Code
VS Code 团队在 Microsoft Build 2020 大会上进行了演示,您可以在此 VS Code at Build 博客文章中找到 VS Code 会议和在线演讲的概述。
VS Code 团队成员的多次演讲
- VS Code 提示和技巧 - 20 个提示和技巧,让您在使用 VS Code 时更高效。
- 每个 Visual Studio Code 用户都应该了解的有关 GitHub 的内容 - 了解 VS Code 的 GitHub 集成,以了解 PR 和问题。
- 使用 Visual Studio Code 进行远程开发 - 了解 Visual Studio Code 如何使开发人员能够从任何地方远程工作。
- Visual Studio Code 的历史 - 了解 VS Code 的起始和发展历程,直到今天。
Azure 扩展程序
现在有几个新的扩展程序,用于直接从 VS Code 中处理和部署 Azure 资产。
- Azure Static Web Apps - 直接从 VS Code 创建和管理 Azure Static Web Apps。
- Azure 数据库 - 在 Azure 中创建、浏览和更新全局分布的多模型数据库。
新命令
快捷键 | 命令 | 命令 ID |
---|---|---|
⌘K ⇧Enter(Windows、Linux Ctrl+K Shift+Enter) | 固定编辑器 | workbench.action.pinEditor |
⌘K ⇧Enter(Windows、Linux Ctrl+K Shift+Enter) | 取消固定编辑器 | workbench.action.unpinEditor |
值得注意的修复
- 10144:在 Linux 上使用 system-ui 作为字体
- 63068:macOS Dock 图标很小
- 69163:在侧栏中显示活动文件时引发异常
- 95367:为无效的 frameId 发出 DAP “evaluate” 请求
- 95856:“转到行”应包含“filename.extension:行号”格式
- 96713:从调用堆栈操作视图停止会话始终转到活动会话
- 96914:在轮廓可见时键入时出现延迟
- 96987:Orca 不会读取断点视图中的行号
- 97444:从调试监视复制长值会导致粘贴部分值
- 97471:调试悬停太窄,水平滚动无用
- 97731:VS Code 在键入和滚动时冻结
- 96643:任务(和 TaskExecutions)在 onDid(Start|End)Task 回调中不 ===
感谢
最后但并非最不重要的一点,衷心感谢以下人员本月为 VS Code 做出的贡献
对我们问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
对 vscode
的贡献
- AlexStrNik (@AlexStrNik)
- Andrew Branch (@andrewbranch):提议:允许使用 --inspect-brk 生成 TS 服务器 PR #98340
- Christos Pappas (@ChrisPapp)
- @D-to-the-K:在 Monaco Monarch 语言定义中支持 Unicode 感知的正则表达式 PR #98447
- Rick van Galen (@DCKcode):Containerfile 支持 PR #93184
- Paul (@DFineNormal):修复 snippets.contribution.ts 中的拼写 PR #98396
- matt penrice (@elmpp):为具有方案的文件路径创建 VsCodeResource PR #94986
- HaoboGu (@HaoboGu):修复 #98102 PR #98127
- HiDeoo (@HiDeoo):修复 vscode.d.ts 中的错别字 PR #98692
- Ilia Pozdnyakov (@iliazeus):添加
:行 goto 模式 #95856 PR #96535 - Andrii Dieiev (@IllusionMH):修复调试图标。使用 Codicons 而不是文本 PR #98716
- Jack Works (@Jack-Works): 更新 typescript.code-snippets PR #98521
- @Jagua: 修复 json-language server readme 的缩进和拼写错误 PR #97812
- Jānis Gailis (@JanisGailis): 为 Monokai Dimmed 主题添加终端颜色 PR #98323
- Jean Pierre (@jeanp413)
- John Keech (@jkeech): 清除 webview 上过时的 CSS 样式属性 PR #96665
- John Blackbourn (@johnbillion): 将 *.ts.map 文件视为 JSON PR #98409
- Robert Jin (@jzyrobert): #84696 修改 git add/revert 以使用 splitInChunks PR #84843
- Danny Lin (@kdrag0n): 恢复并修复 macOS 深色文本选择光标 PR #96947
- Leila Pearson (@leilapearson): 修复资源管理器中文件名排序的极端情况。 PR #97200
- Lissein (@lissein): 修复 titleBar 主题颜色上的注释 PR #97360
- Max (@MaxGyver83): 使 Neo 键盘布局(第 4 层)方向键在资源管理器视图中工作 PR #98269
- Alasdair McLeay (@penx): CSS - 在父文件夹中搜索 node 模块解析 PR #81555
- Pieter Vanderpol (@petevdp): 允许内联差异编辑器居中显示。 PR #97311
- Pascal Fong Kye (@pfongkye): 修复:新命令 stageAllMerge PR #97349
- James Koss (@phuein): 不要滚动到显示的文件选项。 PR #96890
- Jack Platten (@plttn): 修复拼写错误 PR #97198
- @ricksentam: 更改构建 PR #98857
- Robert Rossmann (@robertrossmann)
- shskwmt (@shskwmt): 功能 #94173:插入建议时滚动 PR #94327
- Steven Hermans (@steven166): 在浏览器工作台中通过拖放上传文件夹 PR #97347
- Rahul Kadyan (@znck): 特性:使用 configNamespace 注册其他扩展的语言提供程序 PR #95621
- Jakub Trąd (@Dzejkop): 搜索编辑器:添加默认的显示上下文值属性 PR #97920
对 language-server-protocol
的贡献
- (@KamasamaK)
- Knut Aldrin (@zub): 更正“aritfacts”的拼写 PR #980
- Remy Suen (@rcjsuen): 修复将 "revers" 拼写为 "reverse" 的错误 PR #995
- Steven Kalt (@SKalt): 使用粘性表头 PR #1000
对 vscode-generator-code
的贡献
- Alexey Elizarov (@beautyfree): 修复:深色主题的无效 JSON PR #207
对 vscode-vsce
的贡献
- Owen Farrell (@owenfarrell): 支持从环境变量注入 PAT PR #447
对 debug-adapter-protocol
的贡献
- @auott
- Vitalii Akimov (@awto): adapters.md 中的 Effectful JavaScript 调试器参考 PR #113
- @tomcec: 更新 adapters.md PR #115
- Andrew Wang (@WardenGnaw): 更新 C/C++ DAP 维护者 PR #117
- FW (@fwcd): 添加 Kotlin 调试适配器 PR #120
对 vscode-js-debug
的贡献
- Vadym Okun (@cbmd): 增加了使用选定的包管理器而不是仅使用
npm
运行的可能性。 PR #459
对 localization
的贡献
在过去的一年中,我们认真听取了您的反馈,并决定是时候提供一个更可靠、更具交互性的平台,您可以在其中为 VS Code 本地化开发做出贡献。考虑到这一点,我们在 4 月的第一周正式关闭了 Microsoft 本地化社区平台 (MLCP),目的是在另一个开源本地化项目平台上继续 Microsoft 社区本地化计划。
请在接下来的几周内关注我们 Wiki 页面上关于新社区平台的公告。您也可以访问 FAQ 页面,获取有关此平台过渡的答案。