2022 年 1 月(版本 1.64)

更新 1.64.1:本次更新解决了这些安全问题

更新 1.64.2:本次更新解决了这些问题

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


欢迎使用 2022 年 1 月发布的 Visual Studio Code。此版本包含许多更新,希望您会喜欢,其中的一些主要亮点包括:

如果你想在线阅读这些发行说明,请访问 code.visualstudio.com 上的 Updates 页面。

在 VS Code 团队的发布会上观看本版本新特性的亮点展示。您可以在我们的 YouTube 频道上找到活动录像

Insiders 预览版: 想第一时间体验新功能吗?你可以下载每日构建的 Insiders 版本,在最新更新可用时立即体验。

工作台

全新侧边面板

在本次里程碑中,我们推出了侧边面板(Side Panel),这是工作台中位于侧边栏(Side Bar)对面的一块新区域,您可以在其中放置来自侧边栏或底部面板(Panel)的视图。与将底部面板移动到编辑器的左侧或右侧不同,新的侧边面板与底部面板相辅相成,因此您可以同时查看更多视图集。

要使用侧边面板,您需要将一些视图拖动到其中。根据我们收到赞同票最多的功能需求之一,您可能希望将大纲(Outline)视图从侧边栏移动到侧边面板。您可以通过将视图拖放到侧边面板来完成此操作。如果侧边面板未打开,就像底部面板一样,将视图拖到编辑器区域的边缘即可将其弹出打开。

在下面的短视频中,将“大纲”视图拖动到右侧并放下以创建侧边面板。然后,用户可以在侧边栏中切换视图(在此打开全局“搜索”视图),同时保持“大纲”视图可见。

或者,您可以使用命令面板中的 Move View(移动视图)命令,该命令将显示可用视图的下拉列表。选择视图后,您可以通过创建新的面板/侧边栏/侧边面板条目,或者将视图放置在资源管理器或源代码管理等现有位置来选择位置。

Move View command view locations dropdown

通过抓取视图图标,可以在面板、侧边栏和侧边面板之间拖放视图。您可以通过右键单击视图图标并选择 Reset Location(重置位置)来将视图的位置重置为其默认值。

View context menu with Reset Location command

如果您想将所有视图重置回默认布局,可以从命令面板运行 Views: Reset View Locations(视图: 重置视图位置)。

替代面板位置设置

如上所述,新的侧边面板提供了与将面板移动到左侧或右侧类似的功能,但通过不移动原始面板的全部内容对其进行了改进。随着视图在面板之间的拖放,新的侧边面板正在取代移动底部面板的选项。

鉴于此,我们已弃用 workbench.panel.defaultLocation 设置以及 Move Panel(移动面板)命令,转而使用类似命令:

  • Move Views From Panel To Side Panel(将视图从面板移动到侧边面板)(workbench.action.movePanelToSidePanel)
  • Move Views From Side Panel To Panel(将视图从侧边面板移动到面板)(workbench.action.moveSidePanelToPanel)

旧的 Move Panel 命令已重新映射到提供类似行为的新命令。即使有此映射,我们仍然建议将您的快捷键绑定更新为新命令。

下图中,整个底部面板被移动到了侧边面板,然后再移回到原来的面板位置。

面板对齐方式

为了回应另一个受欢迎的功能需求,我们添加了一个名为“面板对齐方式”(Panel Alignment)的新布局选项。此选项允许您配置底部面板在窗口中延伸的距离。共有四个选项:

  • Center(居中)- 这是经典行为。面板仅跨越编辑器区域的宽度。
  • Left(靠左)- 面板将从窗口左边缘延伸到编辑器区域右边缘。
  • Right(靠右)- 面板将从窗口右边缘延伸到编辑器区域左边缘。
  • Justify(两端对齐)- 面板将跨越窗口的全宽。

请注意,对于所有选项,活动栏(Activity Bar)均被视为窗口的边缘。

您可以在菜单中的 查看 > 外观 > 对齐面板 下配置这些选项,或者使用新的 Set Panel Alignment to...(将面板对齐方式设置为...)命令。

自定义布局控制

拥有所有这些新的布局选项后,我们一直在探索更好地展现布局配置的方法,以提高可发现性和易用性。这就是为什么您可能会在标题栏中注意到一个新的实验性 Configure Layout(配置布局)按钮。只有当您的 window.titleBarStyle 设置为 custom(Windows 和 macOS 上的默认值)且 workbench.experimental.layoutControl.enabled 设置为 true 时,才会显示该按钮。按钮的可见性受实验控制,但如果您想手动启用它,可以在设置编辑器中应用这些设置值(⌘, (Windows, Linux Ctrl+,))。

