2020 年 5 月(1.46 版)
更新 1.46.1:本次更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 2020 年 5 月发布的 Visual Studio Code。
- 辅助功能改进 - 状态栏导航,更方便的键盘文本选择。
- 灵活的视图和面板布局 - 在侧边栏和面板中移动和分组视图。
- 固定编辑器选项卡 - 将编辑器固定在标题栏中,以便常用文件触手可及。
- 从 GitHub 添加远程 - 将 GitHub 远程添加到本地仓库。
- 自动调试配置 - 保存和修改生成的调试配置。
- JavaScript CommonJS 自动导入 - 自动导入现在将对 CommonJS 模块使用
require
。 - JS/TS 重构保留换行符 - 在重构操作期间保留格式。
- 设置同步预览 - 新的同步计算机和数据视图用于管理你的首选项。
- GitHub Issue Notebooks - 运行 GitHub issue 查询并在自定义 Notebook 中显示结果。
- 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
。
注意:我们仍在考虑其他呈现固定选项卡的方式。如果你有意见,请随时在关于显示辅助选项卡栏或具有显示固定选项卡更多上下文的设置的现有问题中分享你的想法。
搜索编辑器
有几个新选项用于配置如何创建搜索编辑器
search.searchEditor.defaultNumberOfContextLines
- 配置搜索编辑器默认显示的上下文行数。search.searchEditor.reusePriorSearchConfiguration
- 在创建新的搜索编辑器时重用上次活动的搜索编辑器的配置。- 支持在键绑定参数中传递搜索编辑器配置变量(参数详情)。
资源管理器自动显示焦点而不强制滚动
explorer.autoReveal
设置有一个新选项focusNoScroll
。使用此选项时,资源管理器将在打开文件时自动选择文件,但不会滚动以在资源管理器视图中显示它们。
列表和树的平滑滚动
启用workbench.list.smoothScrolling
设置将使在缺少平滑滚动硬件(例如,Windows 上的独立鼠标滚轮)的列表和树中滚动更加平滑。
Sash 大小配置
现在可以使用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: Input Font Family设置自定义源代码管理输入字段中使用的字体族。该设置支持以下值
default
- 工作台用户界面字体族。editor
- 在编辑器:字体族设置中指定的字体族。font family name
- 输入字段中要使用的字体族的名称(例如,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 with Customizations
你可以使用命令面板中的首选项同步:显示已同步数据命令打开此视图。
同步数据视图
我们对“同步数据”视图添加了以下增强功能。
- 现在你可以看到数据是从哪台机器同步的。
- 你可以使用视图中数据条目上可用的“恢复”操作恢复到特定状态。
- 你可以使用视图标题中“更多操作”(...)按钮下可用的“重置同步数据”操作重置云端数据。
主题:GitHub Sharp with Customizations
现在,通过检查你是否即将与来自不同机器的数据同步并允许你采取适当的操作,我们在开启同步时提供了更多帮助。
- 替换本地 - 用云端同步数据替换当前机器上的数据。
- 合并 - 将当前机器上的数据与云端同步数据合并。
- 显示同步数据 - 打开“同步数据”视图以查看云端同步数据。
新的 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 的任何错误。
对扩展的贡献
Notebook
快速大纲
笔记本扩展,例如GitHub 问题笔记本,现在支持快速大纲。按下kb('workbench.action.gotoSymbol')
,或使用转到编辑器中的符号命令,查看当前笔记本中所有 Markdown 和代码单元格的预览。
主题:GitHub 主题
错误和符号导航
我们改进了F8
和查找所有引用的工作方式。所有代码导航手势都应该像在笔记本之外一样自然。例如,“问题”视图现在将显示按笔记本分组的所有单元格的所有错误,而不是按单元格分组
主题:GitHub 主题
合并/拆分单元格
我们引入了两组命令,可让你快速合并单元格或将单元格拆分为更小的片段
保留的 Notebook
固定或脏的 Notebook 编辑器现在在工作区中是持久的,因此如果 Notebook 移到后台或移到另一个编辑器组,用户不会丢失 Notebook 中的工作状态。
统一的撤消/重做堆栈
用户操作操纵 Notebook 单元格或修改 Notebook 单元格内容现在在同一撤消/重做堆栈中进行跟踪。
GitHub 拉取请求和议题
GitHub 拉取请求和问题扩展的工作仍在继续,该扩展允许你处理、创建和管理拉取请求和问题。此版本的一些更新包括
- 改进了问题悬停中的标签。
- 问题和用户建议现在仅在评论和纯文本中触发。
- 新问题编辑器允许你设置受让人和标签。
要了解所有新功能和更新,你可以查看扩展的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
设置活动输入选项的前景颜色。这些颜色会出现在搜索视图和查找小部件(编辑器、终端、调试控制台)中。
新的 codicon 图标
我们已将以下新图标添加到我们的codicon库中
server-process
server-environment
record
pass
stop-circle
play-circle
提供程序使用泛型类型
我们的vscode.d.ts
类型现在使所有两阶段提供程序(即具有单独的“提供”和“解析”方法的提供程序)成为泛型。目的是使“提供”调用的结果更清楚地传递回“解析”调用。
例如,这是DocumentLinkProvider
的新泛型定义
export interface DocumentLinkProvider<T = DocumentLink> {
provideDocumentLinks(
document: TextDocument,
token: CancellationToken
): ProviderResult<T[]>;
resolveDocumentLink?(link: T, token: CancellationToken): ProviderResult<T>;
}
所有提供程序都有一个默认的泛型参数,因此此更改不应导致现有扩展出现任何错误。如果您以前在实现“resolve”时使用过强制转换或类型检查,请考虑更新您的代码以改用泛型提供程序
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 激活事件
我们现在有一个新的激活事件,类似于已经存在的*
激活事件。新的onStartupFinished
激活事件应该在扩展希望在 VS Code 启动后不久激活时使用,而不是作为启动的一部分。
环境变量集合
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 现在将允许log
受path
限制。
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
添加到TreeItem
、StatusBarItem
和TimelineItem
元素中,以支持屏幕阅读器。AccessibilityInformation
包含一个label
和一个role
。屏幕阅读器读取label
,role
描述元素的辅助功能特性。
工程
Windows ARM64 Insiders
Windows ARM 64 位版现已推出新的官方 Insider 版本,可在Insider 下载页面上获取。
这些版本适用于 Microsoft Surface Pro X,请试用一下并告诉我们你的想法。
--crash-reporter-directory 参数用于诊断问题
一个新的命令行参数--crash-reporter-directory
允许你传递一个本地文件夹,你希望将崩溃报告保存到该文件夹。这甚至适用于扩展主机中的崩溃,并且可以在 VS Code 崩溃且你想要报告问题时使用。
预加载脚本
我们已将 Electron preload
脚本添加到 VS Code 中,用于向窗口公开某些 Electron API。这是迈向完全沙盒化窗口的第一步。进度在问题 #92164中概述。
扩展示例现在使用 ESLint
我们的扩展示例都已更新为使用ESLint进行 linting,而不是现在已弃用的 TSLint。如果您的扩展仍在使用 TSLint,您可以查看TSLint 到 ESLint 迁移指南以及我们新更新的扩展示例,了解如何迁移到 ESLint。
GitHub 分类扩展
我们为基于 Chromium 的浏览器创建了一个扩展,通过提供一个可模糊过滤的指派人、标签、里程碑以及我们用于触发分类GitHub Actions的各种特殊注释的单一菜单,帮助我们在 GitHub 上进行问题分类。我们已将代码在 GitHub 上开源。
文档和扩展
Build 上的 Visual Studio Code
VS Code 团队在Microsoft Build 2020会议上进行了演讲,你可以在这篇Build 上的 VS Code博客文章中找到 VS Code 会话和在线讲座的概述。
VS Code 团队成员的几场演讲
- VS Code 提示与技巧 - 20 个提示与技巧,助你提高 VS Code 工作效率。
- 每个 Visual Studio Code 用户都应该了解的 GitHub - 了解 VS Code 对 PR 和问题的 GitHub 集成。
- 使用 Visual Studio Code 进行远程开发 - 了解 Visual Studio Code 如何让开发者可以在任何地方进行远程工作。
- Visual Studio Code 的历史 - 了解 VS Code 如何诞生并演变至今。
Azure 扩展
有几个新的扩展可用于直接在 VS Code 中使用和部署 Azure 资产。
- Azure 静态 Web 应用 - 直接从 VS Code 创建和管理 Azure 静态 Web 应用。
- 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:DAP“evaluate”请求针对无效的 frameId 发出
- 95856:Go To Line 应该包含“filename.extension:line number”格式
- 96713:从调用堆栈操作视图停止会话总是转到活动会话
- 96914:当大纲可见时,打字会滞后
- 96987:Orca 不会读取断点视图中的行号
- 97444:从调试监视中复制长值导致粘贴部分值
- 97471:调试悬停太窄,水平滚动无用
- 97731:VS Code 在打字和滚动时冻结
- 96643:Tasks(和 TaskExecutions)在 onDid(Start|End)Task 回调中不等于 ===
感谢
最后但同样重要的是,衷心感谢以下本月为 VS Code 做出贡献的人们:
对我们问题跟踪的贡献
- 约翰·默里 (@gjsjohnmurray)
- 安德烈·迪耶夫 (@IllusionMH)
- 亚历山大 (@usernamehw)
- 陈赛门 (@yume-chan)
- 阿图罗·登特 (@ArturoDent)
对 vscode
的贡献
- AlexStrNik (@AlexStrNik)
- Andrew Branch (@andrewbranch):提案:允许 TS Server 使用 --inspect-brk 启动 PR #98340
- 克里斯托斯·帕帕斯 (@ChrisPapp)
- @D-to-the-K:在 Monaco Monarch 语言定义中支持 Unicode 感知的正则表达式 PR #98447
- Rick van Galen (@DCKcode):容器文件支持 PR #93184
- Paul (@DFineNormal):修复 snippets.contribution.ts 中的拼写错误 PR #98396
- matt penrice (@elmpp):为 schemed 文件路径创建 VsCodeResource PR #94986
- HaoboGu (@HaoboGu):修复 #98102 PR #98127
- HiDeoo (@HiDeoo):修复 vscode.d.ts 中的拼写错误 PR #98692
- Ilia Pozdnyakov (@iliazeus):添加
:line 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
- 让·皮埃尔 (@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 - 在父文件夹中搜索节点模块解析 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
- 罗伯特·罗斯曼 (@robertrossmann)
- shskwmt (@shskwmt):功能 #94173:插入建议时滚动 PR #94327
- Steven Hermans (@steven166):通过浏览器工作台中的 D&D 上传文件夹 PR #97347
- Rahul Kadyan (@znck):feat:使用 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 本地化开发做出贡献。考虑到这一点,我们在四月的第一周正式停用了 Microsoft 本地化社区平台 (MLCP),旨在在另一个开源本地化项目平台上继续进行 Microsoft 社区本地化计划。
请在接下来的几周内关注我们的Wiki页面,了解有关新社区平台的公告。您还可以访问常见问题页面,获取有关此平台过渡的答案。