现已发布!阅读 10 月份的新功能和修复。

2022 年 11 月(版本 1.74)

更新 1.74.1:此更新解决了以下问题问题

更新 1.74.2:此更新解决了以下问题问题

更新 1.74.3:此更新解决了以下安全问题

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


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

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

内部人员:希望尽快尝试新功能?您可以下载 nightly 内部人员 构建并尝试最新的更新,一旦它们可用。

无障碍功能

笔记本执行的音频提示

现在有 音频提示 用于笔记本单元格完成运行。提示不同,以指示单元格是成功运行还是失败。

差异审阅模式的音频提示

在差异编辑器中,当触发转到下一个差异时,将播放特定的音频提示以指示光标是在插入行还是删除行上。

如果您对可用的音频提示感到好奇,您可以通过帮助:列出音频提示下拉菜单听到它们。

List Audio Cues dropdown

设置编辑器中的指示器、悬停和链接现在可以通过键盘进行导航。一些链接的样式也已调整,以提高设置编辑器的一致性。

设置编辑器指示器悬停在制表符和保持键盘焦点方面表现得更好。这种改进的行为仍然是实验性的,目前仅针对设置编辑器指示器悬停启用,而不是针对 VS Code 中的所有悬停启用。

Navigating settings and a Modified elsewhere indicator in the Settings editor using the keyboard

主题:浅粉色(预览 vscode.dev 上)

工作区

自定义资源管理器自动显示逻辑

高度赞成的 问题 #87956(“允许为特定文件夹设置 explorer.autoReveal”)已通过引入新的设置 explorer.autoRevealExclude 来修复。此设置允许您配置在启用自动显示(explorer.autoReveal,默认值为 true)的情况下,哪些文件在资源管理器中自动显示。autoRevealExclude 设置使用 glob 模式 来排除文件,类似于 files.exclude,还支持通过 when 子句进行同级匹配。

默认值排除节点和 bower 模块

{
  "explorer.autoRevealExclude": {
    "**/node_modules": true,
    "**/bower_components": true
  }
}

隐藏每个视图容器的徽章

与您能够通过右键单击视图容器隐藏视图容器的方式类似,您现在可以隐藏容器上的徽章(显示在活动栏、面板和次要侧边栏中)。徽章通常会为特定视图容器显示数字、图标或进度指示器,例如源代码管理视图的待处理更改数量。

A context menu is triggered on the Source Control view showing a Hide Badge entry. This is then selected and the blue number one badge disappears. Triggering the context menu again shows a Show Badge entry which brings the blue badge number one badge back.

合并编辑器

此版本为合并编辑器提供了一些改进和错误修复。亮点包括

  • 撤消/重做现在跟踪冲突的已处理状态。
  • 输入视图中的忽略操作可用于接受基础版本,而不是结果视图中的标记为已处理操作。
  • 两侧相等的变化现在会自动解决。
  • 提供 git blame 功能的扩展现在可以在传入、当前和基础编辑器中工作。

安装位于磁盘上的扩展

您现在可以使用开发人员:从位置安装扩展...命令安装位于本地磁盘驱动器上的扩展。该命令将打开平台文件夹对话框以选择扩展的 .vsix 文件的位置。

编辑器

CJK 字符的新换行选项

名为 editor.wordBreak 的设置现在可以用来避免在 CJK 字符 后插入换行点。当配置为 keepAll 时,换行算法将尝试将 CJK 字符后的文本保留在同一行上。此设置对其他脚本中的字符没有任何影响。

OpenType 字体的新的字体设置

一些支持 OpenType 字体变体的更新字体支持调整某些轴,例如字体粗细轴,以实现无法通过 font-weight CSS 属性配置的字体粗细。在 CSS 中,这是通过 font-variation-settings 属性实现的。如果您使用的是此类字体,您现在可以将 editor.fontVariations 配置为 true,这将导致 VS Code 使用 "wght" 显示轴来设置字体粗细。如果您的字体支持其他轴,也可以直接配置它们,例如通过设置 "editor.fontVariations": "'ital' 0.5"

新的缩进大小设置