Configure Layout button on the title bar

菜单的内容仍在改进中,但目前您应该能够看到切换侧边栏、面板和侧边面板的功能。此外,您还将看到一个新命令 Customize Layout(自定义布局)的入口。这个新命令触发了一个新的交互式快速选择(Quick Pick)体验,允许您在一处控制布局配置的所有方面。

欢迎试用,如果有任何反馈,请在 issue #137633 中告知我们。

设置编辑器

现在在搜索时,设置编辑器搜索会在字符串和枚举设置中查找字符串值的匹配项。

Settings editor pulling up results where the enum value matches the query

新的搜索算法还会优先处理全词匹配,这意味着如果同时安装了 Java 和 JavaScript 扩展,搜索 "java" 时,Java 设置将首先显示。

Settings editor search showing Java results before JavaScript ones when searching "java"

最后,设置编辑器中的下拉菜单(例如 files.autoSave)和列表组件(例如 files.associations)现在可以配合触摸屏设备使用。

设置同步

设置同步(Settings Sync)现在支持同步用户任务。

Settings Sync User Tasks

在 Web 版 VS Code 中,默认的设置同步机器名称现在包含了浏览器和产品名称。

Settings Sync default machine name including browser and product names

资源管理器:确认并禁用撤销

文件资源管理器长期以来一直支持撤销栈,以还原文件和文件夹编辑(重命名、剪切/复制/粘贴、移动、导入等)。一些用户觉得这个功能出乎意料,因此现在提供了一个在资源管理器中禁用撤销的设置(explorer.enableUndo)。

此外,还添加了一项新设置(explorer.confirmUndo),用于配置在执行撤销时资源管理器提示确认的频率。默认情况下,资源管理器的提示频率将高于以往,以确保不会意外发生破坏性的撤销操作,但可以通过将值设为 "light" 改回旧行为,或设置为 "verbose" 以在所有撤销操作前均提示。

编辑器

音频提示

音频提示用于指示当前行是否包含特定标记,例如错误、断点或折叠的文本区域。

当主光标更改所在行或首次向当前行添加标记时,会播放音频提示。连接屏幕阅读器时会自动启用音频提示,但也可以通过将 audioCues.enabled 设置为 on 来手动开启。

更多音频提示即将推出,我们将对音效设计进行迭代改进。

Unicode 高亮改进

为了改进 11 月发布中引入的 Unicode 高亮功能,新增了一些设置以更好地处理误报。

新设置 editor.unicodeHighlight.allowedLocales 可用于允许在一个或多个配置的区域设置(locale)中常见的字符。默认情况下,这包括当前 VS Code 显示语言和当前操作系统语言。目前仅支持在 vscode-loc 语言包中已翻译的区域设置。

设置 editor.unicodeHighlight.includeStrings 控制是否应高亮显示字符串中的字符。该值默认是 true,但可以设置为 false 以忽略字符串。

编辑器折叠限制

新设置 editor.foldingMaximumRegions 允许用户更改在编辑器中显示的折叠区域的最大数量。默认限制为 5000。请注意,更大的数字可能会导致性能降低。

编辑器自适应语言功能响应时间

扩展为几乎所有的语言功能提供支持,包括折叠区域、CodeLens、内联提示(inlay hints)和语义标记(semantic tokens)等内置功能。这些功能不是由用户手势触发的,而是通过键入触发的,通常在超时后发生。例如,当您键入时,CodeLens 和语义标记会随之更新。以前选择的超时值是固定的,或多或少有些随意。在此版本中,编辑器会根据观察到的时间来自适应,从而使速度较慢的机器或网络连接不会被请求淹没,并且性能更强的机器可以得到更好的利用。

终端

自动回复

终端现在提供了一项可启用的功能,以便在收到特定字符序列时自动回复。一个有用的示例是在 Windows 中运行批处理脚本时按下 Ctrl+C 显示的消息 Terminate batch job (Y/N)?。要让终端在 Windows 下按 Ctrl+C 时自动回复 Y 并回车(\r),请添加以下设置:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)?": "Y\r"
}

主题:Sapphire

您可以为其他情况设置自定义回复,但这样做时要小心,因为您正在自动向进程发送文本。例如,您可以使用它在提示时自动更新 Oh My Zsh:

