现已推出!阅读 10 月份的最新功能和修复。

2022 年 1 月(版本 1.64)

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

更新 1.64.2:此更新解决了这些 问题

下载:Windows:x64 Arm64 | Mac:通用 Intel | Linux:deb rpm tarball Arm snap


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

如果您想在线阅读这些发行说明,请访问 Updates on code.visualstudio.com

观看此版本新功能的亮点,在 VS Code 团队的发行派对上。您可以在我们的 YouTube 频道上找到 活动录制

内部人员:想要尽快尝试新功能?您可以下载 nightly Insiders build,并在新功能可用后立即试用。

工作台

新侧边面板

在本里程碑中,我们推出了侧边面板,这是工作台中的一个新表面,它位于侧边栏的对面,您可以在其中放置来自侧边栏或底部面板的视图。与将底部面板移到编辑器的左侧或右侧不同,新侧边面板是在底部面板的基础上工作的,因此您可以同时看到更多视图集。

要使用侧边面板,您需要将一些视图移到它上面。根据我们收到的投票最多的功能请求之一,您可能想要将大纲视图从侧边栏移到侧边面板。您可以通过将视图拖放到侧边面板来完成此操作。如果侧边面板没有打开,就像底部面板一样,将视图拖放到编辑器区域的边缘将弹出它。

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

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

Move View command view locations dropdown

通过抓住视图图标,可以将视图在面板、侧边栏和侧边面板之间拖放。您可以通过右键单击视图图标并选择重置位置来将视图的位置重置回默认位置。

View context menu with Reset Location command

如果您想将所有视图重置回默认布局,您可以从命令面板中运行视图:重置视图位置

替换面板位置

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

鉴于此,我们已弃用workbench.panel.defaultLocation设置以及移动面板命令,以支持类似的命令

  • 将视图从面板移动到侧边面板workbench.action.movePanelToSidePanel
  • 将视图从侧边面板移动到面板workbench.action.moveSidePanelToPanel

旧的移动面板命令已重新映射到提供类似行为的新命令。即使有此映射,我们也建议您将键绑定更新为新命令。

在下图中,整个底部面板被移动到侧边面板,然后又移动回原始面板位置。

面板对齐

为了解决另一个流行的功能请求,我们添加了一个名为面板对齐的新布局选项。此选项允许您配置底部面板在窗口中跨越的距离。有四个选项

  • 居中 - 这是经典的行为。面板仅跨越编辑器区域的宽度。
  • 左侧 - 面板将从窗口的左侧边缘跨越到编辑器区域的右侧边缘。
  • 右侧 - 面板将从窗口的右侧边缘跨越到编辑器区域的左侧边缘。
  • 对齐 - 面板将跨越窗口的整个宽度。

请注意,对于所有选项,活动栏都被视为窗口的边缘。

您可以在菜单下的视图>外观>对齐面板中配置这些选项,或使用新的将面板对齐到...命令。

自定义布局控制

有了所有这些新的布局选项,我们一直在探索更好地公开布局配置的方法,以提高可发现性和易用性。这就是为什么您可能会在标题栏中看到一个新的实验性配置布局按钮。这仅在您的window.titleBarStyle设置为custom(Windows 和 macOS 上的默认值)且workbench.experimental.layoutControl.enabled设置为true时才会出现。按钮可见性由实验控制,但是如果您想手动启用它,您可以通过在设置编辑器 (⌘, (Windows, Linux Ctrl+,)) 中应用这些设置值来做到这一点。

Configure Layout button on the title bar

菜单的内容仍在完善中,但目前您应该看到能够切换侧边栏、面板和侧边面板。此外,您还将看到一个用于新命令自定义布局的条目。此新命令触发一个新的交互式快速选择体验,使您可以在一个地方控制所有布局配置方面。

试一试,如果您有任何反馈,请在 问题 #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 User Tasks

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

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可用于允许在已配置的一个或多个区域设置中常见的字符。默认情况下,这包括当前 VS Code 显示语言和当前操作系统语言。目前,仅支持在 vscode-loc 语言包中翻译的区域设置。

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

编辑器折叠限制

