2022 年 5 月 (1.68 版)
更新 1.68.1:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel Silicon | Linux:deb rpm tarball Arm snap
欢迎来到 2022 年 5 月发布的 Visual Studio Code。此版本有很多更新,希望您会喜欢,其中一些主要亮点包括:
- 配置显示语言 - 以各自语言查看已安装和可用的语言包。
- 问题面板表格视图 - 以表格形式查看错误和警告,以便快速按来源进行筛选。
- 已弃用的扩展 - 了解扩展是否已弃用或应被替换。
- 扩展赞助 - 支持您喜欢的扩展的开发者。
- 根据 .gitignore 隐藏资源管理器文件 - 重用现有的
.gitignore文件来隐藏资源管理器中的文件。 - 终端颜色和对比度增强 - 查找匹配项的背景颜色、最小对比度比。
- Git 分支保护 - 直接在 VS Code 中提供分支保护。
- TypeScript 转到源定义 - 直接跳转到符号的 JavaScript 实现。
- VS Code Web 版本地化 - vscode.dev 现在匹配您选择的浏览器语言。
- 开发容器规范 - 了解更多关于不断发展的开发容器规范。
- 预览:Markdown 链接验证 - 检测指向标题、图像和文件的损坏链接。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。
工作台
配置显示语言改进
配置显示语言命令已更新,包含
- 以该语言显示的语言名称。
- 可用语言部分显示您计算机上未安装的语言,选择一种语言将自动安装并应用该语言。

主题:Panda Theme
这应该有助于发现可用的语言包。请告诉我们您的想法!
问题面板表格视图
在此里程碑中,我们为用户添加了一项新功能,可以在树状视图和表格视图之间切换问题面板的视图模式。与树状视图相比,表格视图显示了每个问题的来源(语言服务或扩展),这允许用户按来源筛选问题。

您可以通过问题面板右上角的显示为表格/显示为树按钮切换视图 UI,或通过问题:默认视图模式设置 (problems.defaultViewMode) 更改默认视图模式。

已弃用的扩展
在此里程碑中,我们为 VS Code 中的已弃用扩展添加了支持。扩展可能只是被弃用,或者为了另一个扩展而被弃用,或者其功能已内置于 VS Code 中。VS Code 将在扩展视图中显示已弃用的扩展,如下所示。
已弃用且不再维护的扩展。

为了另一个扩展而弃用的扩展。在这种情况下,VS Code 不允许用户安装此扩展。

已弃用的扩展,其功能已内置于 VS Code 中,可以通过配置设置启用。

VS Code 不会自动迁移或卸载已弃用的扩展。将有一个迁移按钮来指导您切换到推荐的扩展。

注意:已弃用扩展的列表由 VS Code 维护。如果您认为某个扩展应该被弃用,请通过在此讨论中评论来联系我们。
赞助扩展
VS Code 现在允许用户赞助他们喜欢的扩展。当一个扩展可以被赞助时,VS Code 将在扩展视图详细信息页面显示一个赞助按钮,如下所示。

赞助按钮将带您到扩展的赞助 URL,您可以在那里提供支持。请参阅扩展赞助,了解如何为您的扩展选择加入此功能。
根据 .gitignore 隐藏资源管理器文件
文件资源管理器现在支持解析和隐藏被 .gitignore 文件排除的文件。这可以通过资源管理器:排除 Git 忽略 (explorer.excludeGitIgnore) 设置启用。此设置与 files.exclude 一起使用,以隐藏资源管理器中不需要的文件。
注意:目前,否定 glob(如 !package.json)无法解析。
锁定悬停位置
由于存在其他 UI 元素(例如滚动条),某些自定义悬停区域很难或无法鼠标悬停。按住 Alt 键(在悬停激活时)将“锁定”悬停,使其具有更宽的边框,并防止鼠标移出悬停区域而隐藏它。这主要是为了可访问性,让悬停区域能与屏幕放大镜配合得更好,但也适用于从悬停区域复制文本。请注意,此功能仅适用于编辑器外部,因为编辑器内的悬停区域始终可以鼠标悬停,除非通过 editor.hover.sticky 设置另有规定。
设置编辑器改进
设置编辑器现在显示特定于语言的设置的默认值覆盖指示器。您可以通过在设置编辑器搜索栏中添加语言过滤器来查看特定于语言的设置,方法是显式键入(@lang:javascript),或单击搜索栏右侧的筛选按钮并选择语言选项。
当显示默认值覆盖指示器时,表示特定于语言的设置的默认值已被扩展覆盖。指示器还指明了哪个扩展覆盖了默认值。
主题:Light Pink
此迭代还修复了设置编辑器中某些链接在设置编辑器搜索栏中已有搜索查询时未能正确重定向的行为。链接现在也有了适当的样式,当鼠标悬停在上面时会更清楚。
主题:Light Pink
评论小部件主按钮
评论小部件将主按钮颜色用于第一个(最右侧)操作。