"terminal.integrated.autoReplies": {
  "[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}

如果您使用 Clink 并启用了类似的特性,您可以在 Clink 中将其禁用,或者在 VS Code 中将回复设置为 null,以避免这两个功能相互冲突:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)": null
}

增强的 VT 支持

添加了对操作系统命令(OSC)4/10/11/12 转义序列的支持,这使得应用程序能够控制终端的主题颜色。

此前,在终端中导航链接需要使用鼠标。现在,可以使用以下命令仅通过键盘打开链接:

  • Terminal: Open Last Web Link...(终端: 打开上一个 Web 链接...),例如 https://github.com/microsoft/vscode
  • Terminal: Open Last File Link...(终端: 打开上一个文件链接...),例如 /Users/user/repo/file.txt
  • Terminal: Open Detected Link...(终端: 打开检测到的链接...),用于查看所有链接(网页、文件、单词)

A Quick Pick is displayed with link results of type web, word, and file.

源代码管理

更精准地控制存储库发现

根据社区反馈,新增了两项设置,以更好地控制发现 Git 存储库的过程并适应更多样化的文件夹结构。

  • git.repositoryScanMaxDepth - 控制扫描时使用的深度。
  • git.repositoryScanIgnoredFolders - 控制扫描期间应忽略的文件夹列表。

更改列表排序改进

一项新设置(scm.defaultViewSortKey)控制“源代码管理”视图中更改列表使用的默认排序键。排序键的选择也会针对每个文件夹/工作区进行记忆。

选项包括:

  • name - 按文件名对更改排序。
  • path - 按文件路径对更改排序(默认)。
  • status - 按源代码管理状态对更改排序。

您需要重新加载 VS Code 窗口以应用设置更改。

新的 Git 暂存(stash)命令

命令面板中添加了一个新命令 Git: Drop All Stashes...(Git: 删除所有暂存...),允许用户清除所有暂存条目。与任何具有永久性后果的 Git 操作一样,请谨慎使用此命令。

Git 输出 - git 命令的执行时间和持续时间

为了帮助排查性能问题,Git 输出通道现在显示执行 git 命令的时间以及命令的持续时间(不包括创建子进程所花费的时间)。

Notebooks

在已渲染的 Markdown 和代码单元格输出中查找文本

VS Code 现在支持在 Markdown 单元格的渲染视图和代码单元格的输出中查找文本。该功能默认禁用,因为这需要渲染所有的 Markdown 单元格和输出,在打开 notebook 时开销可能较大。您可以通过在查找控制输入框上的过滤器下拉菜单中选择选项(Markdown Preview(Markdown 预览)、Code Cell Outputs(代码单元格输出))来开启此功能。

目前在输出中搜索文本时存在一些限制。例如,您无法搜索由 VS Code 本身渲染的流式/文本输出。我们计划在下一次迭代中对此进行改进。

单元格折叠 UI

Notebook 单元格左侧有一条蓝条,用于指示它们处于焦点状态。该蓝条现在支持交互 - 您可以单击顶部折叠单元格输入,单击底部折叠输出。

Markdown 单元格折叠提示

当某区域的 Markdown 单元格被折叠时,将出现一条带有已折叠单元格数量的消息,以便更明显地指示某些单元格已被隐藏。

Folded Markdown cell hint

单元格执行提示

我们进行了一些更改,使单元格何时执行以及哪个单元格正在执行变得更加明显。

首先,当单元格正在执行但未滚动到视图中时,将在编辑器面板顶部显示进度条。

其次,当有单元格正在执行时,notebook 工具栏中会添加一个新按钮 Go To Running Cell(跳转到正在运行的单元格)。

第三,如果通过 notebook.outline.showCodeCellsnotebook.breadcrumbs.showCodeCells 设置使代码单元格在大纲或面包屑导航中可见,则它们在执行时将显示动画运行图标。

调试

查看和编辑二进制数据

VS Code 的通用调试器现在支持查看和编辑二进制数据(即“内存”)。支持内存查看和编辑的变量会在变量(Variables)视图中显示一个内联二进制图标,选中它将打开 Hex Editor(十六进制编辑器)。

Binary data shown for a variable during a debug session

主题:Codesong

内存查看和编辑依赖于调试适配器协议(Debug Adapter Protocol)的内存相关功能,调试扩展必须实现这些功能才能在 VS Code 中启用相应的 UI。有关详细信息,请参阅下文的调试器扩展开发章节。在此版本中,仅内置的 JavaScript 调试器支持查看和编辑二进制数据,但我们预计其他调试扩展很快也会跟进。