有一个名为 editor.indentSize 的新设置,允许将缩进大小(构成缩进的空格数)与制表符大小(用于渲染制表符的空格数)分离。这在处理使用混合制表符和空格缩进的文件时很有用,并且仅在使用手动缩进配置时可以使用。

以下是一个示例配置

"editor.detectIndentation": false,
"editor.insertSpaces": true,
"editor.tabSize": 8,
"editor.indentSize": 2

部分接受内联补全的命令

命令接受内联建议的下一个词editor.action.inlineSuggest.acceptNextWord)可用于接受当前内联建议的下一个词/非词段。目前,它只能接受内联建议第一行的部分内容。该命令仍在开发中,我们正在探索未来版本中的键盘快捷键以及替代分割规则。

源代码管理

管理不安全的 Git 存储库

VS Code 使用 git.exe 执行所有 Git 操作。从 Git 2.35.2 开始,用户被阻止在由当前用户以外的用户拥有的文件夹中的存储库中运行 Git 操作,因为该存储库被认为可能不安全。

从本版本开始,如果您尝试打开此类可能不安全的存储库,VS Code 将在源代码管理视图中显示一个欢迎视图以及一个错误通知。欢迎视图和通知都公开管理不安全的存储库命令,该命令允许您查看可能不安全的存储库列表,将它们标记为安全,并打开它们。管理不安全的存储库命令也可以在命令面板中使用。将存储库标记为安全将把存储库位置添加到 safe.directory git 配置 中。

乐观的用户界面更新

执行 Git 操作后,将执行一组 git 命令(例如 git status)来更新数据模型,然后再更新源代码管理视图。在某些情况下,运行这些命令可能需要几秒钟才能完成(例如,在处理大型单体存储库时),这会导致源代码管理视图刷新之前出现延迟。

在本里程碑中,我们进行了更改,以便在 git status 完成之前,对某些 Git 操作(暂存、取消暂存、丢弃更改和提交)进行乐观更新,从而使源代码管理视图更敏捷。

新功能默认启用,但可以使用 git.optimisticUpdate: false 禁用。

提交操作按钮润色

提交操作按钮执行辅助提交命令(例如,提交并同步)时,按钮标签现在会正确反映正在执行的命令。提交按钮还显示一个动画,指示进度。

终端

终端快速修复改进

终端快速修复现在以代码操作控件的形式呈现,以与编辑器中的体验保持一致。

A Quick Fix is triggered in the terminal and a menu is presented with a play button to the left of the action's label

终端下拉菜单中的任务操作

运行任务配置任务命令显示在终端下拉菜单中,以便于发现和访问。

The last section of the terminal dropdown menu contains Run Task and Configure Tasks commands

远程开发

远程隧道 现在作为 VS Code Stable 的预览功能提供。远程隧道允许您从任何设备、任何位置使用 VS Code 安全地访问您的机器。要启用远程隧道访问,您可以选择

  • 从帐户菜单或命令面板中选择打开远程隧道访问
  • 从安装了 VS Code 并位于 PATH 中的机器上运行 code tunnel
  • 下载新的 VS Code CLI 并运行 ./code tunnel

启用隧道访问后,您可以使用 vscode.dev 从任何设备连接到机器,或者使用 VS Code 桌面中的 远程 - 隧道 扩展。

要了解更多信息,请查看我们的 博客文章,其中宣布了此功能远程隧道 文档。

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

注意:如果您之前使用的是独立的 code-server CLI,现在应使用 VS Code CLI(通过最新的 VS Code 桌面或上述独立下载)代替。

调试

JavaScript 调试

支持 console.profile

JavaScript 调试器现在支持 console.profile。在调试器下运行时,将为 console.profile()console.profileEnd() 之间的代码收集 CPU 配置文件。

console.profile();
doSomeExpensiveWork();
console.profileEnd();

生成的 .cpuprofile 文件将保存在您的工作区文件夹中,您可以使用 VS Code 内置的 配置文件查看器 打开并查看。

支持嵌套源映射

有时,尤其是在单仓库设置中,源代码可能会被编译一次,然后再次编译或捆绑。在许多情况下,这将导致生成的捆绑包的源映射引用在第一步中创建的编译文件。