终端
查找匹配项的背景颜色
上个版本在终端中实现的查找功能是在所有匹配项周围显示一个边框,但这是一个临时解决方案,直到支持动态更改单元格背景成为可能。现在,对于主题,带有颜色的背景是匹配项高亮的默认设置,整体体验应与编辑器类似。

如果您是主题作者,并且已采用 terminal.findMatchBorder 或 terminal.findMatchHighlightBorder,我们建议迁移到 terminal.findMatchBackground 和 terminal.findMatchHighlightBackground,如果这更适合您的主题或有助于提高对比度。
对比度和最小对比度比的改进
查找匹配项的背景工作增加了终端在处理背景和前景颜色方面的灵活性。因此,我们改进了终端的对比度,使终端视觉效果更接近编辑器。此外,现在还有一个最小对比度比功能,可以动态更改文本的前景,以提高可见性。
-
亮度现在会向相反方向调整,如果未满足对比度要求。例如,如果深灰色文本在浅灰色背景上且对比度不足(纯黑色 #000000),颜色也会尝试向白色移动,并使用满足所需对比度比的最佳值。

-
当禁用 GPU 加速时,选择现在绘制在文本下方,并支持不透明颜色。以前,这不得不部分透明,并且会使前景颜色变淡。由于这一变化,选择颜色现在使用与编辑器相同的颜色。

-
Nerd font 符号现在应该应用最小对比度比,以便与附近的文本融合,而Powerline 符号和框绘制字符将不应用最小对比度比,因为它们经常与没有前景字符的反转单元格相邻。

-
主题现在可以指定一个固定的选择前景颜色,供高对比度主题默认使用。

-
修复了几个错误,以使最终的前景颜色更准确。
提醒一下,如果您更喜欢原始颜色,可以通过将 "terminal.integrated.minimumContrastRatio": 1 设置为 1 来禁用最小对比度比。
任务
默认任务的 glob 模式
默认生成和测试任务现在可以仅限于“默认”,当活动文件匹配文件名 glob 模式时。
{
"version": "2.0.0",
"tasks": [
{
"label": "echo txt",
"type": "shell",
"command": "echo TextFile",
"group": {
"kind": "build",
"isDefault": "**.txt" // This is a glob pattern which will only match when the active file has a .txt extension.
}
},
{
"label": "echo js",
"type": "shell",
"command": "echo JavascriptFile",
"group": {
"kind": "build",
"isDefault": "**.js" // This is a glob pattern which will only match when the active file has a .js extension.
},
}
]
}
源代码管理
Git 扩展进行了一些更新,以匹配我们新的拉取请求流程。
Git:分支前缀
为了使创建新分支的过程更顺畅,有一个新设置 git.branchPrefix,用于指定创建新分支时使用的字符串作为前缀。
Git:分支名称生成
新设置 git.branchRandomName.enable 将使 VS Code 在创建新分支时始终建议随机分支名称。随机名称是从字典中生成的,您可以通过 git.branchRandomName.dictionary 设置来控制。支持的字典是:adjectives(默认)、animals(默认)、colors 和 numbers。
Git:分支保护
通过新的 git.branchProtection 设置,您可以配置特定分支进行保护。VS Code 将避免直接提交到受保护的分支,并将为您提供创建新分支进行提交的机会。您可以使用 git.branchProtectionPrompt 设置来微调此行为。
GitHub:拉取请求模板支持
GitHub 扩展现在可以理解拉取请求模板,并在从新分支的存储库创建 PR 时将它们用作基础。
Notebook
单元格显示更改
我们在几种情况下调整了视口外单元格的显示方式。
当您单击大纲视图中的单元格时,如果该单元格超出视口,笔记本现在会滚动以在视口的上部约 1/5 处显示该单元格。这与文本编辑器中大纲的行为匹配。
当光标位于单元格编辑器中时,您可以将光标移过编辑器的第一行或最后一行,将其移入下一个单元格编辑器。现在,当将光标移入单元格超出视口的编辑器时,笔记本将仅滚动足够的内容以显示编辑器中的该行,而不是跳转到视口中间以显示单元格。
查找和替换支持从光标/选区播种查询
笔记本编辑器中的查找控件现在支持从编辑器选区播种搜索字符串。该行为由编辑器设置 editor.find.seedSearchStringFromSelection 控制。
调试
在没有 launch.json 的情况下运行和调试
当您未设置 launch.json 配置文件并按 F5,或在调试视图中选择运行和调试按钮时,VS Code 会根据当前活动文件的编程语言选择调试器。如果您没有打开文件,系统会询问您要使用哪个调试器。这种体验可能有点令人困惑,因此我们做了一些改进。

如果一个扩展在您尝试开始调试之前已经被激活,那么该扩展的调试器将被排在顶部。例如,当扩展之前通过运行该扩展的命令、打开激活该扩展的语言文件或匹配您工作区的 workspaceContains 模式而被激活时,这可能很有用。如果您在本会话中使用过调试器,它也会被排在顶部。
Chrome/Edge 调试器已重命名为Web 应用 (Chrome) 和Web 应用 (Edge),以避免与其他调试器混淆,例如也将在浏览器中运行应用的Flutter 扩展。
语言
TypeScript 4.7
VS Code 现在捆绑了TypeScript 4.7.3。此主要 TypeScript 版本带来了新的语言功能,包括改进的控制流分析以及对Node.js 中的 ECMAScript 模块支持。它还包含新的工具功能,并修复了许多重要错误!
转到源定义
VS Code 最长期且获得最多支持的功能请求之一是让 VS Code 导航到外部库的函数和符号的 JavaScript 实现。目前,转到定义会跳转到定义目标函数或符号类型的类型定义文件 (.d.ts 文件)。如果您需要检查这些符号的类型或文档,这很有用,但会隐藏实际的代码实现。当前行为还会混淆许多 JavaScript 用户,他们可能不理解 .d.ts 中的 TypeScript 类型。
更改转到定义以导航到符号的 JavaScript 实现听起来很简单,但这个功能请求之所以存在了这么长时间,是有原因的。JavaScript(尤其是许多库分发的已编译 JavaScript)比 .d.ts 更难分析。尝试分析 node_modules 下的所有 JavaScript 代码既慢,又会极大地增加内存使用量。还有许多 JavaScript 模式是 VS Code IntelliSense 引擎无法理解的。
这就是新的转到源定义命令的作用。当您从编辑器上下文菜单或命令面板运行此命令时,TypeScript 将尝试跟踪符号的 JavaScript 实现并导航到它。这可能需要几秒钟,而且我们可能无法始终获得正确的结果,但在许多情况下它应该很有用。
我们正在积极改进此功能,请在您的代码库中尝试它,并分享您的反馈。
对象方法代码片段
对象方法代码片段可帮助您快速向实现给定接口的对象字面量添加方法。
当您在对象字面量内部时,对于每个可能的方法,您应该会看到两个建议:一个插入方法名称,另一个插入方法的完整签名。您还可以通过将 "typescript.suggest.classMemberSnippets.enabled": false 或 "javascript.suggest.classMemberSnippets.enabled": false 设置为 false 来完全禁用对象方法代码片段。
分组感知的组织导入
JavaScript 和 TypeScript 的组织导入命令可让您快速清理导入列表。运行此命令时,它会删除未使用的导入,并按字母顺序对导入进行排序。
然而,一些代码库喜欢在一定程度上手动控制其导入的组织方式。将外部导入与内部导入分组是最常见的例子之一。
// local code
import * as bbb from './bbb';
import * as ccc from './ccc';
import * as aaa from './aaa';
// built-ins
import * as path from 'path';
import * as child_process from 'child_process';
import * as fs from 'fs';
// some code...
在旧版本的 VS Code 中,运行组织导入会得到以下结果:
// local code
import * as child_process from 'child_process';
import * as fs from 'fs';
// built-ins
import * as path from 'path';
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// some code...
糟糕!发生这种情况是因为所有导入都按字母顺序排序,并且 VS Code 甚至会尝试在排序的同时保留注释和换行符。
然而,随着 TypeScript 4.7 的推出,组织导入现在是分组感知的。对其运行上述代码看起来会更符合您的预期。
// local code
import * as aaa from './aaa';
import * as bbb from './bbb';
import * as ccc from './ccc';
// built-ins
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
// some code...
请注意,导入现在已排序,同时仍保留在各自的组内。好多了!
隐式项目中的严格 null 检查已启用
严格 null 检查默认在 JavaScript 和 TypeScript 的隐式项目中启用。这应该会带来更准确的 IntelliSense 和改进的类型检查,以捕获常见的编程错误。

此新行为仅适用于不属于 jsconfig 或 tsconfig 项目的任何文件。您可以通过设置 "js/ts.implicitProjectConfig.strictNullChecks": false 来禁用它。对于属于 jsconfig 或 tsconfig 的文件,您仍然需要在配置文件中启用严格 null 检查。
Markdown 引用链接的转到定义
您现在可以使用转到定义来处理 Markdown 文件中的引用链接。这将从引用跳转到当前文件中的链接定义。
扩展的 JSON Schema 支持
内置的 JSON 语言服务已改进了对JSON Schema Draft 2019-09 和JSON Schema Draft 2020-12 的支持。使用此类模式时不再显示警告。
仍有一些功能尚未完全支持。当模式使用这些功能时会显示警告。不支持的属性是:
- 带有 $id 的子模式
- $recursiveRef/Anchor (Draft 2019-09)
- $dynamicRef/Anchor (Draft 2020-12)
Web 版 VS Code
核心本地化支持
我们为 VS Code Web 版引入了初步的本地化支持。VS Code 在世界各地都被使用,对于许多用户来说,英语不是他们的第一语言(或者他们根本不熟悉!)。多年来,VS Code 用户一直在从市场安装语言包,以便使用非英语语言版本的 VS Code。对于 VS Code Web 版,我们决定采取一种不同的方法,一种更符合当今网络工作方式的方法。
对于将浏览器设置为我们核心支持语言之一的用户,vscode.dev 将自动应用该语言的翻译。我们支持的语言记录在vscode-loc 存储库中。
例如,要在 Microsoft Edge 中配置显示语言,您将使用设置 > 语言。

设置完成后,当您访问vscode.dev(或insiders.vscode.dev)时,它将以德语显示。

主题:Panda Theme
在接下来的几个月里,我们将为扩展(包括随 VS Code 一起发布的扩展和不随 VS Code 一起发布的扩展)启用本地化,以便扩展作者也能支持非英语用户。敬请关注!
远程仓库
在使用远程存储库 > 继续处理... 命令将 GitHub 或 Azure Repos 存储库克隆到本地并在桌面 VS Code 中打开时,您现在可以将 remoteHub.gitProtocol 配置为始终使用 http 或 ssh URL 进行克隆。
开发容器规范
我们在 Microsoft 和 GitHub 的开发容器团队继续积极开发新的开发容器规范,本迭代有几项令人兴奋的亮点。
参考实现
我们发布了一个开源命令行界面 (CLI) 作为规范的参考实现。CLI 从 devcontainer.json 构建和启动开发容器,它可以直接使用,也可以集成到产品体验中。
CLI 可在新devcontainers/cli 存储库中找到。您可以在其README 中了解如何入门,并在博客文章中阅读更多内容。
CLI 处于积极开发中,并将继续发展以更好地支持更多场景,例如增强对个人用户的支持。我们希望在此过程中听到您的反馈,因此我们开放了一个问题专门用于收集有关 CLI 的反馈,并欢迎在该存储库中提交其他问题和 PR。
CI 中的开发容器
GitHub Action 和 Azure DevOps Task 可用于在持续集成 (CI) 构建中运行存储库的开发容器。这允许您重用与本地开发相同的设置,并在 CI 中构建和测试您的代码。有关更多详细信息,请参阅devcontainers/ci README。
GitHub Action 的示例用法
- name: Build and run dev container task
uses: devcontainers/ci@v0.2
with:
imageName: ghcr.io/example/example-devcontainer
runCmd: make ci-build
Azure DevOps Task 的示例用法
- task: DevcontainersCI@0
inputs:
imageName: 'yourregistry.azurecr.io/example-dev-container'
runCmd: 'make ci-build'
sourceBranchFilterForPush: refs/heads/main
规范
规范的积极开发仍在继续,我们已在devcontainers/spec 存储库中发布了初始版本。
与 CLI 一样,请继续关注后续更新和进展,我们很乐意收到您的反馈。
进一步阅读
您可以在 https://containers.dev 上阅读有关开发容器和规范的所有信息。
对扩展的贡献
Python
启动时无解释器发现
Python 扩展现在仅在以下情况下自动触发发现:
- 使用Python:选择解释器命令选择另一个解释器。
- 第一次打开特定范围(工作区或全局)。
- 未安装 Python。
由于启动时未自动触发发现,这导致即时加载,以及语言服务器等其他功能的启动速度更快。但是,如果安装/启用了Jupyter 扩展,Jupyter 仍会在启动时触发发现。
启用本地化
Python 扩展现在支持 VS Code 支持的所有语言的翻译。我们更新了获取命令、通知、标题等的翻译方式,使用了vscode-nls。这些翻译由本地化团队维护,以确保它们是最新的和正确的。
Jupyter
Web 扩展
我们在支持Jupyter 扩展的 Web 版本中的更多核心功能方面取得了进展。
本月,以下功能已移植到 Web 扩展:
- HTTPS 支持
- 内核补全
- ipywidgets
- 笔记本调试
- 变量查看
- 导出
- 交互式窗口
如果您想体验此功能,请在本地机器上启动 Jupyter,命令如下:
jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net
然后从 vscode.dev 内部使用命令Jupyter: 指定用于连接的 Jupyter 服务器连接到它。
有关更多信息(和评论),请参阅此讨论项。
远程开发
远程开发扩展的工作仍在继续,它允许您使用容器、远程机器或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
您可以在远程开发发行说明中了解新的扩展功能和错误修复。
GitHub 拉取请求和议题
GitHub 拉取请求和问题扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括
- 创建拉取请求视图中的自动合并复选框
请查看该扩展 0.44.0 版本的发布说明,了解其他亮点。
远程存储库扩展
GitHub 存储库和Azure Repos 扩展都支持 VS Code 支持的所有语言的翻译。
预览功能
Markdown 链接验证
在处理 Markdown 时,很容易错误地添加无效的文件链接或图像引用。也许您忘记了文件名使用了 -(连字符)而不是 _(下划线),或者您链接的文件已被移到另一个目录。通常,您只有在查看 Markdown 预览或甚至发布后才能发现这些错误。VS Code 的新实验性 Markdown 链接验证可以帮助捕获这些错误。
通过链接验证,VS Code 将分析指向标题、图像和其他本地文件的 Markdown 链接。无效链接将被报告为警告或错误。

VS Code 甚至可以捕获指向其他 Markdown 文件中特定标题的无效链接!
链接验证默认关闭。您可以设置 "markdown.experimental.validate.enabled": true 来尝试链接验证。
您可以使用以下几个设置来自定义链接验证:
-
markdown.experimental.validate.fileLinks.enabled- 启用/禁用指向本地文件的链接验证:[链接](/path/to/file.md) -
markdown.experimental.validate.headerLinks.enabled- 启用/禁用指向当前文件中标题的链接验证:[链接](#_some-header) -
markdown.experimental.validate.referenceLinks.enabled- 启用/禁用引用链接的验证:[链接][ref]。 -
markdown.experimental.validate.ignoreLinks- 跳过验证的链接列表。如果您链接到磁盘上不存在但在 Markdown 发布后存在的文件,这将很有用。
请告诉我们您对新功能的看法!
粘贴文件以插入 Markdown 链接
我们已添加了粘贴以在 Markdown 中插入图像或文件链接的实验性支持。
这需要同时启用 markdown.experimental.editor.pasteLinks.enabled 和 "editor.experimental.pasteActions.enabled"。您目前可以从 VS Code 文件资源管理器复制文件。粘贴图像文件会插入图像引用,而粘贴普通文本文件会插入指向这些文件的链接。
终端 Shell 集成
在此迭代中,Shell 集成(通过 terminal.integrated.shellIntegration.enabled 设置启用)和命令装饰已得到改进和优化。
一些更新包括:
- 146377 持久化 Shell 状态,使
bash-git-prompt和其他程序正常工作。 - 148635 允许为
zsh使用自定义ZDOTDIR。 - 145801 修复了在较慢机器上装饰不同步的问题。
- 146873 改进了
bash中现有调试陷阱的处理。 - 148839 使用此功能如何工作?命令和标签页悬停中的激活状态改进了消息。
- 151223 缓冲区清除后,确保命令被正确跟踪。
Windows 上的窗口控件叠加
我们已采用 Electron 提供的 API 来支持 Windows 上的窗口控件叠加。此更改的主要用户可见好处是可以使用 Windows 11 中的快照布局功能。由于一些持续存在的问题,窗口控件叠加默认关闭,但您可以通过实验性设置 window.experimental.windowControlsOverlay.enabled 来开启它。

命令中心
我们正在添加命令中心 - 一种更简单的方式来触发文件、命令等的快速选择。

可以通过 window.experimental.commandCenter 设置启用此功能,并告诉我们您的想法。
合并编辑器
我们已经开始致力于改进合并体验。现在还处于早期阶段,我们尚未准备好收集反馈,但您可以通过 git.experimental.mergeEditor 尝试使用。启用此功能后,具有合并冲突的文件将在新的合并编辑器中打开,以简化冲突的解决。
我们将继续致力于此。请使用Insiders 来关注我们的进展。我们衷心感谢Mingpan 以及我们在 Google 的朋友们,他们正在帮助我们完成这项工作。❤️
扩展创作
内联补全最终确定
我们已完成内联补全 API。这允许扩展提供与建议小部件分离的内联补全。内联补全的显示方式就好像已被接受一样,但颜色为灰色。用户可以通过 Tab 键循环浏览建议并接受它们。一个使用内联补全的示例扩展是GitHub Copilot。更多信息可以在 vscode.d.ts 文件中找到,API 的入口点是languages.registerInlineCompletionItemProvider。
InputBox 验证消息严重性最终确定
我们的 InputBox API(通过 window.showInputBox 和 window.createInputBox)提供用户输入验证的严重性已最终确定。
例如,如果您想根据用户输入显示信息消息,您的验证消息可以返回
{
message: 'this is an info message';
severity: InputBoxValidationSeverity.Info;
}
这将看起来像这样:

笔记本编辑器 API
新的笔记本编辑器 API 引入了一个新的 NotebookEditor 类型,它类似于 TextEditor,但用于笔记本而不是普通文本编辑器。
const editor = vscode.window.activeNotebookEditor;
if (editor) {
// Access the underlying notebook document associated with the editor
console.log(editor.notebook.uri);
// Change the selection in the current notebook
editor.selection = new vscode.NotebookRange(1, 3);
}
您可以使用 window.activeNotebookEditor 获取当前的笔记本编辑器,并使用 window.onDidChangeActiveNotebookEditor 等事件来观察用户何时切换到新的笔记本编辑器。
基于时间线视图的扩展激活
已添加一个新的激活事件,用于时间线视图可见时。此事件 onView:timeline 可由任何扩展使用,但对实现提议的 Timeline API 的扩展最有用。
用户体验指南
扩展作者的UX 指南已更新并扩展,以涵盖更多 VS Code UI 元素。

经过修订的概述页面通过 VS Code UI 进行了逐步介绍,以提供界面和常用 UI 元素的视觉导览。
已为每个专用页面添加了相关指南、API 参考和扩展示例的链接。此外,已更新指南中的所有示例图片,以展示最新的 UI 版本。
您现在可以阅读有关扩展程序添加或贡献这些 UI 元素的推荐“可为”和“不可为”内容
扩展赞助
在此里程碑中,我们在扩展的 package.json 中引入了一个 sponsor 字段,允许扩展选择加入赞助。sponsor 对象有一个 url 字段,用于扩展作者的赞助链接。例如
"sponsor": {
"url": "https://github.com/sponsors/nvaccess"
}
如果扩展程序选择加入此功能,VS Code 将在扩展视图的详细信息页面中显示一个 **赞助商** 按钮,如上方“赞助扩展程序”部分所示。
注意:请确保使用最新的 vsce 命令行工具 (>=2.9.1) 来发布已启用赞助功能的扩展。
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试这些 API。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤
- 查找您要尝试的提议并将其名称添加到
package.json#enabledApiProposals。 - 使用最新的vscode-dts并运行
vscode-dts dev。它会将相应的d.ts文件下载到您的工作区中。 - 您现在可以根据该提议进行编程。
您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
从 DataTransfer 读取文件
新的 dataTransferFiles API 提案允许扩展程序从 vscode.DataTransfer 对象读取文件。DataTransfer 类型用于树形拖放 API,以及拖放到编辑器和复制粘贴 API 提案。
export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {
...
public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {
// Get a list of all files
const files: vscode.DataTransferFile[] = [];
sources.forEach((item) => {
const file = item.asFile();
if (file) {
files.push(file);
}
});
const decoder = new TextDecoder();
// Print out the names and first 100 characters of the file
for (const file of files) {
const data = await file.data();
const text = decoder.decode(data);
const fileContentsPreview = text.slice(0, 100);
console.log(file.name + ' — ' + fileContentsPreview + '\n');
}
...
}
}
文件数据传输项当前仅当它们来自 VS Code 外部时(例如,当您将文件从桌面拖放到树视图或编辑器中时)才会被添加到 DataTransfer 中。
复制粘贴 API
新的 documentPaste API 提案允许扩展程序钩入文本编辑器中的复制和粘贴操作。这可以用于修改粘贴时插入的文本。您的扩展程序也可以在复制文本时存储元数据,并在粘贴时使用此元数据(例如,在粘贴到两个代码文件之间时携带导入)。
面向文档粘贴扩展示例展示了这个 API 的实际应用
/**
* Provider that maintains a count of the number of times it has copied text.
*/
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';
private count = 0;
prepareDocumentPaste(
_document: vscode.TextDocument,
_range: vscode.Range,
dataTransfer: vscode.DataTransfer,
_token: vscode.CancellationToken
): void | Thenable<void> {
dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
}
async provideDocumentPasteEdits(
_document: vscode.TextDocument,
range: vscode.Range,
dataTransfer: vscode.DataTransfer,
token: vscode.CancellationToken
) {
const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
if (!countDataTransferItem) {
return undefined;
}
const textDataTransferItem = dataTransfer.get('text/plain') ?? dataTransfer.get('text');
if (!textDataTransferItem) {
return undefined;
}
const count = await countDataTransferItem.asString();
const text = await textDataTransferItem.asString();
// Build a snippet to insert
const snippet = new vscode.SnippetString();
snippet.appendText(`(copy #${count}) ${text}`);
return new vscode.SnippetTextEdit(range, snippet);
}
}
vscode.languages.registerDocumentPasteEditProvider(
{ language: 'markdown' },
new CopyCountPasteEditProvider()
);
新的 Notebook 工作区编辑提案
新的 notebookWorkspaceEdit API 提案允许扩展程序编辑 Notebook 的内容。它取代了之前的 notebookEditorEdit 提案。
通过该提案,您可以创建工作区编辑,以在 Notebook 中插入、替换或修改单元格
const currentNotebook = vscode.window.activeNotebookEditor?.notebook;
if (currentNotebook) {
const edit = new vscode.WorkspaceEdit();
edit.set(
currentNotebook.uri,
vscode.NotebookEdit.insertCells(/* index*/ 1, [
// ... new notebook cell data
])
);
await vscode.workspace.applyEdit(edit);
}
工程
使用拉取请求
我们已不再直接将更改推送到 vscode 存储库的 main 分支,而是现在完全通过拉取请求 (PR) 将更改推送到 VS Code。我们要求每个 PR 至少获得一位团队成员的批准。利用这一点,我们现在还要求在合并 PR 之前,必须通过一些基本检查。这些任务包括 TypeScript 编译、格式化规则、单元测试和集成测试,通常需要不超过 10 分钟。切换到这种流程已减少了因编程错误导致我们的 Insiders 构建中断的次数。
VS Code OSS 构建
我们有一个新的公共 Code OSS 构建,它重用了我们生产构建相同的构建定义。此构建现在在每个 PR 上运行时间不到 30 分钟,我们计划继续投资以加快其速度。
文档
更新了版本控制视频
用于 使用 Git 与 Visual Studio 的入门视频已重新制作,以帮助您开始使用 VS Code 内置的 Git 集成。
您也可以在 VS Code YouTube 频道上找到其他很棒的视频。
code.visualstudio.com 上的 vscode.dev
想使用 VS Code for Web 但忘了 URL?现在,vscode.dev 在 VS Code 的 下载页面上显著显示,以便您可以在浏览器中快速启动 VS Code。

值得注意的修复
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
Web 扩展
扩展作者启用可在 Web 扩展中运行代码的扩展程序(以下列表为 2022 年 5 月 2 日至 6 月 6 日期间)
- Pipeline Editor(Alexey Volkov)
- Markdown Base64 Image ID(amoxuk)
- Apache Daffodil VS Code Extension(Apache Software Foundation)
- Web Search(Ben Rogers)
- CloudStudio.coding(CloudStudio)
- Screenshot Clipboard(Darren Daniel Day)
- Galaxy Workflows(davelopez)
- React Snippets(dotkiro)
- Draw(hall)
- Blogging tool(Huka)
- Katalon Runner(Katalon Studioz)
- zzzGCS-Uploader(KillerBees)
- WhatTheCommit(Lasse Gaardsholt)
- TEI Japanese Editor(ldas)
- TypeScript Error Translator(Matt Pocock)
- Mintlify(Mintlify)
- Play DJMAX(minwook-shin)
- Sciter JS(MustafaHi)
- NewWeb(newsearchwebtesting)
- Loop Development Kit(Olive AI)
- Chewbacca(Otter)
- Grammarly(Rahul Kadyan)
- Reflame(Reflame)
- SAS(SAS Institute Inc.)
- vscode-solidity(sevillal)
- Slint (Nightly)(Slint)
- Markdown Images(Steven Gourley)
- Smart Sort(Suguru Yamamoto)
- fiber-ifttt-starlark(t-codespaces)
- Markdown Preview Style (Beta)(TakumiI)
- TATEditor for VS Code(TATEditor)
- kodeine(tored)
- Vue Language Features (Volar)(Vue)
- Watermelon(WatermelonTools)
- todoist(Waymondo)
- Arrange Selection(Wupb)
- Transient Emacs(yasuyuky)
- Go to Next Error(yy0931)
- Extra Commands(zardoy)
问题跟踪
对我们问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- Simon Chan (@yume-chan)
拉取请求
对 vscode 的贡献
- @a-stewart (Anthony Stewart):Webview 定位错误的解决方法 PR #137506
- @aifreedom (Song Xie)
- 使用正确的区域设置格式化日期字符串 PR #150133
- 修复日志字符串中“synchronizing”的拼写错误 PR #150236
- @AlbertHilb:将一个共享的
macros对象传递给每个 katex 渲染器调用 PR #148006 - @andrewbranch (Andrew Branch)
- [typescript-language-features] 向完成遥测数据添加
flagsPR #148313 - [typescript-language-features] 字符串完成没有提交字符 PR #148597
- [typescript-language-features] 向完成遥测数据添加
- @bl-nero (Bartosz Leper):修复反汇编视图中的无限循环 PR #148556
- @CGNonofr (Loïc Mangeonjean)
- 为 monaco 编辑器添加高对比度浅色主题 PR #148249
- 在 monaco API 中添加编辑器监控方法 PR #148777
- @dlech (David Lechner):允许 ICodeEditor.restoreViewState() 为 null PR #146866
- @eugenesimakin (Eugene):为建议小部件继承 editor.letterSpacing(修复 #125622)PR #148283
- @gjsjohnmurray (John Murray):在 Git SCM 视图的文件上下文菜单中添加“打开所在文件夹”等选项 PR #149150
- @holazz (zz):将“pnpm-lock.yaml”添加到“package.json”的子模式中 PR #146869
- @ilumer (ilumer):修复 build/npm/preinstall.js 中的 node 版本检查 PR #150547
- @jasonwilliams (Jason Williams):为任务启用 glob,否则回退到默认值 - 修复 #88106 PR #141230
- @jeanp413 (Jean Pierre)
- 为 Markdown 链接启用转到定义 PR #148017
- 修复终端分割宽度在退出时未持久化(如果未聚焦)PR #149594
- @justanotheranonymoususer:将扩展输出标签添加到 URL PR #150065
- @Lazyuki:在 monarchLexer 中检查 maxTokenizationLineLength PR #145979
- @Long0x0:修复渲染空格时连字不正确的问题 PR #150349
- @MachineMitch21 (Mitch Schutt):编辑器拖放目标调试阈值方形清理 PR #149570
- @Mingpan:[未打磨原型] Git 的三向合并 PR #150388
- @PF4Public:更改 extensions/markdown-math 中的依赖项语法 PR #149501
- @pksunkara (Pavan Kumar Sunkara):feat: inlay hints displayStyle PR #150118
- @prashantvc (Prashant Cholachagudda):将扩展搜索文本长度添加到遥测数据 PR #148785
- @quanzhuo (Quan Zhuo):在 JavaScript 中添加 newpromise 代码片段 PR #148755
- @r3m0t (Tomer Chachamu):修复来自错误提供者的访问令牌 PR #150473
- @Raymo111 (Raymond Li):修复拼写错误 PR #149509
- @remcohaszing (Remco Haszing):指定 tsconfig.tsbuildinfo 是 json PR #149065
- @robinkar (Robin Karlsson):在 Web 中接受 HTTP 升级标头中的大小写 PR #150961
- @roj1512 (Roj):创建 PR 时处理多行提交消息 PR #149426
- @ShenHongFei (沈鸿飞):除了 WebviewPanel,WebviewView 也支持 TypedArrays 的传输 PR #148429
- @susiwen8 (susiwen8):fix: 关闭“create fork”消息会创建 fork PR #148438
- @weartist (Han):修复 #130527 PR #146710
- @wkillerud (William Killerud):为 SassDoc 文档添加 onEnterRule PR #150599
- @yhatt (Yuki Hattori):修复 #147936 PR #148503
对 vscode-extension-samples 的贡献
- @KamasamaK:移除未使用的 enableProposedApi PR #609
对 vscode-generator-code 的贡献
- @segevfiner (Segev Finer):从 vscode-webpack 模板中移除 $tslint-webpack-watch PR #346
对 vscode-html-languageservice 的贡献
- @hahn-kev (Kevin Hahn):允许在数据提供者中指定 void 元素 PR #125
对 vscode-js-debug 的贡献
- @ashgti (John Harrison):添加对索引源图的支持。PR #1261
对 vscode-languageserver-node 的贡献
- @d-biehl (Daniel Biehl):清理 DiagnosticRequestor 中的诊断信息 PR #976
- @DanTup (Danny Tuppeny)
- @heejaechang (Heejae Chang):确保取消订阅文件事件 PR #929
- @Vtec234 (Wojciech Nawrocki):fix:在
showDocument失败时返回falsePR #951
对 vscode-pull-request-github 的贡献
- @jpspringall:Issue #3371 | 更新了 getAuthSessionOptions 以应对 GitHub Enterprise AuthProvider PR #3565
对 debug-adapter-protocol 的贡献
- @apupier (Aurélien Pupier)
- @lemmy (Markus Alexander Kuppe):将 TLA+ 添加到 debug-adapter-protocols 列表 PR #267
对 language-server-protocol 的贡献
- @asashour (Ahmed Ashour)
- @KamasamaK
- @michaelmesser (Michael Messer):更新 index.html 中的最新版本 PR #1478
- @pedro-w (Peter Hull):在文件末尾添加换行符 PR #1486