JavaScript 调试

排除调用方在断点处暂停

有时您可能会设置断点或添加调试器语句,但只想在从特定代码路径调用时暂停。像 mousemove 这样的 DOM 事件处理程序就是一个很好的例子。在此版本中,JavaScript 调试器添加了从断点或调试器语句暂停中“排除调用方(Exclude Caller)”的功能。

当在某位置暂停时,您可以右键单击调用堆栈(CALL STACK)视图中的帧并选择 Exclude Caller 命令。将显示一个新的 EXCLUDED CALLERS(已排除的调用方)视图,以允许您查看和管理已排除的调用方;此后,如果排除的调用方出现在其调用堆栈的任何位置,程序将不会在该断点位置暂停。

Linux 上的 Edge 支持

现在可以通过 edge 调试类型在 Linux 上使用 Microsoft Edge 调试。

编程语言

Markdown 路径智能补全(IntelliSense)

内置的 Markdown 扩展现在包含针对链接和图像的路径智能补全。

Path suggestions in a Markdown link

路径建议的工作方式类似于 CSS 和 HTML 文件中的路径智能补全。以 / 开头的路径相对于当前工作区解析,而以 ./ 开头或没有任何前缀的路径相对于当前文件解析。当您输入 / 时会自动显示路径建议,也可以使用 ⌃Space (Windows, Linux Ctrl+Space) 手动调用。

路径智能补全还可以帮助您链接到当前文件或另一个 Markdown 文件内的标题。以 # 开头路径即可查看文件中所有标题的补全(取决于您的设置,您可能需要使用 ⌃Space (Windows, Linux Ctrl+Space) 来查看它们)。

Header section suggestions in a Markdown link

您可以使用 "markdown.suggest.paths.enabled": false 禁用路径智能补全。

Markdown 删除线支持

VS Code 现在支持在 Markdown 编辑器和内置 Markdown 预览中渲染 ~~strikethrough~~(删除线)文本。

Strikethrough rendering the Markdown editor and preview

删除线是通过用两个波浪号字符包裹文本来编写的。

虽然所有 VS Code 内置主题都支持删除线,但来自 Marketplace 的某些主题可能需要更新才能在编辑器中正确渲染删除线文本。

TS 4.5.5

VS Code 现在内置了 TypeScript 4.5.5。

此小更新修复了一些重要的崩溃和工具链错误

JS/TS 环绕代码片段

许多 JavaScript 和 TypeScript 代码片段已被更新,以支持包裹(环绕)选中的文本。

要使用“环绕”功能,请先选择一些文本,然后运行 Insert Snippet(插入代码片段)。现在,诸如 ifforof 之类的代码片段不会替换选中的文本,而是将选中的文本作为新语句的主体。

HTML 在等号后自动插入引号

在 HTML 中的属性后输入 = 时,语言服务现在会自动插入引号并将光标置于引号之间。设置 html.completion.attributeDefaultValue 允许您指定引号类型(单引号或双引号),默认使用双引号。

可以通过设置 "html.autoCreateQuotes": false 来禁用此功能。

JSON 清除架构(Schema)缓存命令

新命令 Clear schema cache(清除 Schema 缓存)可以清除以前下载的 Schema 缓存。

LaTeX 支持

添加了 LaTeX 基础语言支持。这包括语法高亮和自动闭合配对。

LaTeX snippet

Web 版 VS Code

远程仓库

GitHub 存储库

在 Web 版 VS Code 中创建的提交现在会被签名,并在 GitHub UI 中被标记为 Verified(已验证)。此外,当使用 Web 版 VS Code 时,维护者现在可以向 Fork 提交的 PR(拉取请求)提交更改。这得益于全新的 GitHub GraphQL createCommitOnBranch API。

此外,“源代码管理”视图现在支持多选

主题:One Monokai

此前,仅在将 GitHub 存储库克隆到本地或远程机器后才支持创建空提交。现在,您还可以使用 GitHub Repositories: Commit Empty(GitHub 存储库: 提交空提交)命令在 Web 版 VS Code 中创建空提交。

还添加了一项新配置,允许自动下载低于给定大小的存储库的完整内容,从而启用全存储库文本搜索和 Go to Reference(跳转到引用)等高级功能。设置 remoteHub.experimental.fs.maxAutoDownloadSize 控制在尝试下载完整内容之前弹出提示的存储库大小限制。默认情况下未设置 maxAutoDownloadSize,以便在未经提示的情况下绝不下载。