JavaScript 调试器现在将自动递归解析源映射,以便无需额外步骤即可调试原始源文件。

killOnServerStop 属性已添加到 serverReadyAction

serverReadyAction launch.json 功能允许用户启动一个调试会话,该会话启动一个 Web 服务器,然后服务器启动后,自动开始调试导航到该服务器 URL 的浏览器。有一个新的属性 killOnServerStop,当设置为 true 时,将导致新的浏览器调试会话在服务器调试会话停止时自动停止。

例如

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",

  "serverReadyAction": {
    "pattern": "listening on port ([0-9]+)",
    "uriFormat": "https://127.0.0.1:%s",
    "action": "debugWithEdge",
    "killOnServerStop": true
  }
}

在上面的示例中,当原始的 启动程序 调试会话停止时,自动启动的 Edge 调试会话也将停止。

异常断点显示在聚焦的调试会话中

以前,在运行两种不同类型的调试会话时管理异常断点效果不佳。现在,当在调用堆栈视图中聚焦调试会话时,将显示该会话调试类型的正确断点集。

Exception breakpoints correctly shown per call stack frame

注释

comments.visible

新的设置 comments.visible 可用于关闭编辑器注释(注释栏和编辑器内注释窥视视图)。命令注释:切换编辑器注释仍然可以在会话期间用于打开和关闭编辑器注释。在注释视图中选择注释将始终打开注释。

注释视图徽章

注释视图显示未解决注释数量的徽章。

Comments view badge

任务

问题匹配器 'search' 文件位置方法

以前,问题匹配器需要通过 fileLocation 属性精确地知道在哪里查找有问题的文件。支持的方法是 absoluterelativeautoDetect(首先检查相对路径,如果失败则查找绝对路径)。

但是,在使用位于嵌套子目录中的脚本的工作区中,很难设置任务,因为不同的脚本很少以统一的方式报告文件路径(例如,相对于工作区的基目录)。

为了解决这个问题,有一种新的文件位置方法,名为 search。使用此方法,将运行递归文件系统搜索以查找任何捕获的路径。

以下示例显示了如何设置 search 文件位置方法(虽然所有参数都是可选的)

"problemMatcher": {
    // ...
    "fileLocation": [
        "search",
        {
            "include": [ // Optional; defaults to ["${workspaceFolder}"]
                "${workspaceFolder}/src",
                "${workspaceFolder}/extensions"
            ],
            "exclude": [ // Optional
                "${workspaceFolder}/extensions/node_modules"
            ]
        }
    ],
    // ...
}

注意,用户应该注意避免导致耗时的文件系统搜索(例如,查看 node_modules 目录)并适当地设置 exclude 属性。

语言

TypeScript 4.9

VS Code 现在附带 TypeScript 4.9。此重大更新带来了新的 TypeScript 语言功能,例如 satisfies 运算符自动访问器。在工具方面,我们对 文件监视 进行了改进,并进行了一些其他修复和改进。

查看 TypeScript 4.9 宣布,以了解更多有关此更新的信息。

转到返回定义

JavaScript 和 TypeScript 现在支持在 return 关键字上运行转到定义,以便快速跳转到从其返回的函数的顶部。这在处理长、复杂或高度嵌套的函数时很有用。您可以使用为此的转到定义命令/键绑定 (F12),或者只需在 return 关键字上Cmd/Alt + 点击

笔记本

内核选择器实验:最近使用的内核

有一个新的笔记本内核选择器,它在选择器的顶部显示最近使用的内核。这是一个选择加入的实验,可以通过将 notebook.kernelPicker.type 设置设置为 mru 来启用。

未使用的内核将被移动到辅助选择器选择另一个内核... 中。当您安装了最新的 Jupyter 扩展 时,此选择器将按其来源(例如:Jupyter 内核、Python 环境等)对所有内核进行分组。

Kernel picker with most recently used kernels

我们很乐意听到您的反馈,您可以在 VS Code 存储库 中创建问题。

适用于 Web 的 VS Code

源代码管理