新设置editor.foldingMaximumRegions允许用户更改编辑器中显示的折叠范围的最大数量。默认情况下,限制为 5000。请注意,较大的数字会导致性能下降。

编辑器适应语言功能计时

扩展程序几乎支持所有语言功能,包括折叠区域、CodeLens、内联提示和语义标记等内置功能。这些功能不是由用户手势触发,而是由输入触发,通常在超时后触发。例如,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 并启用其类似功能,则可以通过将回复设置为 null 来禁用 Clink 或 VS Code 中的该功能,以避免两个功能相互冲突

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

增强型 VT 支持

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

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

  • 终端:打开最后一个网络链接... 例如,https://github.com/microsoft/vscode
  • 终端:打开最后一个文件链接... 例如,/Users/user/repo/file.txt
  • 终端:打开检测到的链接... 查看所有链接(网络、文件、单词)

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 暂存命令

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

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

为了帮助追踪性能问题,Git 输出通道现在显示了执行 git 命令的时间以及命令的持续时间,不包括生成子进程所需的时间。

笔记本

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

VS Code 现在支持在 Markdown 单元格的渲染视图和代码单元格的输出中查找文本。此功能默认情况下处于禁用状态,因为它需要渲染所有 Markdown 单元格和输出,这在打开笔记本时可能很昂贵。您可以通过从查找控件输入框的过滤器下拉菜单中选择选项(Markdown 预览代码单元格输出)来启用此功能。

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

单元格折叠 UI

笔记本单元格的左侧有一个蓝色条,表示它们处于焦点状态。此条现在是交互式的 - 您可以单击顶部部分以折叠单元格输入,单击底部部分以折叠输出。

Markdown 单元格折叠提示

当 Markdown 单元格区域被折叠时,会显示一条消息,其中包含折叠单元格的数量,以更清楚地表明某些单元格处于隐藏状态。

Folded Markdown cell hint

单元格执行提示

我们进行了一些更改,以更清楚地表明何时执行单元格以及哪个单元格正在执行。

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

其次,当单元格正在执行时,将在笔记本工具栏中添加一个新按钮 转到正在运行的单元格

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

调试

查看和编辑二进制数据

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

Binary data shown for a variable during a debug session

主题:Codesong

内存查看和编辑依赖于调试适配器协议的内存相关功能,调试扩展必须实现这些功能才能在 VS Code 中启用相应的 UI。有关详细信息,请参阅下面的 调试扩展程序创作 部分。在本版本中,只有内置的 JavaScript 调试器支持查看和编辑二进制数据,但我们预计其他调试扩展很快就会跟进。

JavaScript 调试

从暂停在断点处排除调用者

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

在暂停在某个位置时,您可以在 调用堆栈 视图中右键单击框架并选择 排除调用者 命令。将显示一个新的 已排除调用者 视图,允许您查看和管理已排除的调用者,之后,如果已排除的调用者出现在其调用堆栈中的任何位置,您的程序将不会在断点位置暂停。

Linux 上的 Edge 支持

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

语言

Markdown 路径 IntelliSense

内置 Markdown 扩展现在包括链接和图像的路径 IntelliSense。

Path suggestions in a Markdown link

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

路径 IntelliSense 还可以帮助您链接到当前文件或其他 Markdown 文件中的标题。将路径以 # 开头以查看文件中所有标题的完成(根据您的设置,您可能需要使用 ⌃Space (Windows、Linux Ctrl+Space) 来查看这些)

Header section suggestions in a Markdown link

您可以使用 "markdown.suggest.paths.enabled": false 禁用路径 IntelliSense。

Markdown 删除线支持

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

Strikethrough rendering the Markdown editor and preview

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

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

TS 4.5.5

VS Code 现在捆绑了 TypeScript 4.5.5。

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

用代码片段包围 JS/TS

许多 JavaScript 和 TypeScript 代码片段已更新以支持包围选定文本。

要使用包围,首先选择一些文本,然后运行 插入代码片段。代码片段(如 ifforof)现在将使用选定文本作为新语句的主体,而不是替换选定文本。

在 HTML 中等号后自动插入引号

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

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

JSON 清除架构缓存命令

一个新的命令 清除架构缓存 将清除先前下载的架构的缓存。

LaTeX 支持

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