Azure Repos

Azure Repos 支持已从 GitHub Repositories 扩展移出,转入其专属的扩展中,该扩展也可以安装在桌面版上。

采纳预发布版扩展

Web 版 VS Code 现在内置了 GitHub Pull Request and IssuesGitHub Repositories 扩展的预发布版本。

PWA 与离线支持

Web 版 VS Code 已经采纳了 PWA 模式,现在可以在宿主操作系统上作为 PWA 安装。得益于这种采用,现在也可以启用某些离线功能。只要访问过一次 vscode.devinsiders.vscode.dev,用户现在即使在离线状态下也可以使用它来编辑本地文件。

Install VS Code PWA prompt

扩展贡献

Python

改进的解释器快速选择(Quick Pick)

为了更方便地选择所需的解释器,Python 扩展现在在 Select Interpreter(选择解释器)快速选择菜单中按类型对解释器进行分组。

Interpreters grouped in interpreter picker

我们还在尝试将状态栏中当前活动/选中的解释器向右移动(可能放入语言状态中),因此如果看不到它,请检查右侧的 Python 状态。

添加对 'conda run' 的支持

为了改善对 Anaconda 用户的支持,我们实现了对 conda run 的支持(使用 --no-capture-output 参数),这不会捕获过去曾导致错误的输出。该功能已应用于执行 linter(代码检查)、测试和格式化功能。

存在一个已知缺陷 issue #10972,当参数中包含特殊字符时,在 Windows 上运行代码检查和测试会导致错误。这是由于 conda run 读取带特殊字符的参数的方式所致,因此可能会影响您在 settings.json 中指定的任何命令行参数。

Anaconda 团队正在解决该问题,并希望很快发布修复。一旦新版本发布,您可以在 Conda 网站上更新您的 Anaconda 版本。

智能选择和更好的折叠支持

通过 Pylance 语言服务器,还对 Python 代码选择和折叠进行了改进。

使用键盘选择 Python 代码所需的按键次数更少,因为在定义选择范围时会考虑代码的语义信息。

主题:Horizon Extended

至于折叠,此前折叠区域仅由缩进定义,这在某些情况下并不理想(例如多行字符串)。现在折叠区域能够适当地考虑语义信息,并且还支持 #region 注释。

Jupyter

远程 Jupyter 服务器

现在在本地和远程 Jupyter 服务器之间切换时,Jupyter 扩展不再需要您重新加载 VS Code。此外,扩展现在会在内核选择器中同时显示本地和远程内核。

十六进制编辑器(Hex Editor)

Hex Editor 经历了重大架构重构。值得注意的是,在大多数情况下,它现在可以打开任意大小的文件而不会出现性能问题。此外,其布局宽度现在是可配置的,并且拥有能力更强的查找/替换实现。后续迭代中还将带来持续改进。

远程开发

远程开发扩展的工作仍在继续,它允许您使用容器、远程机器或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。

您可以在远程开发(Remote Development)发布说明中了解新的扩展功能和错误修复。

GitHub Pull Requests and Issues

GitHub Pull Requests and Issues 扩展的工作仍在继续,该扩展允许您处理、创建和管理拉取请求与 Issue。请查看该扩展 0.36.0 版本的更新日志来了解主要亮点。

预览功能

终端 Shell 集成

终端现在具有实验性的 Shell 集成功能,使 VS Code 能够深入了解以前无法获知的终端内部运行状况。当通过设置 "terminal.integrated.enableShellIntegration": true 启用时,如果可能,运行 Shell 集成脚本的参数将被注入到您的终端配置文件中。脚本本身主要是将不可见的序列注入到您的提示符中,向 VS Code 提供诸如提示符、命令和命令输出的位置、每个命令的当前工作目录(cwd)以及每个命令的退出代码等信息。

利用这些信息,我们可以通过多种方式增强现有功能:

  • 快速检测 cwd - 以前这仅在 macOS 和 Linux 上可用,并且需要启动进程或查询文件系统以获取该信息。现在这在 Windows 上也同样适用。cwd 用于链接检测以及在拆分终端标签页时继承 cwd 等功能。
  • 改进命令跟踪功能 - 该功能此前就存在,但仅在 macOS 上有默认按键绑定(Cmd+Up/Down),并且采用了基于何时按下 Enter 键来猜测行所在位置的粗略方法。

