尝试在 VS Code 中使用

2022 年 1 月(版本 1.64)

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

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

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


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

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

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

Insiders:想尽快试用新功能吗?您可以下载每晚的 Insiders 版本,并尽早尝试最新更新。

工作台

新侧边面板

在这个里程碑版本中,我们引入了侧边面板,它是工作台中与侧边栏相对的新区域,您可以在其中容纳来自侧边栏或底部面板的视图。与将底部面板移动到编辑器的左侧或右侧不同,新的侧边面板与底部面板协同工作,让您一次可以看到更多的视图集。

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

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

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

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

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

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

适用于 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 可用于允许在一个或多个配置的区域设置中常见的字符。默认情况下,这包括当前的 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 并启用了其类似功能,您可以在 Clink 或 VS Code 中通过将回复设置为 null 来禁用它,以避免这两个功能相互冲突。

"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 stash 命令

命令面板中添加了一个新命令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 路径智能提示

内置的 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 的所有内置主题都支持删除线,但市场中的某些主题可能需要更新才能在编辑器中正确渲染删除线文本。

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

适用于 Web 的 VS Code

远程存储库

GitHub 存储库

在适用于 Web 的 VS Code 中创建的提交现在会在 GitHub UI 中进行签名并标记为已验证。此外,维护者现在在使用适用于 Web 的 VS Code 时,可以向从分支提交的拉取请求进行提交。这得益于新的 GitHub GraphQL createCommitOnBranch API。

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

主题:One Monokai

以前,创建空提交仅在将 GitHub 存储库克隆到本地或远程计算机后才受支持。现在,您还可以使用GitHub 存储库:提交空提交命令在适用于 Web 的 VS Code 中创建空提交。

还添加了一个新配置,用于启用自动下载给定大小以下存储库的完整内容,以启用诸如整个存储库文本搜索和转到引用等高级功能。设置 remoteHub.experimental.fs.maxAutoDownloadSize 控制存储库大小限制,超出该限制后,在尝试下载完整内容时将显示提示。默认情况下,未设置 maxAutoDownloadSize,以便在不提示的情况下从不下载。

Azure Repos

Azure Repos 支持已从 GitHub 存储库扩展移出,成为自己的专用扩展,该扩展也可以安装在桌面端。

采用预发布扩展

适用于 Web 的 VS Code 现在捆绑了 GitHub 拉取请求和问题以及 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。此外,该扩展现在在内核选择器中同时显示本地和远程内核。

十六进制编辑器

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

远程开发

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

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

GitHub 拉取请求和问题

GitHub 拉取请求和问题扩展的工作仍在继续,它允许您处理、创建和管理拉取请求和问题。查看扩展 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 separators

要向现有快速选择添加分隔符,请在现有项目列表中添加一个新的 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。如果设置为 true,VS Code 会在向用户显示内联补全之前,尝试通过关闭或删除无效括号来修复补全文本中的无效括号。

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

树拖放提案已接近最终定稿,现在支持当 TreeDragAndDropController 支持 "resourceurls" MIME 类型时,从树视图拖放到编辑器中。详细信息可在问题 #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 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 对服务进行的查询次数来改进市场交互。

值得注意的修复

  • 91286 限制客户端上的设置同步活动
  • 117648 当使用 emmet 扩展 sass 展开“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 日期间的)

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-eslint 的贡献

vscode-extension-samples 的贡献

vscode-html-languageservice 的贡献

vscode-js-debug 的贡献

  • @zkx5xkt: 修复:DebugSessionTunnels。远程/本地端口使用不当 PR #1163

vscode-pull-request-github 的贡献

vscode-textmate 的贡献

vscode-vsce 的贡献

debug-adapter-protocol 的贡献

monaco-editor 的贡献

node-jsonc-parser 的贡献