LaTeX snippet

VS Code for the Web

远程仓库

GitHub 仓库

现在在 VS Code for the Web 中创建的提交已签名并标记为 已验证,在 GitHub UI 中。此外,维护人员现在可以使用 VS Code for the Web 提交来自分支的拉取请求。这要归功于新的 GitHub GraphQL createCommitOnBranch API。

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

主题:One Monokai

以前,仅在将您的 GitHub 仓库克隆到本地或远程机器后才支持创建空提交。现在,您还可以使用 GitHub 仓库:提交空提交 命令在 VS Code for the Web 中创建空提交。

还添加了一个新配置,用于启用自动下载给定大小以下的仓库的完整内容,以启用文本搜索等高级功能和 转到引用。设置 remoteHub.experimental.fs.maxAutoDownloadSize 控制仓库的大小限制,在尝试下载完整内容之前会显示提示。默认情况下,maxAutoDownloadSize 未设置,以便在未经提示的情况下绝不下载。

Azure Repos

Azure Repos 支持已从 GitHub 仓库扩展中移出,并成为一个独立的 扩展,也可以安装在桌面版上。

采用预发布扩展

Web 版 VS Code 现在捆绑了 GitHub Pull Request 和 Issue 以及 GitHub 仓库 扩展的预发布版本。

PWA 和离线支持

Web 版 VS Code 已经采用了 PWA 模型,现在可以作为 PWA 安装到主机操作系统上。由于采用了该模型,现在还可以启用一些离线功能。访问过 vscode.devinsiders.vscode.dev 的用户,现在即使在离线状态下也可以使用它来编辑本地文件。

Install VS Code PWA prompt

扩展贡献

Python

改进的解释器快速选择

为了便于选择所需的解释器,Python 扩展现在在**选择解释器**快速选择中按类型对解释器进行分组。

Interpreters grouped in interpreter picker

我们也在尝试将状态栏中的活动/选定解释器移到右侧,可能在语言状态内,因此请检查右侧的**Python**状态,以防它不可见。

添加对“conda run”的支持

为了改善我们对 Anaconda 用户的支持,我们已经实现了对 conda run 的支持,使用 --no-capture-output 参数,该参数不会捕获过去导致错误的输出。此功能是为执行 linter、测试和格式化功能而实现的。

有一个已知的错误 问题 #10972,在 Windows 上运行 linting 和测试时,如果参数中包含特殊字符,会导致错误。这是由于 conda run 读取包含特殊字符的参数的方式,因此它会影响您在 settings.json 中指定的任何命令行参数。

Anaconda 团队正在解决此问题,并希望尽快发布修复程序。新版本发布后,您可以从 Conda 网站 更新您的 Anaconda 版本。

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

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

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

主题:Horizon Extended

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

Jupyter

远程 Jupyter 服务器

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

十六进制编辑器

十六进制编辑器 已经过了一些重大的架构重构。值得注意的是,在大多数情况下,它现在能够在没有性能问题的情况下打开任何大小的文件。此外,它的布局宽度现在是可配置的,它有一个功能更强大的查找/替换实现。在未来的迭代中,将继续进行改进。

远程开发

远程开发扩展 的工作仍在继续,这些扩展允许您使用容器、远程机器或 Windows 子系统Linux (WSL) 作为完整的开发环境。

您可以在 远程开发版本说明 中了解新的扩展功能和错误修复。

GitHub Pull Request 和 Issue

GitHub Pull Request 和 Issue 扩展的工作仍在继续,该扩展允许您处理、创建和管理 Pull Request 和 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

要在现有的 Quick Pick 中添加分隔符,请向现有的项目列表中添加一个新的 QuickPickItem,但在 QuickPickItem 上指定 kind 属性,并将其设置为 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 事件的取消令牌