Shell 集成启用了以下新功能:

  • 运行最近的命令 - 由于我们知道了运行了哪些命令,因此可以暴露一个命令,让您在快速选择菜单中查看并再次运行它们。最近运行的命令会在快速选择菜单中显示,包含有关当前工作目录以及多久以前运行的信息
  • 跳转到最近的目录 - 与上面类似,我们也允许导航到过去使用过的目录。最近的目录会在快速选择菜单中按使用频率(降序)显示
  • 相对于 cwd 的链接支持 - 我们现在知道终端缓冲区中每一行的 cwd,因此可以支持在激活位置相对于 cwd 打开终端中的链接。在此之前,当单击链接时,会打开一个快速选择菜单,其中包含包含该名称匹配项的所有文件夹的结果。现在,将打开精确匹配的文件。在 cwd 为 vscode 的终端中输出 package.json。单击文件名将打开 vscode/package.json。将目录更改为 template-string-converter 并输出 package.json。单击文件名将打开 template-string-converter/package.json。

我们的目标是在该功能的可靠性足够高时默认开启 Shell 集成。我们在参数注入方面采取的方法是尽量不打扰用户。例如,我们不会像某些终端那样自动修改您的 Shell 初始化脚本,而是拦截进程的创建,检查参数,并且在我们确信终端可以携带这些参数运行时注入 Shell 集成参数。希望这能做到无需用户进行任何配置即可良好运行,且不会干扰您现有的 Shell 设置。

当前支持的 Shell 包括适用于 Windows 的 pwsh,以及适用于 Linux 和 macOS 的 pwsh、bash 和 zsh。

如前所述,这是一项实验性功能,有些细节尚待完善,且存在一些已知问题:

  • 尚不支持 $PS2 行换行(续行)。但是,pwsh 中的行换行正常工作。
  • 尚不支持右侧提示符。
  • 已知 zsh 脚本有时无法激活
  • 对远程 VS Code 窗口的支持有限。

资源管理器文件嵌套

资源管理器现在提供了实验性支持,可以在逻辑上以嵌套布局显示同一目录中的文件。这有助于在视觉上将相关文件归类在一起,并将文件折叠到“根”文件中以减少杂乱。添加了几项新设置来控制此行为:

  • explorer.experimental.fileNesting.enabled:控制是否启用文件嵌套。
  • explorer.experimental.fileNesting.expand:控制文件嵌套默认是否显示为展开状态。
  • explorer.experimental.fileNesting.patterns:控制文件如何进行嵌套。

例如,在许多存储库中,.ts 文件位于其派生的 .js.d.ts 和/或 .js.map 文件旁边。虽然长期以来可以通过 files.exclude 完全隐藏派生文件,但如果有一种快速访问派生文件的方法会更好,现在通过文件嵌套即可实现:

下图中,资源管理器使用默认的 explorer.experimental.fileNesting.patterns 配置来嵌套 .js.js.map 文件,展开对应的 .ts 文件时即可显示这些文件。

Explorer with some collapsed and expanded nests

主题:GitHub Light

扩展开发

语言默认图标

语言贡献者可以为语言定义图标。

