2020 年 2 月 (版本 1.43)
更新 1.43.1:本次更新解决了这些问题。
更新 1.43.2:本次更新解决了这些问题。
下载:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 2020 年 2 月版 Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,其中一些主要亮点包括:
- 搜索编辑器 - 在全尺寸编辑器中搜索并保存您的全局搜索结果。
- 可拖拽的调整框角 - 通过拖拽调整框角轻松更改编辑器布局。
- Linux 屏幕阅读器支持 - VS Code 现在支持 Orca 屏幕阅读器。
- 迷你地图大小选项 - 新增选项以适应或填充迷你地图的垂直布局。
- 列选择模式 - 列模式切换让您可以快速选择文本块。
- 选择时显示空白字符 - 仅在选定文本中呈现空白字符。
- 转换为模板字符串重构 - 将拼接转换为 JavaScript/TypeScript 模板字符串。
- JS/TS 调用层次结构视图 - 查看函数的所有调用(传入或传出),并深入查看调用者的调用者。
- 远程开发 - 支持 Windows 和 macOS SSH 主机,SSH 连接共享。
- 设置同步预览 - 设置同步让您可以在不同机器间共享设置和键盘快捷方式。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
Insider 版本:想尽快尝试新功能吗?您可以下载每日Insider 版本,并在最新更新发布后立即试用。获取 Visual Studio Code 的最新新闻、更新和内容,请在 Twitter 上关注我们:@code!
工作台
搜索编辑器
经过在 Insider 版本上几次迭代的稳定化,我们发布了搜索编辑器,它允许您在全尺寸编辑器中查看工作区搜索结果,并带有语法高亮和可选的上下文行。这在一段时间内一直是一个高度请求的功能。
下面是对单词“SearchEditor”的搜索结果,匹配前后各两行文本作为上下文:
主题:A Touch of Lilac,字体:Hasklig
在搜索编辑器中,可以使用转到定义操作导航到结果,例如 F12 在当前编辑器组中打开源位置,或者 ⌘K F12 (Windows、Linux Ctrl+K F12) 在侧边编辑器中打开位置。此外,双击也可以选择打开源位置,这可以通过 search.searchEditor.doubleClickBehaviour
设置进行配置。
您可以通过搜索编辑器:打开新的搜索编辑器命令,或使用搜索视图顶部的打开新的搜索编辑器按钮来打开新的搜索编辑器。此外,您还可以通过结果树顶部的在编辑器中打开链接,或搜索编辑器:在编辑器中打开结果命令,将现有搜索视图中的结果复制到搜索编辑器。
注意:您可以尝试实验性的 搜索编辑器:应用更改 扩展,将您在搜索编辑器中进行的编辑同步回源文件。
可拖拽的调整框角
您知道可以通过抓取和拖拽两个正交调整框之间的交点来同时调整它们的尺寸吗?这在编辑器调整框上已经可行,现在它也适用于编辑器和视图之间的边缘。
主题:GitHub Sharp,字体:Fira Code
经公证的 macOS 版本
macOS 版 Visual Studio Code 现已获得 Apple 公证,因此您应该不再会收到以下对话框:
有关更多详细信息,请阅读调查问题和Apple 的开发者文档。
进度通知
从本版本开始,指示长时间运行操作的通知行为略有不同。
- 它们不再提供通用的关闭按钮,因为这会给人操作是否取消的错误印象。您仍然可以按 Esc 键隐藏通知。
- 当通知被隐藏但操作仍在进行时,通知会在状态栏中指示其操作进度。
后者的更改有助于您知道在您关闭通知后,某个操作(例如长时间运行的保存操作)仍在后台继续运行。
下面,操作将继续运行,直到选择取消按钮:
主题:Dracula Official,字体:Fira Code
无标题编辑器
新增设置 workbench.editor.untitled.labelFormat
允许您控制无标题编辑器是否使用文件内容作为标题。可能的值为 content
或 name
。配置 'workbench.editor.untitled.labelFormat': 'name'
可恢复之前的行为,即无标题编辑器将有一个简短的标题,例如 Untitled-1。
当文本粘贴到无标题编辑器时,VS Code 现在会自动尝试从第一行文本中检测语言模式。例如,如果第一行包含典型的 XML 头部 <?xml version="1.0" encoding="UTF-8"?>
,粘贴 XML 将在粘贴后自动设置 XML 模式。
通过应用程序链接打开工作区
VS Code 支持通过协议链接(例如 vscode://file/<file-path>
)打开文件。在此里程碑中,我们扩展了支持,包括打开文件夹或工作区。
文件夹或工作区的语法与文件相同。
vscode://file/<path>
vscode-insiders://file/<path>
欢迎视图
欢迎视图是工作台的新增功能,它允许视图在没有有意义内容可显示时,为用户创建内容或配置 VS Code 提供起始体验。一些视图已经采用了这种基础设施,例如文件资源管理器,它将提供打开文件夹或克隆 Git 仓库以帮助您开始使用。
主题:GitHub Sharp
源代码管理欢迎视图
得益于新的欢迎视图基础设施,源代码管理视图现在在某些情况下提供了更好的体验,否则它会显示为空。例如,当未检测到 Git 安装时,它现在可以引导用户打开文件夹或克隆仓库,或安装 Git。
主题:GitHub Sharp
编辑器
迷你地图大小
有一个新设置 editor.minimap.size
,它控制迷你地图如何使用垂直空间:
- 当设置为
proportional
(默认值)时,迷你地图中的每行都会获得一定量的垂直空间,具体取决于editor.minimap.scale
。例如,在高 DPI 显示器上,如果配置的比例为1
(默认值),每行在迷你地图中占用 4 像素。因此,对于 100 行的文件,迷你地图中渲染的行高为 400 像素;对于 1000 行的文件,则为 4000 像素。这意味着对于大文件,迷你地图也会随当前文件的滚动而滚动。 - 当设置为
fit
时,迷你地图的高度被限制为不超过编辑器高度。因此,如果文件有很多行,它们将被采样,并且只有一部分将在迷你地图中渲染,这样迷你地图就不需要滚动。 - 当设置为
fill
时,迷你地图的高度始终与编辑器高度相同。对于大文件,这也是通过采样行实现的;但对于小文件,这是通过为每行保留更多垂直空间(拉伸行)来实现的。
这里大小从 proportional
更改为 fit
,然后在较小的文件中从 fit
更改为 fill
:
迷你地图背景和滑块颜色
现在有新的颜色选项用于自定义迷你地图及其滑块。其中一种新颜色是 minimap.background
,当颜色设置为透明(降低 #RRGGBBAA 透明通道)时,迷你地图将透明渲染:
{
"workbench.colorCustomizations": {
"minimap.background": "#00000055"
}
}
列选择模式
新增一个全局切换,可通过选择 > 列选择模式菜单项访问。一旦进入此模式,如状态栏所示,鼠标手势和箭头键将创建列选择:
您也可以从状态栏禁用列选择模式。
选择时显示空白字符
editor.renderWhitespace
设置的默认值已从 none
更改为 selection
。现在,空白字符将默认在高亮文本上渲染。
这里,制表符和空格空白字符在选定区域中显示:
速览中的定义链接
现在可以更精细地控制转到定义鼠标手势的行为。默认情况下,通过鼠标转到定义会在单独的编辑器中打开,但如果新设置 editor.definitionLinkOpensInPeek
为 true
,则该手势将在速览视图中打开。
在折叠行上任意位置展开
新增一个设置编辑器:行尾点击后展开 (editor.unfoldOnClickAfterEndOfLine
),它控制当您点击折叠行右侧的空白区域(在 ...
之后)时会发生什么。当设置为 true
时,您可以在折叠行文本后的任何位置点击,而无需担心精确选择省略号 (...
)。默认情况下,此选项是关闭的。
跨多个文件撤消文本编辑
当撤消影响多个文件的重命名或代码操作时,VS Code 现在将允许您撤消所有受影响文件中的更改。
撤消跨文件编辑时会显示提示:
注意:文件操作(例如文件重命名)尚不受支持。例如,Java 中重命名类名(文件名也会被重命名)尚不支持跨文件撤消。
多种颜色的多尺标
现有设置 editor.rulers
已扩展,允许定义具有自定义颜色的尺标。在以下截图中,第 80 列有一个洋红色尺标,第 90 列有一个红色尺标:
{
"editor.rulers": [
{ "column": 80, "color": "#ff00ff" },
{ "column": 90, "color": "#ff0000" }
]
}
编辑器顶部和底部填充
现在可以使用 editor.padding.top
和 editor.padding.bottom
在编辑器的顶部或底部保留空白区域(像素数)。
这是顶部填充 50 像素的编辑器:
{
"editor.padding.top": 50
}
主要滚动轴
当使用现代触摸板尝试垂直滚动时,文件也经常会水平滚动。现在有一个新设置 editor.scrollPredominantAxis
(默认设置为 true),它会阻止“对角线”滚动。这会强制滚动手势要么是垂直的,要么是水平的(根据最高的绝对滚动增量),但绝不会是对角线。
Linux 上的 Shift+Insert
在 1.42 版本中,Shift+Insert
被修改为从选择剪贴板粘贴。我们收到了大量反馈,称这打破了现有的肌肉记忆,因此我们决定回滚,让 Shift+Insert
像以前一样从常规剪贴板粘贴。
辅助功能
Linux 屏幕阅读器支持
在社区的帮助下,我们一直在努力使 VS Code 在 Linux 上通过 Orca 屏幕阅读器实现无障碍访问。Orca 和 Chromium 仍在积极开发屏幕阅读器支持,因此为了使其完全正常工作,还需要一些事情:
- 确保使用 Orca 主分支的最新版本。说明可在问题 #91063 中找到。
- 确保在 VS Code 中将设置
"editor.accessibilitySupport": "on"
打开。您可以使用设置,或运行显示辅助功能帮助命令并按 Ctrl+E 开启屏幕阅读器优化模式。
启用该设置后,VS Code 应该可以与 Orca 屏幕阅读器一起使用了。
语言
TypeScript 3.8.3
VS Code 现在捆绑了 TypeScript 3.8.3。此主要更新带来了对新语言功能的支持,包括ECMAScript 私有字段、顶级 await 表达式和export * as ns 语法,以及许多工具功能和改进。此次更新还修复了许多重要错误。
您可以在 TypeScript 博客上阅读更多关于 TypeScript 3.8 的信息。
转换为模板字符串重构
您可以为 JavaScript 和 TypeScript 使用新的转换为模板字符串重构,以快速将字符串拼接转换为模板字符串:
JavaScript 和 TypeScript 的调用层次结构支持
TypeScript 3.8 带来了 JavaScript 和 TypeScript 的调用层次结构支持。
支持 http(s) @link JSDoc 内联标签
IntelliSense 现在为 http 和 https 链接渲染 JS Doc @link 内联标签。在下面的示例图片中,请注意 lightbulb menu
的 @link
如何在悬停提示中渲染:
@link
到 URL 适用于 JavaScript 和 TypeScript,并在悬停提示、建议详情和签名帮助中渲染为可点击的链接。
TypeScript 语义高亮
语义高亮现在默认对 TypeScript 和 JavaScript 启用。语义高亮由 TypeScript 语言服务器提供,并基于 TextMate 语法高亮之上。默认语法 (TextMate) 高亮器将许多标记分类为 variables
,而这些标记现在被解析为命名空间、类、参数等等。
语义高亮由以下设置控制:
"editor.semanticHighlighting.enabled": true
JSON 架构
在将文件名与架构关联时,您现在也可以使用排除模式。排除模式以“!”开头。要匹配,至少一个模式需要匹配,并且最后一个匹配模式不能是排除模式。
"json.schemas": [
{
"fileMatch": [
"/receipts/*.json",
"!/receipts/*.excluded.json"
],
"url": "./receipts.schema.json"
}
]
调试
UI 中“运行”更加突出
用户研究表明,新用户在 VS Code 中难以找到如何运行他们的程序。其中一个原因是现有“调试”功能与“运行”程序没有关联。因此,我们正在使“运行”在 UI 中更加突出。
- 主菜单调试已变为运行菜单。
- 运行和调试视图已变为运行视图,并且相应的活动栏图标现在显示一个带有小“bug”装饰的大型“播放”图标。
调试控制台分组
VS Code 调试控制台现在支持输出分组。调试扩展可以指示何时应将调试控制台输出归入一个共同的父级。目前,只有 Mock Debug 扩展实现了输出分组,但很快其他调试扩展也会跟进——最值得注意的是 JavaScript 调试器。
禁用调试控制台历史建议
您现在可以通过新设置 debug.console.historySuggestions
关闭调试控制台中的历史建议。默认情况下,历史建议是开启的。
集成终端
Unicode 11 支持
终端中字符的宽度现在默认为 Unicode 11 宽度。这对大多数人来说意味着表情符号将正确显示为宽字符。
更好地支持 Alt+Click 导航提示
终端有一个功能,允许您 Alt+Click
一个单元格,光标将导航到该单元格。以前,在 shell 提示符下,这只适用于单行,即使它已换行。这已得到改进,可以在完整的换行行上工作。
主题:Sapphire
请注意,这可能在 Windows 上尚不能正常工作,但 ConPTY 的最新更改应该会在未来改进此问题。
任务
任务快速选择更新
执行运行任务命令时显示的任务快速选择已更新,以显示哪些任务提供程序仍在运行。如果您不需要来自该提供程序的任务,停止检测按钮将立即向您显示已检测到的任务,这样您就不必等待任何缓慢的任务提供程序。
主题:One Dark Pro,字体:Fira Code
任务实例限制
任务的 "runOptions"
现在包含一个 "instanceLimit"
,它指定允许的任务实例数量。默认的 "instanceLimit"
为 1。
promptString 密码输入
"promptString"
用户输入类型可以设置 "password": true
,这将导致下拉输入框像密码一样遮盖键入的内容。
预览功能
预览功能尚未准备好发布,但已足够实用。我们欢迎您在这些功能开发期间提供早期反馈。
设置同步
过去几个月,我们一直在努力支持跨机器同步 VS Code 设置、扩展和键盘快捷键(热门功能请求 #2743)。在此里程碑中,我们很高兴地宣布,此功能已准备好在我们的下一个 1.44.0 Insider 版本中进行预览。您现在可以在所有机器上的所有 VS Code 安装中同步您的偏好设置。您还可以以最小的工作量,在新机器上用您的个人偏好设置引导 VS Code。
以下视频演示了在新机器上本地应用扩展和设置:
目前,设置、键盘快捷键、扩展和显示语言已同步,但我们计划添加更多内容。您可以查看我们提议的设置同步功能列表。
机器设置(带有 machine
或 machine-overridable
范围)默认不进行同步。您还可以从“设置”编辑器中添加或删除此列表中的设置,或使用 sync.ignoredSettings
设置。
主题:GitHub Sharp
键盘快捷键默认按平台同步。如果您的键盘快捷键与平台无关,您可以通过禁用 sync.keybindingsPerPlatform
设置来跨平台同步它们。
所有内置和已安装的扩展及其全局启用状态都将同步。您可以选择跳过同步某个扩展,无论是通过“扩展”视图还是使用 sync.ignoredExtensions
设置。
主题:GitHub Sharp
设置同步支持在同步时检测设置和键盘快捷键中的冲突。冲突通过差异编辑器显示,传入(远程)更改在左侧,本地更改在右侧。您可以通过在右侧编辑器中编辑并使用编辑器中提供的操作合并更改来解决冲突。
这里通过接受远程操作选择了远程 colorTheme
设置值:
主题:GitHub Sharp, GitHub Sharp Dark
设置同步活动可以在日志(同步)输出视图中监控。所有本地偏好设置在同步过程中发生更改时,都会在磁盘上备份 30 天。您可以使用命令同步:打开本地备份文件夹来访问备份位置并检索旧的偏好设置。
主题:GitHub Sharp
您可以随时关闭同步,无论是在当前的 VS Code 实例上还是在您所有的 VS Code 安装上。选择禁用所有同步时,您的数据将从云端删除。
注意:设置同步使用 Microsoft 账户存储您的 VS Code 偏好设置以进行同步,因此您需要一个账户才能使用此功能。欲了解更多信息,请参阅设置同步文档。
时间线视图
在本次迭代中,我们继续在新的时间线视图上取得进展。它现在默认在 Insiders 版本中启用,并且可以通过以下设置在稳定版中启用:
"timeline.showView": true
下面是时间线视图显示的文件 Git 提交历史记录:
我们现在增加了分页支持(通过上面显示的加载更多操作),并在右侧添加了相对时间戳。扩展还可以向时间线视图以及单个时间线项贡献菜单项。在上面的截图中,内置的 Git 扩展贡献了命令复制提交 ID和复制提交消息。
新的 JavaScript 调试器
本月我们继续在新 JavaScript 调试器上取得进展。它在 Insiders 版本中默认安装,并可在 VS Code 稳定版中从市场安装。您可以通过启用 debug.javascript.usePreview
设置来开始将其与现有启动配置一起使用。以下是本月我们添加的一些新功能:
美化打印
主题:Earthsong,字体:Fira Code
调试器现在可以美化打印文件,这在处理压缩源代码时特别有用。当您步进或打开一个看起来被压缩的文件时,它会显示一个提示,您也可以通过调试:美化打印用于调试命令手动触发美化打印。
您可以通过选择从不,或将设置 debug.javascript.suggestPrettyPrinting
更改为 false
来关闭建议提示。
支持 Microsoft Edge 和 WebView2
我们现在支持启动新的 Microsoft Edge 浏览器,只需将您的调试类型从 chrome
或 pwa-chrome
更改为 pwa-msedge
即可试用。它支持 chrome
支持的所有相同配置设置。
随之而来的是对 Windows 桌面应用程序中 WebView2 控件的支持。查看我们的WebView 演示,了解如何设置此功能。
远程调试
您现在可以在新调试器中从远程工作区(如 GitHub Codespaces 或 Remote SSH)调试浏览器源代码。要进行设置,请端口转发您的 Web 服务器(或使用一个简单的静态 Web 服务器),然后创建一个指向转发端口的 chrome
或 pwa-msedge
启动配置。
例如
{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-msedge",
"request": "launch",
"name": "Debug my App",
"url": "https://:5000" // <- debug an app forwarded on port 5000
}
]
}
当您启动调试会话时,您的机器上将打开一个浏览器,您可以像往常一样从 VS Code 进行调试。
更多视图可移动
上一个版本中,VS Code 只是让您体验了一下将视图重新定位到面板。在此版本中,此体验已扩展到更多视图。您现在可以移动诸如调试/运行视图或新的时间线视图。您还可以将视图移动到侧边栏中的其他视图。例如,也许您想将打开的编辑器视图移动到源代码管理视图。您可以通过拖拽视图并将其放置在活动栏或面板中所需的位置来完成所有这些操作。
下面的动画突出显示了将打开的编辑器视图移动到不同的视图,然后再移动到面板:
主题:Horizon Bright,字体:Cascadia Code
我们还引入了一个新命令,使键盘移动视图更加容易:视图:移动焦点视图 (workbench.action.moveFocusedView
)。
这是一个预览功能,如果您遇到无法解决的状态,可以使用一个命令将所有视图重置到其原始位置:视图:重置视图位置 (workbench.action.resetViewLocations
)。
对扩展的贡献
远程开发
对远程开发扩展的工作仍在继续,这些扩展允许您使用容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
1.43 版本的功能亮点包括:
- 通过应用程序链接打开远程工作区。
- 远程 - SSH:支持 Windows 和 macOS SSH 主机。
- 远程 - SSH:默认开启连接共享。
- WSL:查看最近的在 WSL 2 中使用 Docker 博客文章。
您可以在远程开发发行说明中了解有关新扩展功能和错误修复的信息。
Vetur
Vue.js 的 Vetur 扩展现在包含对模板插值更好的自动补全。您可以在 0.24.0 版本中找到更改日志。
扩展创作
调试器扩展 API
调试欢迎视图
如欢迎视图内容 API 部分所述,debug
视图现在已开放以接收欢迎视图内容贡献。这些添加可用于引导初学者用户使用简化运行或调试程序的特定功能。
为了防止视图被过多的欢迎视图内容贡献弄得杂乱无章,我们建议仅对当前活动语言启用单个贡献。为了方便起见,我们引入了一个新的上下文键 debugStartLanguage
,它被设置为上次使用调试器的活动编辑器语言。
例如,如果您的调试器针对 Python,则您仅在 debugStartLanguage == "python"
时贡献欢迎视图内容。如果您的调试器针对多种语言,您可以使用 OR 运算符 (||
) 组合多个条件。
新调试悬停 API
如今,VS Code 的调试悬停使用基于正则表达式的启发式方法来查找鼠标下的表达式,VS Code 调试器会对其进行评估,然后将结果显示在悬停提示中。由于正则表达式不可配置,并非所有语言都能正确处理(或者不能充分处理)。问题 #84044、#89603 和 #89332 描述了典型问题。
在此里程碑中,我们引入了新的扩展 API 来控制调试悬停的行为。
可以为某种语言注册 EvaluatableExpressionProvider
,以提供鼠标下的表达式,VS Code 调试器将针对活动的调试会话对其进行评估。
这是一个来自 Mock debug 示例的简单示例,展示了一个基于 getWordRangeAtPosition
API 的(简单)实现:
vscode.languages.registerEvaluatableExpressionProvider('markdown', {
provideEvaluatableExpression(
document: vscode.TextDocument,
position: vscode.Position
): vscode.ProviderResult<vscode.EvaluatableExpression> {
const wordRange = document.getWordRangeAtPosition(position);
if (wordRange) {
return new vscode.EvaluatableExpression(wordRange);
}
return undefined; // nothing evaluatable found under mouse
}
});
不再转义空白字符
VS Code 调试器 UI 不再转义或引用从调试扩展或调试适配器接收到的任何空白字符。例如,在 DAP 变量或作为 DAP 输出事件接收到的所有字符串都将按原样显示在 UI 中,不进行修改。
这意味着现在由调试扩展或调试适配器决定在将数据发送到 VS Code 之前是否需要转义空白字符。更多详细信息可在问题 #73845 中找到。
CodeAction.disabled
通过 CodeAction.disabled
属性,扩展现在可以告诉 VS Code 为什么用户当前的选择无法执行给定的 CodeAction
。这对于重构特别有用。
这是我们代码操作示例扩展中使用 .disabled
的一个示例。
import * as vscode from 'vscode';
export class Emojizer implements vscode.CodeActionProvider {
public provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range
): vscode.CodeAction[] | undefined {
const action = new vscode.CodeAction(
`Convert to ${emoji}`,
vscode.CodeActionKind.Refactor.append('emojize')
);
if (!this.isAtStartOfSmiley(document, range)) {
// Tell the user why our action is not available
action.disabled = { reason: 'Selection is not currently on a :)' };
return [action];
}
action.edit = new vscode.WorkspaceEdit();
action.edit.replace(
document.uri,
new vscode.Range(range.start, range.start.translate(0, 2)),
'😀'
);
return action;
}
}
如果用户尝试通过键盘快捷键应用一个禁用的代码操作,VS Code 将向用户显示 .disabled
错误消息:
此外,为了帮助提高可发现性,禁用的代码操作在重构和源代码操作上下文菜单中显示为灰色:
请注意,禁用的操作不会显示在顶层灯泡菜单中。
Terminal.exitStatus
扩展现在可以确定终端是否已退出,如果已退出,则确定使用的退出代码(如果有)。
window.onDidCloseTerminal(t => {
if (t.exitStatus && t.exitStatus.code) {
vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
}
});
为诊断错误添加链接
我们已将建议的诊断链接 API 升级到稳定版。
class Diagnostic {
...
/**
* A code or identifier for this diagnostic.
* Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
*/
code?: string | number | {
/**
* A code or identifier for this diagnostic.
* Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
*/
value: string | number;
/**
* A target URI to open with more information about the diagnostic error.
*/
target: Uri;
};
}
工作区编辑元数据
我们已完成 WorkspaceEditEntryMetadata
API。它允许扩展作者对工作区编辑的更改进行分类,特别是当更改在应用前需要审核时。
调试适配器协议
支持输出事件中的分组
在 output
事件中添加了一个可选的 group
属性,以便通过分组相关消息来组织输出日志。group
的可能值为 start
和 startCollapsed
(分别用于打开展开或折叠的组),以及 end
(用于关闭组)。
注意:从本版本开始,VS Code 支持此 DAP 增强功能。
通过完成项放置光标
可选的 selectionStart
和 selectionLength
属性已添加到完成项中。通过这些属性,可以在插入完成文本后控制客户端的当前选择(或插入符位置)。
注意:VS Code 尚未支持此 DAP 增强功能。它计划在下一个版本中实现。
提案:进度事件
我们在向调试适配器协议添加进度事件的提案上取得了一些进展。如果您感兴趣,可以参与此 DAP 功能请求的讨论。
语言服务器协议
语言服务器协议 3.16 版的工作已开始。
新版本中包含的建议支持包括:
- 完成项的插入/替换编辑。
- 诊断上的结构化代码(例如链接支持)。
- 对符号信息和文档符号的标签支持。
建议的扩展 API
每个里程碑都会带来新的提议 API,扩展作者可以进行尝试。一如既往,我们渴望您的反馈。以下是试用提议 API 的方法:
- 您必须使用 Insiders 版本,因为提议的 API 经常更改。
- 您的扩展的
package.json
文件中必须包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您项目的源位置。
请注意,您不能发布使用提议 API 的扩展。下一个版本中可能会有重大更改,我们绝不希望破坏现有扩展。
自定义编辑器 API
本次迭代我们继续在自定义编辑器 API 提案上工作。值得注意的更改包括:
- 将 API 方法重命名为更短、更一致的名称。
- 通过引入
CustomTextEditorProvider
简化了文本文件的自定义编辑器创建。此自定义编辑器使用 VS Code 的常规TextDocument
作为其数据模型,这样您就不必自己实现save
、backup
和其他操作。这还使得资源自定义编辑器与同一资源的文本编辑器之间的实时同步变得容易。 - 引入
CustomDocument
来存储二进制CustomEditor
所使用的数据模型。每个资源有一个CustomDocument
,但用户可以在该资源上打开多个自定义编辑器。
请继续测试并分享关于我们的自定义编辑器 API 提案的反馈。尽管 API 的具体内容可能仍会更改,但我们相信当前的提案反映了我们希望很快最终确定的内容。
CodeActionProviderMetadata.documentation
我们修订了我们之前的提案,关于标准化扩展如何为其代码操作贡献文档。根据更新后的提案,文档现在通过 CodeActionProviderMetadata
类型上的 documentation
属性提供。
例如,这是我们内置的 JavaScript 和 TypeScript 扩展贡献文档的方式:
class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
public static readonly metadata: vscode.CodeActionProviderMetadata = {
providedCodeActionKinds: [ vscode.CodeActionKind.Refactor ],
documentation: [
{
kind: vscode.CodeActionKind.Refactor,
// This command opens a webpage when executed
command: {
command: LearnMoreAboutRefactoringsCommand.id,
title: localize('refactor.documentation.title', "Learn more about JS/TS refactorings")
}
}
]
};
...
}
文档在主代码操作列表之后渲染,每当用户请求重构时:
问题 #86788 跟踪该提案的状态。
欢迎视图内容 API
某些视图现在支持由扩展贡献的欢迎内容。有关更多信息,请参阅原始问题。
已采用此 API 的视图有:
explorer
- 文件资源管理器scm
- 源代码管理debug
- 运行/调试
例如,这是 Git 扩展对 explorer
欢迎视图贡献的克隆仓库欢迎视图内容:
主题:GitHub Sharp
OpenDialogOptions 和 SaveDialogOptions 标题
OpenDialogOptions
和 SaveDialogOptions
都具有一个提议的 title
属性。title
是否显示取决于平台,但如果平台显示 title
,它将显示在保存或打开对话框的上方。例如,内置命令工作区:将工作区另存为...将标题设置为保存工作区。
工程
Electron 7.0 更新
在此里程碑中,我们完成了将 Electron 7 捆绑到 VS Code 中的探索。这是一个主要的 Electron 版本,它附带 Chromium 78.0.3904.130 和 Node.js 12.8.1。
适用于 HDR 显示器
我们正在跟踪问题 #88491 中 Windows HDR 显示器用户报告的问题,即 VS Code 看起来暗淡且无法使用。这是所有基于 Chromium 78.0.3904.130 的应用程序都存在的问题,并且在 Chromium 81 的更新版本中已修复。一旦我们升级到 Electron 9,VS Code 就会获得此修复,并且存在一些技术原因导致该修复无法回溯到 Chromium 78。
与此同时,我们有一个临时的解决方案来解决这个问题:
- 打开命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))。
- 运行**首选项:配置运行时参数**命令。
- 此命令将打开一个
argv.json
文件以配置运行时参数。可能已经有一些默认参数。 - 将
"disable-color-correct-rendering": true
编辑为"disable-color-correct-rendering": false
。 - 重启 VS Code。
注意:除非您遇到问题,否则不要编辑此设置!
我们添加了这个默认运行时参数,以便我们可以覆盖 Chromium 的默认颜色校正为 sRGB,转而使用 macOS 上的显示颜色空间。这样做可以避免诸如问题 #84154 之类的问题,但对于 HDR 显示器无效。
“strict”: true
当我们首次发布 VS Code 时,TypeScript 仍然是一种新且快速发展的语言,缺少一些您现在可能习以为常的有用类型安全检查,例如严格空检查。在过去的几年里,TypeScript 团队引入了许多选项,使 TypeScript 编译器更加“严格”。这些严格选项可以捕获许多常见的编程错误,并消除整类错误。严格模式的好处已得到充分记录,我们一直希望为 VS Code 代码库启用严格模式。然而,考虑到需要修复构成核心 VS Code 代码库的大约五十万行源代码中的数千个错误,这样做似乎是一项几乎不可能完成的任务。
尽管如此,严格模式的价值仍然足够大,我们认为即使需要一些时间才能实现,也值得为之努力。因此,在过去两年中,我们一直在逐步更新我们的代码库以符合严格模式。我们所有这些工作都是逐步进行的,并直接在我们的开发分支中进行,以便每个与严格模式相关的修复都使我们的代码库对每个人都更安全一些。启用严格空检查可能是这个过程中最复杂的部分,我们在一篇博客文章中记录了我们如何完成这项工作。
本次迭代,我们终于完成了启用最后一个严格模式选项:strictFunctionTypes
。至此,一个相当平淡无奇的提交为我们整个代码库启用了严格模式!
启用严格模式是一段漫长的旅程,VS Code 核心团队的每个人以及许多社区成员都为此做出了贡献。然而,通过逐步完成这项工作,我们从一开始就受益于所有这些辛勤工作。展望未来,严格模式应该会鼓励最佳编码实践,使重构更安全,并最终使我们能够更快地发布,同时减少错误!
CI 构建性能提升
VS Code 使用 Azure Pipelines 进行持续集成构建,我们最近显著提升了构建性能。您可以在优化 CI 构建时间博客文章中了解更多信息。
针对浏览器运行测试
在此里程碑中,我们利用 Playwright 库,使所有测试(单元测试、集成测试、冒烟测试)都可以在浏览器中运行,从而增加了对 Chrome、Firefox 和 Safari 等浏览器的覆盖范围。您可以参阅我们的 VS Code 测试 README,了解如何运行这些测试。
值得注意的修复
- 61491: SCM: Viewlet 应该改进“无存储库”消息
- 74782: 调查:macOS 公证
- 82828: autoReveal 在资源管理器中高亮文件名所在位置,而无需总是将其移动到中间
- 8641: macOS: 允许鼠标按钮 4 和 5 导航历史记录
- 87767: VSCode 重启调试不再工作
- 88038: 不要用自动执行的调试器命令污染 shell 历史记录
- 89230: 编辑器聚焦时读取“组”
- 89699: 返回/前进:保留选择
- 89989: Web: 允许在新的窗口中打开文件
- 90075: 资源管理器:支持悬空符号链接
- 90240: Zen 模式关闭后行号不可见
- 90876: 列表项应具有 role 'listitem'
- 91166: 当问题面板打开时,警报过于冗长。
- 91238: 集成终端中的和弦键不起作用
感谢
最后但同样重要的是,衷心感谢!以下帮助使 VS Code 变得更好的各位:
对我们问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- ArturoDent (@ArturoDent)
- Gama11 (@Gama11)
对 vscode
的贡献
- @alpalla: 修复 #32264 - 允许同一任务的 N 个实例 PR #89872
- Baibhav Vatsa (@BaibhaVatsa): 移除 tsconfig.base.json 中冗余的标志 PR #91050
- Bailey Herbert (@baileyherbert)
- @bepvte: 将“贡献”重命名为“功能贡献” PR #89842
- @bolinfest
- Brett Cannon (@brettcannon): 修复命令文档中的复数问题 PR #89959
- Dor Mesica (@dormesica): 修复在终端中运行活动文件不带引号换行的问题 PR #90847
- Evan Krause (@evangrayk): 修复非编辑器 webview 中撤消/重做功能损坏的问题 PR #89961
- Ian MacFarlane (@eyeino): 创建新 git 分支时澄清语言 PR #90160
- John Murray (@gjsjohnmurray)
- lipgloss (@gloss-water): 主题:为迷你地图不透明度添加工作台配置选项 PR #58324
- Michael Gubik (@gubikmic): 仅滚动主要轴(防止滚动漂移) PR #70047
- Gustavo Cassel (@GustavoASC)
- @Helloimbob: 自动检测 csh 脚本为 shellscript PR #90960
- Jean Pierre (@jeanp413)
- Jonas Littorin (@jlittorin): 为类型为“promptString”的输入变量添加了密码属性。 PR #90482
- John Blackbourn (@johnbillion): 将 .envrc 文件视为 Shell 脚本 PR #90825
- Josh Goldberg (@JoshuaKGoldberg): 文档拼写错误:insertSpaces 中缺少 ` PR #90374
- @LadyCailin: 当高亮行是作用域开始/结束时,将缩进右移一位 PR #77762
- Maik Riechert (@letmaik): 文档:修复 package.json 字段名 "extensionDependency" PR #90103
- Gordey (@lgordey): 设置 UI:为同步设置添加分隔符 PR #91461
- Alex SK (@lxsk): 修复 #21849: 迷你地图:显示完整文档 PR #74425
- Dan (@mallardduck): 添加支持多种颜色的多尺标 PR #88453
- Rasmus (@neonsea): 避免用调试器命令污染 shell 历史记录 PR #88041
- @nrayburn-tech
- Przemek Adamczewski (@padamczewski): 修复:多光标复制行 N 次 (#_40646) PR #52645
- Peter Shinners (@PeterShinners):
task.autoDetect
描述的语法修复 PR #90117 - PM Extra (@PMExtra): 修复 JsonValidation 的一个小错误 PR #91237
- Ron Buckton (@rbuckton): 修复偏移量错误以改进 TS 调用层次结构中文件的显示 PR #89822
- Robert Rossmann (@robertrossmann): 像任何其他滚动条一样样式化差异编辑器的可滚动视口 PR #89660
- Oğuzhan Eroğlu (@rohanrhu): 添加记住结束键状态行为 PR #88664
- Michael Scovetta (@scovetta): 修复 #90555 (resetLocal() 不执行任何操作) PR #90556
- Sergio Schvezov (@sergiusens): Snap 修复 PR #91182
- Matthew Spencer (@sirmspencer): 添加新操作以关闭侧边栏 PR #90404
- Konstantin Solomatov (@solomatov): 修复扩展伪终端中的链接处理 PR #88458
- 태재영 (@TroyTae): 支持 front-matter 结束符的三点 PR #90122
- Victor Gomes (@vhpgomes): smartSelect 修复 PR #90736
- Waldemar Kornewald (@wkornewald): 揭示位置更靠近顶部(居中主体,而不是签名) PR #80727
- @zhengjiaqi: 编辑器动作运行支持参数 PR #87677
- Jiayue. Zhang (@zjysdhr): 修复 #88294 在 commit 接口中添加 commitData PR #89005
对 vscode-eslint
的贡献
- Yosuke Ota (@ota-meshi): 添加支持新的 eslint 建议 API PR #814
- Krasimir Nedelchev (@kaykayehnn): 修复拼写错误 PR #900
对 language-server-protocol
的贡献
- Lars Hvam (@larshp) specification 3.15, 修复拼写错误 PR #912
- Maxim Reznik (@reznikmm):
- 修复 specification-3-15.md markdown 格式 PR #913
- 删除 3.15 中多余的 foldingRangeProvider 定义 PR #914
- 删除 3.15 中多余的 ExecuteCommandOptions 定义 PR #915
- 将 3.15 markdown 中的 ts 替换为 typescript PR #916
- 删除重复的 TextDocumentRegistrationOptions PR #917
- 将选择范围相关功能添加到 3.15 PR #918
- 将 workspaceFolders/configuration/window 添加到 3.15 PR #930
- Christian Tietze (@DivineDominion) 修复拼写错误 PR #921
- Kun Ren (@renkun-ken) 修复拼写错误 PR #922
对 vscode-js-debug
的贡献
- SantoJambit (@SantoJambit): 仅获取 codelens 的根级别 scripts 属性 PR #351
对 vscode-languageserver-node
的贡献
- @Razzeee 修复拼写错误 PR #574
- Remy Suen (@rcjsuen): 修复语义令牌文件名中的拼写错误 PR #583
对 vscode-css-languageservice
的贡献
- Jorge del Casar (@jorgecasar): 添加支持解析 SCSS 中的 @apply 规则 PR #194
- Denis Malinochkin (@mrmlnc): 能够将建议参与者用于 SCSS/Less mixins PR #201
- Will Bender (@Ragnoroct): 修复规则集后的 SCSS 自动补全 PR #188
对 vscode-vsce
的贡献
- Robert Holt (@rjmholt): 添加 --noGitHubIssueLinking 以阻止包步骤中的问题链接扩展 PR #424
对 localization
的贡献
目前有超过 800 名 云+AI 本地化 社区成员在使用 Microsoft 本地化社区平台 (MLCP),其中有大约 170 名活跃的 Visual Studio Code 贡献者。我们感谢您的贡献,无论是提供新的翻译、投票支持翻译还是提出流程改进建议。
以下是 贡献者 的概览。有关项目详情,包括贡献者名单,请访问项目网站:https://aka.ms/vscodeloc。
- 中文(简体,中国) Yizhi Gu, Tingting Yi, Charles Dong, Justin Liu, 斌 项, ick, paul cheung, CHEN Shihuan, 普鲁文, 张锐, Zhiqiang Li, Joel Yang
- 中文(繁体,台湾) Yi-Jyun Pan, 高民 林
- 丹麦语(丹麦) Lasse Stilvang
- 荷兰语(荷兰) Koen Williame
- 英语(英国) Martin Littlecott, Henry Dearn, carlos baltazar
- 芬兰语(芬兰) Feetu Nyrhinen
- 法语(法国) Thierry DEMAN-BARCELÒ, Antoine Griffard, Rodolphe NOEL, Younes ZOBAIRI
- 德语(德国) Philip Kneifeld, Raphael Höser, nick rauch
- 印地语(印度) KRISHNA TANDON, Alish Vagadiya
- 匈牙利语(匈牙利) Levente Borbély
- 印尼语(印尼) Eriawan Kusumawardhono, Riwut Libinuko
- 意大利语(意大利) Luigi Bruno
- 日语(日本) TENMYO Masakazu, Koichi Makino
- 韩语(韩国) 강 성원, Hongju, 관우 정
- 拉脱维亚语(拉脱维亚) Andris Vilde, Atis Straujums
- 波兰语(波兰) Makabeus Orban, Mariusz Wachowski
- 葡萄牙语(巴西) Marcondes Alexandre, Arthur Lima, Marcelo Fernandes, Roberto Fonseca, Yuri Dantas, Luiz Gustavo Nunes, Thiago Takehana
- 葡萄牙语(葡萄牙) Diogo Barros
- 罗马尼亚语(罗马尼亚) LaServici
- 俄语(俄罗斯) Andrey Veselov, Vadim Svitkin, Дмитрий Кирьянов
- 西班牙语(西班牙,国际排序) Ricardo Estrada Rdez, Alvaro Enrique Ruano
- 泰米尔语(印度) Vijay Rajasekar, Selvakumarasamy G, Pandidurai R
- 土耳其语(土耳其) Mehmet Yönügül
- 越南语(越南) Hiếu Nguyễn, Van-Tien Hoang, Vương