在 VS Code 中试试

2022 年 1 月 (版本 1.64)

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

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

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


欢迎阅读 Visual Studio Code 2022 年 1 月发布公告。此版本中有许多更新,我们希望你会喜欢。主要亮点包括:

如果你想在线阅读这些发布公告,请访问 code.visualstudio.com 上的更新页面。

观看亮点回顾:在 VS Code 团队的发布派对上观看此版本新功能的精彩回顾。你可以在我们的 YouTube 频道上找到活动记录

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

工作台 (Workbench)

新侧面板 (New Side Panel)

在这个里程碑中,我们引入了侧面板 (Side Panel),这是工作台 (workbench) 中与侧边栏 (Side Bar) 相对的新区域,你可以在其中放置侧边栏或底部面板 (bottom Panel) 中的视图。与将底部面板移动到编辑器左侧或右侧不同,新的侧面板与底部面板同时存在,这样你就可以一次查看更多视图集。

要使用侧面板,你需要将一些视图移动到其中。根据我们得票最高的特性请求之一,你可能希望将大纲 (Outline) 视图从侧边栏移动到侧面板。你可以通过将视图拖放到侧面板中来实现此操作。如果侧面板未打开,就像底部面板一样,将视图拖动到编辑器区域的边缘会将其弹出打开。

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

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

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) 被视为窗口的边缘。

你可以在菜单 视图 (View) > 外观 (Appearance) > 对齐面板 (Align Panel) 下配置这些选项,或使用新的将面板对齐方式设置为... (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)

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

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)。

Settings Sync User Tasks

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

Settings Sync default machine name including browser and product names

资源管理器:确认并禁用撤消 (Undo)

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

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

编辑器 (Editor)

音频提示 (Audio cues)

音频提示表示当前行是否具有某些标记,例如错误、断点或折叠的文本区域。

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

未来会有更多音频提示,我们将持续改进声音设计。

Unicode 高亮改进

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

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

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

编辑器折叠限制

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

编辑器适应语言功能时序

扩展几乎支持所有语言功能,包括内置功能,如折叠区域、CodeLens、内嵌提示 (inlay hints) 和语义 token (semantic tokens)。这些功能不是由用户手势触发的,而是通过键入触发的,通常在超时后。例如,CodeLens 和语义 token 会随着你的键入而更新。以前选择的超时值是固定的且或多或少是任意的。在此版本中,编辑器会根据观察到的时序进行调整,以便较慢的机器或网络连接不会因请求过多而过载,同时更好地利用较快的机器。

终端 (Terminal)

自动回复 (Automatic replies)

终端现在提供了一个可选功能,在接收到特定字符序列时自动回复。一个很好的应用示例是在 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 支持

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

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

  • 终端:打开最后一个网页链接... (Terminal: Open Last Web Link...) 例如,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.

源代码管理 (Source Control)

对存储库发现的更多控制

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

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

更改列表排序改进

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

选项包括:

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

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

新的 Git stash 命令

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

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

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

Notebook (Notebook)

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

VS Code 现在支持在 Markdown 单元格的渲染视图和代码单元格的输出中查找文本。该功能默认禁用,因为它需要渲染所有 Markdown 单元格和输出,这在打开 Notebook 时可能会很耗时。你可以通过在查找控件输入框的过滤下拉列表中选择选项(Markdown 预览 (Markdown Preview)代码单元格输出 (Code Cell Outputs))来开启此功能。

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

单元格折叠 UI

Notebook 单元格左侧有一条蓝色的条,表示它们被聚焦。这条条现在是交互式的——你可以点击顶部折叠单元格输入,点击底部折叠输出。

Markdown 单元格折叠提示

当一片 Markdown 单元格区域被折叠时,将出现一条消息显示折叠的单元格数量,使其更明显地表示一些单元格已被隐藏。

Folded Markdown cell hint

单元格执行提示

我们做了一些更改,以便更清楚地显示单元格何时正在执行以及哪个单元格正在执行。

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

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

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

调试 (Debugging)

查看和编辑二进制数据

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

Binary data shown for a variable during a debug session

主题:Codesong

内存查看和编辑依赖于调试适配器协议 (Debug Adapter Protocol) 中与内存相关的功能,并且调试扩展必须实现这些功能才能在 VS Code 中启用相应的 UI。有关详细信息,请参见下方的调试器扩展创作 (Debugger extension authoring) 部分。在此版本中,只有内置的 JavaScript 调试器支持查看和编辑二进制数据,但我们预计其他调试扩展也将很快跟进。

JavaScript 调试

排除调用者,使其不在断点处暂停

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

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

Linux 上对 Edge 的支持

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

语言 (Languages)

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~~ 文本