VS Code API 公开了参与文件操作的事件,例如 onWillRenameFiles。这种参与可能是长期的,因此用户可以取消它。在此版本中,扩展可以通过相应事件上的取消令牌(例如 FileWillRenameEvent#token)观察用户端的取消。这允许扩展取消昂贵的低级操作。

Git 扩展 API

  • 添加了一个新的 Repository.add 方法,以启用暂存文件的功能。
  • 添加了 Repository.tagRepository.deleteTag 方法,以启用创建和删除标签的功能。

onTaskType 激活事件

提供任务的扩展可以使用新的 onTaskType:foo 激活事件来限制其不必要的激活。这是对 onCommand:workbench.action.tasks.runTask 激活的改进,因为 workbench.action.tasks.runTask 通常对任务提供扩展过于急切。

调试器扩展创作

VS Code 现在实现了调试适配器协议的与内存相关的功能

在此版本中,VS Code 已开始支持通过支持 调试适配器协议 的以下与内存相关的功能来查看和编辑二进制数据

  • VS Code 遵守 DAP 变量上的 memoryReference 属性,并通过将客户端功能 supportsMemoryReferences 传递给调试适配器来宣布这一点。
  • 如果 VS Code 从调试适配器接收功能 supportsReadMemoryRequest,它将启用查看二进制数据的 UI,并将发出 readMemory 请求以检索数据。
  • 如果 VS Code 从调试适配器接收功能 supportsWriteMemoryRequest,它将启用编辑二进制数据的 UI,并将发出 writeMemory 请求以存储数据。
  • VS Code 处理 memory 事件,并通过将客户端功能 supportsMemoryEvent 传递给调试适配器来宣布这一点。

语言服务器协议

已发布 语言服务器协议 的下一个版本以及相应的 npm 模块。该版本包含对笔记本文档的拟议实现。可以阅读规范部分 这里

建议的扩展 API

每个里程碑都伴随着新的提议 API,扩展作者可以尝试它们。和往常一样,我们希望收到您的反馈。以下是尝试提议 API 的步骤

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

您无法发布使用提议 API 的扩展。下一个版本中可能会有重大更改,我们永远不想破坏现有扩展。

禁用终端持久性

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

export interface TerminalOptions {
  disablePersistence?: boolean;
}

内联提示 API

这是对所有对内联提示 API 感兴趣的人的呼吁。它即将完成,并添加了对交互式标签部分的支持。这些允许您将源代码位置绑定到提示,反过来,这将启用代码导航等功能。此外,现在支持命令。此提议的最新状态和开发情况如下: vscode.proposed.inlayHints.d.ts

语言状态 API

语言状态项 API 计划最终确定。请尝试一下并为 vscode.proposed.languageStatus.d.ts 提供反馈。

测试提议

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

此外,我们建议 TestItemvscode.proposed.testSortText.d.ts 中具有 sortText 属性。

内联补全:自动括号补全

当扩展提供内联补全项目时,它可以将其属性 completeBracketPairs 设置为 true。如果设置,VS Code 会尝试通过关闭或删除无效括号来修复补全文本中的无效括号,然后将内联补全显示给用户。

树拖放提议支持拖放到编辑器中

树拖放提议几乎准备好在最终确定,现在支持当 TreeDragAndDropController 支持 "resourceurls" 媒体类型时,从树视图拖放到编辑器中。详细信息可以在 问题 #141418 中找到。请尝试一下并为 vscode.proposed.treeViewDragAndDrop.d.ts 提供反馈。

评论时间戳

评论 API 在 Comment 上有一个新的 timestamp 属性。除了 API 之外,还有一个新的设置来控制评论时间戳的显示方式:comments.useRelativeTime。请尝试一下并为 vscode.proposed.commentTimestamp.d.ts 提供反馈。

工程

vscode-bisect 工具

一个用于对发布的 VS Code Insiders 版本(Web 和桌面)进行二分查找的新工具可用于帮助诊断问题

npx vscode-bisect

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

从源代码运行 Code Web 和 Server

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

  • ./scripts/code-web.sh|bat 从源代码启动 Code for the Web(又名“无服务器”),并在其上打开一个浏览器。使用 --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 评论。body 呈现为 Markdown,即使对于纯字符串也是如此

感谢

最后但并非最不重要的一点是,对 VS Code 的贡献者表示衷心的感谢。

Web 扩展

启用作为 Web 扩展 运行代码的扩展的扩展作者(以下列表介于 2021 年 12 月 7 日至 2022 年 1 月 31 日之间)

问题追踪

对我们问题追踪的贡献

拉取请求

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 的贡献