{
  "contributes": {
    "languages": [
      {
        "id": "latex",
        // ...
        "icon": {
          "light": "./icons/latex-light.png",
          "dark": "./icons/latex-dark.png"
        }
      }
  ]

如果当前文件图标主题仅具有该语言的通用文件图标,则会显示该图标。

此外,像 MinimalNone 这样不显示文件图标的文件图标主题将不会使用语言图标。如果文件图标主题具有扩展名或文件名的图标,将优先使用它们。

文件图标主题可以通过在主题文件中定义 showLanguageModeIcons: true|false 来自定义此新行为。

  • showLanguageModeIcons: true 即使主题未指定文件图标,也会显示默认语言图标。
  • showLanguageModeIcons: false 可防止使用默认语言图标。

QuickPickItem 分隔符

扩展作者现在可以在快速选择(Quick Pick)菜单中添加分隔符。这对于将项目分组或在项目之间增加一点间距非常有用:

Quick Pick separators

要向现有的快速选择列表添加分隔符,请向现有的项目列表添加一个新的 QuickPickItem,但需要指定该 QuickPickItemkind 属性并将其设置为 QuickPickItemKind.Separator

在上面的示例中,您会将以下对象添加到项目列表中:

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

如果未指定 kind 属性,或者将其设置为 QuickPickItemKind.Default,则该项目将被视为普通的 QuickPickItem

vscode.workspace.createFileSystemWatcher 现在支持任何路径

对现有的 vscode.workspace.createFileSystemWatcher API 进行了改进,允许您传入任何文件或文件夹路径来进行文件监视,即使它位于工作区之外。此前,文件监视器仅限于在工作区中打开的文件夹。

取决于您传递给方法的 glob 模式,监视器将是递归的(例如 **/*.js)或非递归的(*.js)。递归监视器需要更多资源,因此如果可能,我们建议使用简单的 glob 模式。

示例

// Watch a folder non-recursively
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.Uri.file(<path to folder outside workspace>), '*.js'));

// Watch the active text editor file
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.window.activeTextEditor.document.uri, '*'));

注意:作为此更改的一部分,我们对现有文件监视器的行为做出了修改。仅通过 glob 模式(例如 vscode.workspace.createFileSystemWatcher('**'))指示的文件监视器将不再接收工作区外部更改的文件的事件。它将仅接收工作区内部路径的文件事件。如果用户没有打开的工作区,则不会再通过此方法传递任何事件。这样做是为了确保扩展不会收到来自工作区外部的意外事件。

vscode.TerminalLocation

您可以使用新的 TerminalLocation API 指定创建扩展终端的位置。

这允许通过提供 parentTerminal 创建拆分终端,在编辑器区域和面板之间进行选择,等等。

onWill 事件的取消标记(Cancellation token)

VS Code API 暴露了参与文件操作的事件,例如 onWillRenameFiles。这种参与可能是耗时较长的,因此用户可以取消它。在此版本中,扩展可以通过相应事件上的取消标记(例如 FileWillRenameEvent#token)观察到用户侧的取消操作。这也允许扩展取消昂贵的下层操作。

Git 扩展 API

  • 添加了新的 Repository.add 方法,以实现暂存(stage)文件的功能。
  • 添加了 Repository.tagRepository.deleteTag 方法,以允许创建和删除标签(tag)。

onTaskType 激活事件

提供任务的扩展可以通过使用新的 onTaskType:foo 激活事件来减少不必要的激活。这比通过 onCommand:workbench.action.tasks.runTask 激活是一种改进,因为对于提供任务的扩展来说,workbench.action.tasks.runTask 通常过于激进。

调试器扩展开发

在此版本中,VS Code 开始通过支持 Debug Adapter Protocol 的以下内存相关功能来支持查看和编辑二进制数据:

  • VS Code 遵循 DAP 变量上的 memoryReference 属性,并通过向调试适配器传递客户端能力 supportsMemoryReferences 来声明这一点。
  • 如果 VS Code 从调试适配器接收到能力 supportsReadMemoryRequest,它将启用用于查看二进制数据的 UI,并发出 readMemory 请求以获取数据。
  • 如果 VS Code 从调试适配器接收到能力 supportsWriteMemoryRequest,它将启用用于编辑二进制数据的 UI,并发出 writeMemory 请求以保存数据。
  • VS Code 处理 memory 事件,并通过向调试适配器传递客户端能力 supportsMemoryEvent 来声明这一点。

语言服务器协议 (Language Server Protocol)

Language Server Protocol 的下一个新版本以及相应的 npm 模块已经发布。该版本包含针对 notebook 文档的提议实现。规范部分可以在此处阅读。

提议的扩展 API

每个里程碑都会带来新的提议 API,扩展作者可以尝试使用它们。一如既往,我们期待你的反馈。以下是试用提议 API 的步骤:

  1. 找到想要尝试的提议,并将其名称添加到 package.json#enabledApiProposals
  2. 使用最新的 vscode-dts 并运行 vscode-dts dev。它会将对应的 d.ts 文件下载到你的工作区中。
  3. 现在你可以针对该提议进行编码了。

你不能发布使用了提议 API 的扩展。在下一个版本中可能会有破坏性变更,我们绝不希望破坏现有的扩展。

禁用终端持久化

创建终端时,您可以通过在 TerminalOptionsExtensionTerminalOptions 中设置 disablePersistence 来选择在重启和重新加载时不持久化终端。

export interface TerminalOptions {
  disablePersistence?: boolean;
}

内联提示(Inlay hint)API

呼吁所有对内联提示 API 感兴趣的人士:该 API 已接近完成,并添加了对交互式标签部分的支持。这些支持允许您将源代码位置绑定到提示,进而实现诸如代码导航等功能。此外,现在也支持了命令。该提案的最新状态和开发情况见:vscode.proposed.inlayHints.d.ts

语言状态 API

语言状态项(language status item)API 计划定稿。请试用并针对 vscode.proposed.languageStatus.d.ts 提供反馈。

测试提案

我们正在提议一种实现测试“刷新”处理程序的官方方式,请查看 vscode.proposed.testRefresh.d.ts。这将允许扩展统一使用 VS Code 中的标准“刷新”按钮,从而避免自行实现。

此外,我们在 vscode.proposed.testSortText.d.ts 中提议 TestItem 拥有 sortText 属性。

内联补全:自动括号补全

当扩展提供内联补全项(inline completion item)时,可以将其属性 completeBracketPairs 设置为 true。如果已设置,VS Code 会尝试在向用户显示内联补全之前,通过闭合或删除补全文本中的无效括号来进行修复。

树形拖放提案支持拖入编辑器

树形拖放(tree drag and drop)提案已准备定稿,当 TreeDragAndDropController 支持 "resourceurls" mime 类型时,现在支持从树视图拖动到编辑器中。详情可在 issue #141418 中获得。欢迎试用并对 vscode.proposed.treeViewDragAndDrop.d.ts 提供反馈。

评论时间戳

评论 API 在 Comment 上增加了一个新的 timestamp 属性。与该 API 随附的是控制评论时间戳显示方式的新设置:comments.useRelativeTime。请试用并对 vscode.proposed.commentTimestamp.d.ts 提供反馈。

工程

vscode-bisect 工具

一个用于对已发布的 VS Code Insiders 版本(Web 版和桌面版)进行二分查找(bisect)的新工具现已推出,以帮助诊断问题。

npx vscode-bisect

类似于 git bisectvscode-bisect 将启动过去发布的一系列 Insiders 构建版本,并询问该构建是否复现了问题。最终结果是引入该问题的提交范围。该实例将使用专用的全新用户数据文件夹,以免影响您的主要开发环境。

从源码运行 Code Web & Server

从源码运行 Web 版 VS Code 和 VS Code Server 的脚本已移至 scripts 文件夹:

  • ./scripts/code-web.sh|bat 从源码启动 Web 版 Code(即“无服务器”版)并在浏览器中打开。使用 --help 获取更多选项。
  • ./scripts/code-server.sh|bat 从源码启动 VS Code Server。添加 --launch 可另外在浏览器中打开 Web UI。使用 --help 获取更多选项。
  • ./scripts/test-web-integration.sh|bat 用于远程 Web 测试。
  • ./scripts/test-remote-integration.sh|bat 用于远程测试。

扩展

在本次里程碑中,我们通过最大限度减少 VS Code 对服务发起的查询次数,改进了与 Marketplace(插件市场)的交互。

重要修复

  • 91286 限制客户端上的设置同步活动
  • 117648 在 Sass 扩展下使用 Emmet 展开 "gtc" 时的结果很奇怪。
  • 134466 不存在的调试器配置
  • 135677 悬停在设置 UI 链接上时开头显示 #
  • 138072 将最近打开的工作区存储在全局存储中
  • 138805 打开大型二进制文件时会读取全部内容
  • 138850 磁盘上的文件发生更改后,已打开的编辑器可能会变为空白
  • 139880 调试:按 F5 时被要求保存文件
  • 140003 无法从位于不同工作区文件夹的启动配置中引用任务
  • 140129 双击 settings.json 文件每次都会导致打开新标签页
  • 140560 VS Code 停止调试 API 的问题
  • 140967 即使是纯字符串,Comment.body 也被渲染为 Markdown

致谢

最后但也同样重要的是,向 VS Code 的贡献者们致以诚挚的感谢

Web 扩展

感谢以下扩展作者使扩展能够作为 Web 扩展运行(以下列表介于 2021 年 12 月 7 日至 2022 年 1 月 31 日之间):

问题跟踪

对我们问题跟踪的贡献

Pull Request

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-eslint 的贡献

vscode-extension-samples 的贡献

vscode-html-languageservice 的贡献

vscode-js-debug 的贡献

  • @zkx5xkt: fix: DebugSessionTunnels。远程/本地端口使用位置放错 PR #1163

vscode-pull-request-github 的贡献

vscode-textmate 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

monaco-editor 的贡献

node-jsonc-parser 的贡献

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.