2022年11月(版本1.74)

更新 1.74.1: 本次更新解决了这些问题

更新 1.74.2: 本次更新解决了这些问题

更新 1.74.3: 此更新解决了这个安全问题

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


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

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

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

可访问性

笔记本执行的音频提示

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

差异审查模式的音频提示

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

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

音频提示列表下拉菜单

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

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

使用键盘在设置编辑器中导航设置和“在其他地方修改”指示器

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

工作台

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

高度投票的问题 #87956("允许为特定文件夹设置 explorer.autoReveal")通过引入新设置explorer.autoRevealExclude已得到修复。此设置允许您在启用自动显示(explorer.autoReveal,默认true)时配置哪些文件在资源管理器中自动显示。autoRevealExclude设置使用glob 模式来排除文件,类似于files.exclude,也支持通过 when 子句进行兄弟匹配。

默认值排除 node 和 bower 模块:

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

隐藏每个视图容器的徽章

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

在源代码控制视图上触发的上下文菜单显示了一个隐藏徽章条目。然后选择该条目,蓝色的数字一徽章消失。再次触发上下文菜单显示一个显示徽章条目,该条目将蓝色的数字一徽章带回来。

合并编辑器

此版本发布了一些针对合并编辑器的改进和错误修复。亮点包括:

  • 撤销/重做现在跟踪冲突的处理状态。
  • 忽略 输入视图中的操作可用于接受基础版本,而不是结果视图中的标记为已处理操作。
  • 现在,双方相同的更改会自动解决。
  • 提供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来禁用它。

提交操作按钮优化

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

终端

终端快速修复改进

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

在终端中触发了快速修复,并在操作标签的左侧显示了一个带有播放按钮的菜单

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

运行任务配置任务 命令出现在终端下拉菜单中,以提高可发现性和访问的便捷性。

终端下拉菜单的最后部分包含运行任务和配置任务命令

远程开发

Remote Tunnels 现在作为预览功能在 VS Code 稳定版中可用。远程隧道允许您从任何设备、任何地方安全地使用 VS Code 访问您的机器。要启用远程隧道访问,您可以选择以下任一方式

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

一旦隧道访问开启,您就可以使用vscode.dev从任何设备连接到机器,或者使用VS Code桌面版中的Remote - Tunnels扩展。

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

主题: 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 内置的 profile viewer 打开和查看。

支持嵌套的源映射

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

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": "http://localhost:%s",
    "action": "debugWithEdge",
    "killOnServerStop": true
  }
}

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

为当前调试会话显示的异常断点

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

每个调用堆栈帧正确显示的异常断点

评论

评论.可见

新设置 comments.visible 可用于关闭编辑器评论(评论栏和编辑器内的评论预览视图)。命令 Comments: Toggle Editor Commenting 仍然可以在会话期间切换编辑器评论的开启和关闭。在 Comments 视图中选择一个评论将始终开启评论功能。

评论视图徽章

评论视图显示一个徽章,用于显示未解决评论的数量。

评论视图徽章

任务

问题匹配器 '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环境等)对所有内核进行分组。

最近使用的内核选择器

我们非常乐意听取您的反馈,您可以在VS Code 仓库中创建问题。

网页版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" - 在执行源代码控制操作(如提交、暂存、取消暂存更改)后关闭差异编辑器。

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

状态栏和分支选择器中受保护分支的锁定图标

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

使用源代码控制操作按钮提交和推送

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

需要继续改进的地方

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

  • 继续在新的代码空间中工作
  • 继续在本地克隆中工作
  • 在VS Code桌面上继续在远程仓库中工作

一键命令以继续在另一个开发环境中工作

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

对扩展的贡献

Jupyter

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

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

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

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

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

远程开发扩展

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

  • 开发容器 GPU 支持
  • Dev Container Cygwin / Git Bash 套接字转发
  • Remote - Tunnels 扩展 - 无需SSH即可连接到远程机器。

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

GitHub 拉取请求和问题

GitHub Pull Requests and Issues扩展方面取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。亮点包括:

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

查看扩展的0.56.0版本的更新日志以了解其他亮点。

预览功能

配置文件

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

共享配置文件

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

这是一个将个人资料导出到GitHub然后复制链接与他人分享的视频:

导出配置文件

本视频展示了通过打开共享链接导入配置文件的过程:

导入配置文件

扩展签名和验证

从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程序

在VS Code网页版中进行Python调试

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

扩展开发

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

在这个里程碑中,我们移除了如果您的扩展在其package.json中声明了某些扩展贡献时需要明确列出激活事件的要求。

以前,如果一个扩展声明它在package.json文件中贡献了一个命令mycommand,它还需要在package.json文件的activationEvents字段中列出相应的onCommand:mycommand激活事件,以便命令能够成功执行。这既繁琐又容易出错,并可能导致package.json文件变得庞大。

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

Contribution point Inferred activation event
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 中的所有 webviews 现在都尝试维护自定义来源。在 1.74 版本中,这也扩展到了自定义编辑器使用的 webviews。

这通过允许在更多情况下缓存webview内容来提高性能。有关更多详细信息以及作为扩展作者需要注意的事项,请参阅之前的发布说明

扩展README中的视频标签支持

扩展现在可以在它们的README中使用标签。视频在VS Code市场和VS Code中的扩展视图页面上都得到支持。与.gif相比,视频文件质量更高,通常也更小。你甚至可以包含音频!

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

评论线程附加操作

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

评论中的可见按钮

将 vsce 重命名为 @vscode/vsce

vsce 工具,VS Code 的扩展管理器,已更名为 @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中已经提供功能的node模块(例如,移除uuid,转而使用Crypto.randomUUID())。
  • 仅在Node.js中使用node-fetch,而不是同时在Node.js和网页中使用。
  • 采用最新版本的@vscode/extension-telemetry,其大小显著减少。

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

Electron 沙盒之旅

您可以在最近的"将VS Code迁移到进程沙盒化"博客文章中了解我们在实现Electron的沙盒方面的进展。这篇详细文章展示了技术时间线,并描述了为支持VS Code沙盒化所做的逐步更改。

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

Windows 上默认重新启用窗口控件覆盖

默认情况下,窗口控件覆盖 (WCO) 已重新启用。它之前于八月启用,但随后再次禁用,因为对于使用从右到左系统语言的用户,它在错误的一侧渲染,覆盖了文件编辑菜单项。

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

为了解决这个问题,我们在Electron中添加了一个新的app.getPreferredSystemLanguages() API,这样即使在将语言环境传递给Electron之后,我们仍然可以获取系统语言以用于VS Code的语言包推荐器,同时保持WCO在正确的一侧。

VS Code 带有自定义标题栏以及 Paint 的标题栏。截图是在 Windows 11 上拍摄的,系统语言为阿拉伯语,显示 VS Code 的 WCO 在右侧(VS Code 是英文的),而 Paint 的 WCO 在左侧(Paint 是阿拉伯语的)。

内置扩展现在使用新的 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的贡献: