在 VS Code 中尝试

2023 年 2 月 (版本 1.76)

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

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

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


欢迎来到 Visual Studio Code 2023 年 2 月发布。此版本包含许多我们希望您会喜欢的更新,其中一些主要亮点包括:

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

Insiders:想尽快试用新功能?您可以下载每夜构建的 Insiders 版本,并在最新更新发布后立即试用。

辅助功能

终端命令失败音频提示

当带有 Shell 集成的终端中命令以非零代码退出时,有视觉障碍的用户可以通过查看命令装饰来快速了解出现了失败。为了向屏幕阅读器用户传达失败信息,VS Code 现在会播放 audioCues.terminalCommandFailed 音频提示。

您可以通过滚动浏览帮助:列出音频提示下拉列表来收听可用的音频提示声音。

List Audio Cues dropdown with Terminal Command Failed cue selected

改进的错误音频提示响应能力

audioCues.lineHasError 音频提示现在在字符导航期间播放,以便屏幕阅读器用户能够更好地了解编辑器中的错误位置。

终端可访问缓冲区改进

上个迭代,我们引入了终端可访问缓冲区,它通过终端:聚焦可访问缓冲区命令为屏幕阅读器用户提供对终端内容的访问。

本次迭代,我们改进了可访问缓冲区,添加了选择和链接支持,使其变为只读,并使用 Shell 集成信息将输出限制为仅显示重要的终端内容 - 运行的命令、退出代码(如果有)以及输出。我们计划在下个迭代中添加此功能的配置。

上下文相关的 Tab 键聚焦模式

切换 Tab 键移动焦点命令对于确定工作台还是编辑器/终端接收 Tab 键输入非常有用。

新的 editor.tabFocusMode 设置允许用户设置默认行为。当值设置为 true 时,工作台接收 Tab 键输入,而不是编辑器或终端。

Windows 上的屏幕阅读器 Shell 集成支持

之前在 Windows 上检测到屏幕阅读器时,Shell 集成会被禁用,原因是在此上下文中的 PowerShell 支持存在问题。我们已经确定在大多数情况下这不再是问题,因此已启用此功能。

终端辅助功能帮助的补充

与屏幕阅读器社区的讨论为终端辅助功能帮助对话框 () 带来了补充,例如提及了创建新终端(带配置文件)首选项:打开辅助功能设置命令。

配置文件

配置文件 (在上个里程碑发布到稳定版) 允许您根据当前工作流程和项目快速切换 VS Code 配置。您可以保存一组自定义设置,例如设置、扩展和键绑定,在您的机器上同步它们,并轻松地与同事共享。

配置文件徽章

VS Code 现在通过在管理活动栏图标上显示配置文件名称的前两个字母作为配置文件徽章来指示当前的自定义配置文件。

Two profile badges showing the first two letters of the profiles

主题可以通过配置两个新的主题颜色来定制配置文件徽章的背景和前景色

  • profileBadge.background
  • profileBadge.foreground

切换配置文件

您现在可以通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的配置文件:切换配置文件命令快速切换配置文件,该命令会显示一个列出您可用配置文件的下拉列表。

Switch Profile command dropdown listing available profiles

远程工作区中的配置文件

您现在可以创建和自定义包含远程扩展的配置文件,并在远程开发工作区中切换它们。

下图显示了通过远程 - SSH 在两个实例中激活的两个不同配置文件(“文档编写”和“代码”)。

Profiles active in two Remote - SSH instances

配置文件文档

如果您想了解更多关于配置文件及其有用场景的信息,请查看新的Visual Studio Code 中的配置文件主题。本文详细介绍了如何创建、修改、共享和重用配置文件。

工作台

可移动的资源管理器视图

VS Code 中的大多数视图和视图容器都是可移动的,除了一些内置的视图。在此版本中,资源管理器视图容器 (⇧⌘E (Windows, Linux Ctrl+Shift+E)) 现在可以移动,并可以放置到辅助侧边栏或底部面板中,以实现更多的工作台自定义。

下图显示文件资源管理器视图已移动到面板区域。

File Explorer view moved to the panel area

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

固定宽度居中布局

视图:切换居中布局命令 (workbench.action.toggleCenteredLayout) 现在具有固定宽度布局选项。此选项通过新的 workbench.editor.centeredLayoutFixedWidth 设置启用。启用并激活居中布局时,编辑器将居中并尝试在窗口和面板调整大小时保持其宽度。

多个快速差异

随着提议的多个快速差异 API 的引入,多个扩展可以提供快速差异。当文件中存在多个快速差异时,您现在会看到一个下拉菜单,供您选择要查看的差异基准。

Multiple quick diffs and diff base dropdown

注释

注释视图新增了全部展开命令,与现有的全部折叠命令相对应。未解决注释的 gutter 图标现在与注释视图中使用的图标相同。

配置默认日志级别

您现在可以通过开发者:设置日志级别...命令配置 VS Code 或某个扩展的默认日志级别。此设置在重启后仍会保留,并在不同机器间同步。

Default log level dropdown with several extensions listed

选择一个扩展会显示与默认日志级别相同的日志级别下拉菜单。

扩展编辑器中验证的发布者域

扩展编辑器现在在已验证指示器旁边显示已验证的发布者域。如下图所示,prettier.io 域显示在已验证徽章的右侧。

Prettier extension in the extension editor displaying verified publisher domain prettier.io

编辑器

JSONC 文档排序

现在可以按键对 JSONC (带有注释的 JSON 文档) 文件进行排序。要使用此功能,请从命令面板中选择JSON:排序文档

用于匹配和着色的独立括号对

在此迭代中,当 editor.language.bracketseditor.language.colorizedBracketPairs 都配置时,我们改变了其行为。之前,设置 editor.language.colorizedBracketPairs 会覆盖 editor.language.brackets 用于括号匹配(因为两者都使用相同的括号对树)。现在,使用这两个设置的并集进行括号匹配,但只有在 editor.language.colorizedBracketPairs 中配置的括号才会被着色。

源代码管理

Git commit 语法高亮

VS Code 采用了新的 Git 语法,为 Git commit 消息文件提供语法高亮显示。新语法对非英语语言的支持更好。

Git 和 GitHub 文档

无论您是源代码管理新手还是经验丰富的 Git 用户,都可以在我们的文档的源代码管理部分了解更多关于 VS Code 的 Git 集成信息。文章包括:

笔记本

内核选择器默认模式:MRU

内核选择器现在默认显示最近使用的 (MRU) 内核。这与之前的行为有所不同,之前是显示所有可用内核。当您安装了最新的JupyterPython 扩展时,您仍然可以通过次级选择器选择另一个内核... 来查看所有内核,该选择器会按来源(例如:Jupyter 内核、Python 环境等)对内核进行分组。

Notebook kernel picker with MRU list and using the Select Another Kernel option

Notebook 渲染器性能诊断

运行 Notebook 单元格时,某些 Notebook 输出渲染器可能需要很长时间才能渲染。为了帮助识别这些渲染器,我们在 Notebook 单元格状态栏的悬停中添加了诊断信息。此视图显示了每个渲染器的执行时间和总执行时间。此外,悬停中的链接将打开问题报告器,并预填充渲染器的名称和执行时间,以便您在发现渲染器执行时间过长时轻松提交问题。

Image showing the cell Status bar hover with renderer execution times

内置错误渲染器现在支持链接到文件和行号。这允许您点击错误消息中的文件路径并在编辑器中打开文件。

Jupyter 扩展的错误渲染器已被弃用,转而使用内置错误渲染器。

Notebook built-in error renderer

语言

需要链接到另一个 Markdown 文档中的标题,但不记得或不想输入完整的文件路径?尝试使用工作区标题补全功能!要开始,只需在 Markdown 链接中输入 ##,即可看到当前工作区中所有 Markdown 标题的列表。

Suggestions for all Markdown headers in the current workspace

接受其中一个补全以插入到该标题的完整链接,即使它在另一个文件中。

Adding a link to the selected header in another file

您可以使用Markdown > 建议 > 路径:包含工作区标题补全设置 (markdown.suggest.paths.includeWorkspaceHeaderCompletions) 来配置是否/何时显示工作区标题补全。

有效的设置值有:

  • onDoubleHash (默认) - 仅在您输入 ## 后显示工作区标题补全。
  • onSingleOrDoubleHash - 在您输入 ### 后显示工作区标题补全。
  • never - 从不显示工作区标题补全。

请记住,查找当前工作区中的所有标题可能会很耗时,因此首次请求时可能会出现轻微延迟,特别是对于包含大量 Markdown 文件的工作区。

新的 markdown.preferredMdPathExtensionStyle 设置配置了 VS Code 是否更倾向于使用文件扩展名作为指向 Markdown 文件的链接。此偏好设置用于语言工具,例如路径补全链接重命名

有效的设置值有:

  • auto - 尝试保留现有文件扩展名的样式。
  • includeExtension - 在链接中包含尾部的 .md
  • removeExtension - 从链接中移除尾部的 .md

远程开发

远程开发扩展允许您使用开发容器、通过 SSH 或远程隧道连接的远程机器,或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。

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

远程菜单

在此里程碑中,我们对远程菜单进行了一些可用性改进,该菜单可通过点击状态栏左下角的远程指示器访问。

  1. 现在有一个默认的键盘快捷方式来打开远程菜单:⌥⌘O (Windows, Linux Ctrl+Alt+O)

  2. 我们减少了远程扩展对远程菜单的贡献,以便一眼就能轻松查看连接到远程窗口的所有操作。

    • 打开远程窗口的基本操作现在始终可在远程菜单中找到,因此即使您已经在远程窗口中,也可以发现连接到另一个远程的操作。
    • 大多数用于配置或开始使用远程的操作已从远程菜单移至命令面板,以节省远程菜单中的空间。
  3. 远程菜单中的安装其他远程扩展选项现在指向精选的远程开发扩展列表,并且如果所有此类扩展都已安装,则会从远程菜单中隐藏。

远程存储库

在此里程碑中,我们在远程存储库扩展中引入了无需克隆即可浏览和编辑远程存储库的演练,以帮助您在 GitHub 和 Azure Repos 中搜索、编辑和快速提交,而无需本地克隆。

您还可以查看远程存储库教程以帮助您入门。

Web 版 VS Code

在此里程碑中,我们为托管在 vscode.dev 上 GitHub 和 Azure Repos 存储库中的 Git LFS 跟踪文件添加了实验性只读支持。

在下面的短视频中,当在 vscode.dev 上滚动 Markdown 预览时,vscode-docs 存储库中存储在 Git LFS 上的图像是可见的。

当您在 GitHub 或 Azure Repos 存储库中查看文件时,我们会根据您的 .gitattributes 配置检测文件是否被 LFS 跟踪以及是否需要从 GitHub 或 Azure Repos 的 LFS 服务器获取。

您还可以使用 GitHub RepositoriesAzure Repos 扩展配合 VS Code 桌面版来浏览包含 Git LFS 跟踪文件的存储库,而无需克隆。

此行为可以通过以下设置禁用:

  • "githubRepositories.experimental.lfs.read.enabled": false
  • "azureRepos.experimental.lfs.read.enabled": false

VS Code 尚不支持提交 Git LFS 跟踪的文件,并且 github.dev 不支持读取 Git LFS 文件。

扩展

改进的扩展搜索相关性

我们改进了扩展视图Marketplace 图库中扩展搜索结果的相关性。现在结果应该更加合适,特别是对于多词查询。

之前 之后
Search results for "mono debugger" showing Java debugger extension as the top result Search results for "mono debugger" showing Mono debug extension as the top result

对扩展的贡献

Jupyter

IPyWidgets

Jupyter 扩展现在支持版本 8IPyWidgets。依赖于 IPyWidgets 7.* 的 Python Widgets 将继续工作,因为版本 7.*8.* 都受支持。

交互式窗口内核选择

修改了交互式窗口的内核自动选择功能,以便与新的内核选择器 UI 更好地协同工作。默认使用当前活动的解释器,除非之前已为该工作区中的交互式窗口选择过另一个内核,在这种情况下使用先前选择的内核。