VS Code for the Web 现在支持在编辑 GitHub 和 Azure Repos 存储库时的以下设置

  • "git.branchRandomName.enabled" - 在 VS Code for the Web 中创建分支时生成随机分支名称。
  • "git.branchRandomName.dictionary" - 指定用于在 VS Code for the Web 中创建分支时生成随机分支名称的词典。
  • "git.closeDiffOnOperation" - 在执行源代码管理操作(如提交、暂存、取消暂存更改)后关闭 diff 编辑器。

此外,VS Code for the Web 在状态栏和受保护分支的分支选择器中显示一个锁定图标,与 VS Code 桌面上的体验保持一致。

Lock icon for protected branches in the Status bar and branch picker

最后,您现在可以使用 VS Code for the Web 中的源代码管理操作按钮直接将您的更改提交并推送到存储库远程。

Commit & Push using source control action button

如果您希望在提交更改之前验证更改,您还可以使用操作按钮下拉菜单中的辅助继续在...上工作操作将您的工作更改带到另一个开发环境。

继续在...上工作的改进

当您在 GitHub 或 Azure Repos 存储库中时,现在在命令面板中提供方便的一步式命令,可以将您的工作更改带到特定的开发环境

  • 在新的 Codespace 中继续工作
  • 在本地克隆中继续工作
  • 在 VS Code 桌面上的远程存储库中继续工作

One step commands to continue working in another development environment

我们还将编辑会话重命名为云更改,以明确它与将工作更改存储在云中有关。

对扩展的贡献

Jupyter

"仅我的代码" 用于笔记本单元格调试

"仅我的代码" 调试功能允许您确定调试器是否会逐步执行来自 Python 库的代码,或者只逐步执行您的源代码。在调试笔记本单元格时,此功能已默认启用,但您可以将 "jupyter.debugJustMyCode": false 设置为禁用它,让您逐步执行库代码。为了获得最佳体验,请将您环境中的 debugpy 升级到 >=1.6.3。以前,debugJustMyCode 设置仅在交互式窗口中调试时才被尊重,现在它也适用于笔记本编辑器。

支持重新启动笔记本单元格调试会话

调试工具栏中的重新启动命令会重新启动当前调试会话。以前,这在笔记本调试会话中会引发错误,但现在它得到了支持。不幸的是,它无法在交互式窗口中得到正确支持。

此功能在您调试、编辑单元格,然后重新启动调试会话以再次调试应用了编辑的单元格的工作流程中特别有用。

远程开发扩展

远程开发扩展 允许您使用容器、远程机器或 Windows 子系统 Linux (WSL) 作为功能齐全的开发环境。此版本的亮点包括

  • 开发容器 GPU 支持
  • 开发容器 Cygwin/Git Bash 套接字转发
  • 远程 - 隧道 扩展 - 连接到远程机器,无需 SSH。

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

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展取得了更多进展,它允许您处理、创建和管理拉取请求和问题。亮点包括

  • 笔记本支持永久链接命令。
  • 拉取请求检查状态(例如持续集成 (CI) 正在进行中、需要审查、CI 失败等)显示在拉取请求树视图中。
  • 可以从拉取请求概述中复制 PR 的 vscode.dev 链接。
  • 命令转到拉取请求中的下一个差异会在已检出的 PR 中跨文件导航到下一个差异。

查看 扩展的 0.56.0 版本的变更日志,以查看其他亮点。

预览功能

个人资料

我们过去几个月一直在努力支持 VS Code 中的**配置文件**,这是社区中最受欢迎的请求之一。此功能可通过 `workbench.experimental.settingsProfiles.enabled` 设置进行预览。请尝试一下,并在 vscode 仓库 中创建问题或在 问题 #116740 中发表评论,给我们反馈。

共享配置文件

您现在可以通过将配置文件导出到 GitHub 作为 gist 来共享它。VS Code 将使用您的 GitHub 帐户创建一个秘密 gist,并为您提供一个链接以与他人共享。当您打开该链接时,VS Code 将提示您安装共享的配置文件。在导出或导入配置文件期间,VS Code 将显示一个预览,以便您可以分别查看和选择要导出或导入的数据。

以下是一个将配置文件导出到 GitHub,然后复制链接与他人共享的视频