Strikethrough rendering the Markdown editor and preview

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

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

TS 4.5.5

VS Code 现在捆绑了 TypeScript 4.5.5。

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

JS/TS 包围代码段 (Surround with snippets)

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

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

HTML 等号后自动插入引号

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

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

JSON 清除模式缓存命令

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

LaTeX 支持

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

LaTeX snippet

VS Code for the Web

远程存储库 (Remote Repositories)

GitHub 存储库 (GitHub Repositories)

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

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

主题:One Monokai

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

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

Azure Repos

Azure Repos 支持已从 GitHub Repositories 扩展中分离出来,成为自己的专属扩展,该扩展也可以安装在桌面版上。

采用预发布扩展

VS Code for the Web 现在捆绑了GitHub Pull Request and IssuesGitHub Repositories 两个扩展的预发布版本。

PWA 和离线支持

VS Code for the Web 已采用 PWA (Progressive Web App) 模型,现在可以作为 PWA 安装在主机操作系统上。由于这种采用,现在也可能启用某些离线功能。用户只需访问过一次 vscode.devinsiders.vscode.dev,即使在离线状态下,也可以使用它来编辑本地文件。

Install VS Code PWA prompt

对扩展的贡献

Python

改进的解释器快速选择

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

Interpreters grouped in interpreter picker

我们还在试验将状态栏中活动/选定的解释器移至右侧,可能位于语言状态内部,因此如果不可见,请检查右侧的 Python 状态。

添加对 'conda run' 的支持

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

存在一个已知错误 issue #10972,它会导致在 Windows 上使用带有特殊字符的参数运行 linting 和测试时出错。这是由于 conda run 读取带有特殊字符的参数的方式所致,因此它可能会影响你在 settings.json 中指定的任何命令行参数。

Anaconda 团队正在处理此问题,并希望尽快发布修复。新版本发布后,你可以在 Conda 网站上更新你的 Anaconda 版本。

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

通过 Pylance 语言服务器,Python 代码的选择和折叠也得到了改进。

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

主题:Horizon Extended

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

Jupyter

远程 Jupyter 服务器

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

十六进制编辑器 (Hex Editor)

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

远程开发 (Remote Development)

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

你可以在远程开发发布说明中了解新的扩展功能和 bug 修复。

GitHub 拉取请求和议题

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

预览特性

终端外壳集成

终端现在具有实验性的外壳集成 (shell integration) 功能,它允许 VS Code 了解终端内部发生的事情,而这些信息以前是未知的。使用设置 "terminal.integrated.enableShellIntegration": true 启用后,如果可能,将向你的终端配置文件中注入用于运行外壳集成脚本的参数。脚本本身主要向你的提示符中注入不可见的序列,向 VS Code 提供提示符位置、命令和命令输出、每个命令的当前工作目录 (cwd) 以及每个命令的退出代码等信息。

使用此信息,我们可以通过多种方式增强现有功能

  • 快速检测 cwd - 之前这只能在 macOS 和 Linux 上实现,需要启动进程或查询文件系统来获取该信息。现在这在 Windows 上也可用了。cwd 用于链接检测和分割终端选项卡时继承 cwd 等功能。
  • 改进命令跟踪功能 - 此功能之前已经存在,但仅在 macOS 上有默认键绑定 (Cmd+Up/Down),并且采用简单的方式根据按下 Enter 键的时间来猜测行位置。

Shell 集成启用了以下新功能

  • 运行最近使用的命令 - 由于我们知道运行了哪些命令,我们可以暴露一个命令,让你可以在 Quick Pick 中查看并再次运行它们。Quick Pick 中显示了最近使用的命令,包括当前工作目录信息和运行时间间隔。
  • 转到最近使用的目录 - 与上面类似,我们也允许导航到之前使用过的目录。Quick Pick 中显示了最近使用的目录,按频率(降序)排序。
  • 相对于 cwd 的链接支持 - 现在我们知道终端缓冲区中每一行的 cwd,因此我们可以支持打开相对于链接激活位置的 cwd 的终端链接。以前,点击链接时会打开一个 Quick Pick,显示包含该名称匹配项的所有文件夹中的结果。现在,将直接打开精确匹配的文件。在 cwd 为 vscode 的终端中,echo package.json。点击文件名将打开 vscode/package.json。目录更改为 template-string-converter,然后 echo 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 现在实现了 Debug Adapter Protocol 中与内存相关的功能

在此版本中,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 模块已发布。该版本包含针对笔记本文档的提案实现。可以在此处阅读规范部分。

提议的扩展 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" 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 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(也称“serverless”),并在浏览器中打开它。使用 --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 使用 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 日)

问题跟踪

对我们问题跟踪的贡献

Pull request

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