Python

改进的 pytest IntelliSense 支持

Pylance 扩展现在拥有强大的功能,可以帮助您在使用 pytest 编写清晰、简洁、易于理解的测试时更高效、更有效地工作:

  • 支持对 pytest fixtures 和参数化参数进行补全、转到定义查找所有引用重命名符号 (F2)。
  • 通过内嵌提示(由 "python.analysis.inlayHints.pytestParameters" 设置启用)和代码操作支持对 pytest 参数进行类型注解。
  • 基于提供给装饰器的参数值,对参数化 pytest 参数进行类型推断。

下面的短视频重点介绍了这些新的 pytest 功能:

GitHub Pull Requests 和 Issues

GitHub Pull Requests and Issues 扩展取得了更多进展,该扩展允许您处理、创建和管理 pull requests 和 issues。亮点包括:

  • PR 描述和注释中的固定链接渲染。
  • 从描述页面重新请求审阅。
  • 签出 PR 中文件的快速差异。

查看扩展 0.60.0 版本的变更日志,了解其他亮点。

预览功能

全局搜索现在支持显示 Notebook 中的结果,如同它们在 Notebook 编辑器中显示一样。启用 search.experimental.notebookSearch 来试用此功能,并告诉我们您遇到的任何 Bug!此功能目前仅支持搜索单元格中的单元格输入和 Markdown 源代码。

主题:Community Material Theme (在 vscode.dev 上预览)

异步分词

此版本发布了实验性的异步分词功能。此功能允许编辑器在单独的 Web Worker 中对文档进行分词,这可以在文档较大时提高编辑器的响应速度。

目前,异步分词默认是禁用的,但可以通过将 editor.experimental.asyncTokenization 设置为 true 来启用。

TypeScript 5.0 支持

本次更新包含对即将发布的 TypeScript 5.0 的支持。请参阅TypeScript 5.0 Beta 博客文章TypeScript 5.0 迭代计划,了解有关 TypeScript 团队当前正在开展工作的更多详情。一些编辑器工具亮点包括:

  • 新的 switchcase 补全有助于您更快地填写 switch 语句的两个部分。
  • 正在努力在 github.devvscode.dev 上启用项目范围的 IntelliSense。

要开始使用 TypeScript 5.0 每夜构建版本,请安装 TypeScript Nightly 扩展或安装最新的 VS Code 1.76+ Insiders 版本

扩展开发

在此迭代中,我们引入了在 InputBox 提示和验证消息中支持链接的功能。在这些字符串中,您现在可以使用以下语法创建链接:

[link text](link target)

链接目标可以是 URL 或命令 ID。当用户点击链接时,链接目标分别在浏览器中打开或作为命令执行。

示例

const result = await vscode.window.showInputBox({
  prompt:
    'Please enter a valid email address [more info](https://aka.ms/vscode-email-validation)',
  validateInput: text => {
    if (text.indexOf('@') === -1) {
      return 'Please enter a valid email address, [more info](https://aka.ms/vscode-email-validation)';
    }
    return undefined;
  }
});

结果将显示以下提示:

Prompt contains a link that is underlined

以及以下验证消息:

Validation message contains a link that is underlined

主题:Panda Theme (在 vscode.dev 上预览)

此行为适用于 showInputBoxcreateInputBox API。

* 激活事件的信息诊断

当扩展使用 * (星号) 激活事件时,它会在 VS Code 启动过程中被激活。这可能会延迟 VS Code 的启动。为了帮助扩展作者了解使用 * 激活事件的影响,我们添加了一个信息诊断,当扩展使用 * 激活事件时会显示该诊断。诊断信息显示在“问题”视图中,在扩展编辑器中也可见:

Diagnostic for * activation event

有关 * (星号) 激活的更多信息,您可以阅读激活事件文档。

when 子句上下文解析的即将发生的更改