Exporting a Profile

此视频展示了通过打开共享链接导入配置文件

Importing a Profile

扩展签名和验证

从 11 月中旬开始,上传到 Visual Studio Marketplace 的所有 VS Code 扩展将由 VS Marketplace 签名 - 此过程称为存储库签名。在每次扩展安装和更新时,VS Code 将验证扩展包签名。通过签名和签名验证,我们可以保证扩展包的完整性和真实性。

签名验证目前仅在 VS Code Insiders 中进行。如果您发现任何问题,可以通过在 vscode 仓库 中创建问题来告知我们,您也可以通过将 `extensions.verifySignature` 设置为 `false` 来选择退出签名验证。我们正在努力在未来几个月内在 VS Code Stable 中启用签名验证。

除了存储库签名外,我们还开始着手进行 扩展发布者签名 的工作。

Web 中的 Python 执行

我们在 实验性 - Web 版 Python 扩展中添加了调试支持。调试器支持以下功能

  • 设置断点
  • 单步进入和退出函数
  • 跨模块调试
  • 在调试控制台中评估变量
  • 在集成终端中调试程序

以下屏幕截图显示了调试 `Hello World` 程序

Python debugging in VS Code for the Web

注意,使用该扩展仍然需要您将以下查询参数添加到浏览器 URL 中:`?vscode-coi=`。

扩展开发

为声明的扩展贡献隐式激活事件

在这个里程碑中,我们取消了如果您的扩展在其 `package.json` 中声明了某些扩展贡献,则需要显式列出激活事件的要求。

以前,如果一个扩展在其 `package.json` 文件中声明它贡献了一个命令 `mycommand`,它还需要在 `package.json` 的 `activationEvents` 字段中列出相应的 `onCommand:mycommand` 激活事件,才能成功执行该命令。这很繁琐,容易出错,并会导致 `package.json` 文件过大。

VS Code 现在将自动为以下扩展贡献点填充激活事件

贡献点 推断的激活事件
commands onCommand
authentication onAuthenticationRequest
languages onLanguage
customEditors onCustomEditor
views onView

扩展作者现在可以安全地从您的扩展中删除这些推断的激活事件。如果您这样做,请更新您的 VS Code 引擎要求,以确保您的扩展不被视为与早期版本的 VS Code 兼容

    "engines": {
        "vscode": "^1.74.0"
    },

日志输出通道

在这个里程碑中,我们最终确定了 LogOutputChannel API。您现在可以使用此 API 创建一个日志输出通道,该通道将用于记录来自您的扩展的日志消息。

我们还最终确定了 logLevel 属性和 onDidChangeLogLevel 事件(在 `env` 命名空间中),以指示应用程序的当前日志级别,并在应用程序的日志级别更改时触发一个事件。

所有 Webview 的一致来源

我们上次迭代的工作 之后,VS Code 中的所有 Webview 现在都尝试维护自定义来源。从 1.74 开始,这也扩展到自定义编辑器使用的 Webview。

这通过允许 Webview 内容在更多情况下被缓存来提高性能。有关更多详细信息以及作为扩展作者需要了解的内容,请参阅 以前的发行说明

扩展 README 中的 Video 标签支持

扩展现在可以在其 README 中使用 `<video>` 标签。VS Code Marketplace 和 VS Code 中的扩展视图页面都支持视频。与 `。gif` 相比,视频文件具有更高的质量,而且通常尺寸更小。您甚至可以包含音频!

请记住,VS Code 本身仅支持特定视频和音频格式。目前,您还必须使用 `<video>` `src` 和 `poster` 的完整路径,而不是相对路径。

评论线程的其他操作

新的菜单位置 `comments/commentThread/additionalActions` 允许扩展为评论线程贡献始终可见的按钮。

Visible button in a comment

vsce 重命名为 @vscode/vsce

VS Code 的扩展管理器 vsce 工具已重命名为 @vscode/vsce。对于将该工具用作库的任何人来说,这是一个重大变化。CLI 工具仍然称为 `vsce`,可以通过 `npm install -g @vscode/vsce` 进行安装。

调试适配器协议

调试适配器协议 中添加了一些澄清和一个新的属性。

  • DataBreakpointInfo 请求有一个新的可选 `frameId` 属性。客户端可以使用此标志指定哪个堆栈帧包含一个 `name` 变量。
  • 现在为 `readMemory` 请求指定了文件末尾的行为。

工程

属性和方法的名称混淆

我们的产品构建现在混淆了属性和方法的名称。这将我们主要捆绑包的大小减少了约 13%(-1.5 MB),并将代码加载时间减少了约 5%。

GitHub 和 Microsoft 身份验证扩展捆绑包大小改进

考虑到这两个扩展提供的功能以及它们在许多情况下(例如 vscode.dev)对于启动至关重要,它们的捆绑包大小比我们想要的要大。在这个里程碑中,我们专注于减小这些扩展的大小,以下是一些结果

  • GitHub 身份验证:93 KB -> 64.9 KB
  • Microsoft 身份验证:97 KB -> 57.7 KB

这是通过以下方式实现的

  • 不再依赖(和捆绑)提供 Node.js 和 Web 中 readily available 的功能的节点模块(例如,删除 `uuid`,而使用 Crypto.randomUUID())。
  • 仅在 Node.js 中使用 `node-fetch`,而不是在 Node.js 和 Web 中都使用它。
  • 采用最新的 `@vscode/extension-telemetry` 版本,其大小已大大减小。

在此过程中没有丢失任何功能,并且由于这些扩展的大小减小,现在它们的获取和加载速度更快。

Electron 沙盒之旅

您可以在最近的 "将 VS Code 迁移到进程沙盒" 博客文章中了解我们启用 Electron 沙盒 的进展。这篇文章详细介绍了技术时间线,并描述了为支持 VS Code 沙盒所做的增量更改。

如果您想尝试 VS Code 沙盒模式,可以在设置中设置 ` "window.experimental.useSandbox": true`。希望您不会注意到任何功能上的差异,但如果您发现问题,请向我们报告。

Windows 上默认情况下重新启用窗口控件叠加

窗口控件叠加 (WCO) 已默认重新启用。它之前在 8 月份启用,但后来又禁用了,因为对于使用从右到左系统语言的用户来说,它 渲染在错误的一侧,覆盖了 **文件** 和 **编辑** 菜单项。

主要问题是 VS Code 没有将应用程序区域设置传递给 Electron,因此 Electron 使用系统区域设置来确定 WCO 的放置位置。但是,VS Code 依赖于 Electron 的 `app.getLocale()` API 来获取系统语言并确定要推荐的语言包,将应用程序区域设置传递给 Electron 导致 `app.getLocale()` 返回相同的区域设置,而不是系统语言。

为了解决这个问题,我们在 Electron 中添加了一个新的 `app.getPreferredSystemLanguages()` API,因此即使在将区域设置传递给 Electron 之后,我们仍然可以获取系统语言,以便用于 VS Code 的语言包推荐程序,同时将 WCO 保留在右侧。

VS Code with the custom title bar along with Paint's title bar. The screenshot is taken on Windows 11 with the system language in Arabic, showing that the WCO is on the right for VS Code, which is in English, while it is on the left for Paint, which is in Arabic.

内置扩展现在使用新的 l10n API,而不是 vscode-nls

上个月,我们稳定了新的 本地化 (l10n) API。这个月,我们在 Microsoft/vscode 存储库中找到的每个扩展中都采用了该 API。我们仍然需要将语言服务器迁移到使用 `@vscode/l10n` 而不是 `vscode-nls`,以及团队拥有的其他一些扩展(JS Debug、Python、Jupyter Notebooks 等),但我们正在朝着为所有扩展提供统一本地化方案的方向发展。

值得注意的修复

感谢

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

问题跟踪

对我们问题跟踪的贡献

拉取请求

对 `vscode` 的贡献

vscode-css-languageservice 的贡献

vscode-eslint 的贡献

vscode-js-debug 的贡献

vscode-json-languageservice 的贡献

vscode-pull-request-github 的贡献

debug-adapter-protocol 的贡献

devcontainers/cli 的贡献