扩展清单文件 (package.json) 中使用的when 子句允许扩展有选择地启用和禁用贡献,例如命令和 UI 元素(例如,菜单或视图)。下一个 VS Code 版本计划包含一个新的 when 子句解析器。新解析器提供了更多功能和更高的正确性,但它也对 when 子句强制执行更严格的规则,可能会导致现有 when 子句的一些中断。请查看问题 #175540,了解有关中断和新功能的更多信息。还鼓励您订阅该问题,以获取有关新解析器的更新,包括新功能、中断和迁移指南。

即将到来的 Electron 更新可能需要对原生模块进行强制性更改

我们计划在下一个稳定版本中更新到 Electron 22。由于启用了 V8 内存笼,这对于利用原生模块的扩展会产生影响:指向外部(“堆外”)内存的 ArrayBuffers 将不再被允许。这意味着依赖于 V8 中此功能的原生模块需要重构,以便在 VS Code 1.77 及更高版本中继续工作。

请遵循Electron 博客文章中的建议,了解如何使您的原生模块在未来版本的 VS Code 中工作。

Language Server Protocol

发布了新版本的Language Server Protocol (LSP) 客户端 (8.1.0) 和服务器 (8.1.0) npm 包。这些是错误修复版本(主要解决了使用全文文档同步时的请求顺序问题),并包含用于 JSON-RPC 库的自定义消息处理的 API 添加。

提议的 API

每个里程碑都会有新的提议的 API,扩展作者可以试用它们。一如既往,我们希望获得您的反馈。以下是试用提议的 API 的步骤:

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

您不能发布使用提议的 API 的扩展。下个版本可能存在破坏性更改,我们绝不希望破坏现有扩展。

OpenDialogOptions allowUIResources

当扩展知道它们在远程扩展宿主中运行时,可以使用 allowUIResources 使打开文件对话框中显示显示本地按钮。使用 allowUIResources 的扩展应始终检查返回的 URI 的方案。

QuickPickItems 的工具提示

本次迭代我们引入了一个新的提议的 API,用于在 QuickPickItem 上添加一个 tooltip 属性。此属性允许您为 Quick Pick 中的每个项目指定一个工具提示。当用户将鼠标悬停在项目上时会显示该工具提示,也可以通过 Ctrl+Space 切换显示。

示例

await vscode.window.showQuickPick(
  [
    {
      label: 'label',
      tooltip: 'tooltip'
    },
    {
      label: 'label2',
      tooltip: new vscode.MarkdownString('tooltip2 [link](https://github.com)')
    }
  ],
  {
    placeHolder: 'placeholder'
  }
);

结果将如下所示(在 Quick Pick 中)

主题:Panda Theme (在 vscode.dev 上预览)

显然,这是一个不需要工具提示的简单示例。当您想要提供多行长描述或指向额外资源的链接时,工具提示会很有用。

我们认为此属性是对 Quick Pick API 的良好补充,并期待您的反馈。

工程

更多 Electron UtilityProcess 的采用

作为我们进程沙盒化之旅的一部分,我们希望确保应用程序中不再有启用 Node.js 的浏览器窗口。在此里程碑中,我们开始将最后一个剩余的进程从隐藏的 Node.js 浏览器窗口转换为 Electron UtilityProcess。作为这项工作的一部分,文件监视器进程也必须移到其自己的 UtilityProcess 中。

新设置 window.experimental.sharedProcessUseUtilityProcess 启用 UtilityProcess 的使用,我们计划在下一版本中将其设为默认值。

macOS 10.11 和 10.12 支持已终止

正如我们在1.75 版本说明中提到的,1.76 是最后一个支持 macOS 10.11 (OS X El Capitan) 和 10.12 (macOS Sierra) 的版本。有关更多信息,请参阅我们的常见问题解答

重要修复

  • 168939 在重新加载和视图移动时保留徽章隐藏状态。
  • 164397 macOS RTL 布局控制位置错误。

感谢

最后但同样重要的是,衷心感谢 VS Code 的贡献者们。

问题跟踪

对问题跟踪的贡献

拉取请求 (Pull requests)

vscode 的贡献

vscode-pull-request-github 的贡献

vscode-vsce 的贡献

monaco-editor 的贡献