现已发布!阅读关于 11 月的新功能和修复。

2023 年 1 月(版本 1.75)

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

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


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

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

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

内务处理

在之前的发行说明中,团队报告了我们的内务处理工作,我们希望在这里也做同样的事情。

正如我们在 2022 年 11 月宣布的那样,我们使用 12 月来整理我们的 GitHub 问题和拉取请求(请参阅我们的问题清理指南)。在我们所有的存储库中,我们实现了净减少 3637 个开放问题和拉取请求。毫不奇怪,大部分减少发生在我们的前 5 个存储库中:microsoft/vscode (2520)、microsoft/vscode-jupyter (374)、microsoft/vscode-remote-release (278)、microsoft/vscode-python (220) 和 microsoft/vscode-pull-request-github (160)。

辅助功能

Diff 导航改进

转到下一个/上一个更改现在具有音频提示,以指示是否插入、删除或修改了行。此外,会选择更改的行,以便屏幕阅读器可以读取。

终端辅助功能模式

终端:聚焦可访问缓冲区 (⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)) 命令允许屏幕阅读器通过键盘在终端缓冲区中导航。

终端辅助功能帮助

与编辑器中的 显示辅助功能帮助 命令类似,终端:显示终端辅助功能帮助 () 命令为屏幕阅读器用户提供重要信息。

Terminal accessibility help is presented on top of the terminal

工作区信任编辑器快捷方式

为了提高可以通过工作区:管理工作区信任打开的工作区信任编辑器的键盘辅助功能,现在可以使用 Ctrl/Cmd+Enter 为当前工作区切换信任,或者使用 Ctrl/Cmd+Shift+Enter 为父文件夹切换信任。

Workspace Trust Editor showing the trust buttons with their keyboard shortcuts

改进了“设置”编辑器指示器上的键盘导航

对于具有多个指示符的设置(例如“在其他位置修改”指示符和“默认值已更改”指示符),现在使用左右箭头键在指示符之间导航。此更改允许用户按一次 Tab 键即可退出指示符。

配置文件

我们很高兴地宣布,配置文件功能现在在 VS Code 中正式可用。配置文件可以包括扩展、设置、键盘快捷方式、UI 状态、任务和用户代码片段。您可以为不同的开发场景自定义 VS Code,例如数据科学、文档编写或多种编程语言(如 Python 或 Java)。如果您基于工作流(如“工作”或“演示”)有不同的 VS Code 设置,您也可以将它们保存为不同的配置文件。您可以同时应用不同的配置文件打开多个工作区(文件夹)。

下图演示了一个打开的文件夹,其中应用了为工作设置自定义的工作配置文件。

Folder opened in Work profile

您还可以导出和导入配置文件,以与您的同事、朋友或学生共享,以帮助他们开始使用 VS Code。

以下视频演示了如何使用 GitHub gist 导出配置文件,以便与他人共享。收到配置文件链接的用户可以在 VS Code for the Web 中预览共享的配置文件,并将其导入到其本地 VS Code 实例中。

Export and share profile

注意:配置文件目前在 GitHub Codespaces 等远程场景中不起作用,但我们正在努力启用此功能。您可以在问题 #165247中跟踪进度。

工作台

改进的多视图调整大小支持

您现在可以通过拖动视图的角来同时调整多个视图的大小。

改进的网格布局

如果编辑器最小化,则在调整整个工作台或侧边栏的大小时,网格将保留该状态。在下面的简短视频中,当整体编辑器区域展开时,右侧最小化编辑器的宽度保持不变。

从“自定义布局”命令恢复默认值

当通过触发命令或使用自定义标题栏中的布局控件来使用自定义的自定义布局命令时,可以使用布局控件右上角的还原箭头按钮来恢复默认值

Customize layout control showing the new Restore Defaults button

从面板管理面板对齐方式

您现在可以直接从面板上下文菜单调整面板对齐方式,就像面板位置一样。

Panel context menu showing the panel alignment submenu

简化的“首选项”菜单

我们简化了全局设置的首选项菜单,并将选项组织成更符合逻辑的顺序和分组。

Global settings menu showing expanded Themes flyout

树查找历史记录

树视图内的“查找”控件现在支持历史记录导航。您可以使用向上/向下箭头键浏览先前搜索的历史记录。

树查找连续匹配

树视图“查找”控件现在支持连续匹配以及现有的“模糊”匹配。在下面的视频中,最初搜索 "src" 会匹配到诸如 "resource" 之类的项。当通过模糊匹配切换按钮禁用“模糊”匹配时,只会突出显示带有连续文本 "src" 的文本。

列表按页滚动

新的设置 workbench.list.scrollByPage 允许您配置在直接单击滚动条时列表是否应按页滚动。

列表类型导航模式

新的 workbench.list.typeNavigationMode 设置允许您配置列表的类型导航模式。默认情况下(设置值为 automatic),导航会在您键入时在列表和树中进行。如果您希望仅在特定时间启用导航,则可以将 typeNavigationMode 设置为 trigger,并且列表仅在运行 list.triggerTypeNavigation 命令后才会进入类型导航模式。

默认情况下,命令 list.triggerTypeNavigation 没有键绑定,但您可以添加自己的键绑定。例如,如果您希望在按下 / 键后进入类型导航模式,则可以添加如下键绑定

{
  "key": "/",
  "command": "list.toggleKeyboardNavigation",
  "when": "listFocus"
}

打开大型文件的新确认

为了防止意外打开非常大的文件,尤其是在由于网络传输可能产生实际成本的远程环境中,打开文件之前会显示确认对话框。可以通过新的 workbench.editorLargeFileConfirmation 设置修改限制,并且根据打开本地文件还是远程文件,默认值会有所不同。

Large file confirmation shown for a 2GB package.json file

文件监视器支持 files.watcherExclude glob 模式

files.watcherExclude 设置支持 glob 模式,用于文件监视器的强大排除规则。但是,用于文件监视的库尚未本地支持 glob 模式。在此里程碑中,我们贡献了对排除项的 glob 模式的支持,以提高资源使用效率,尤其是在 Linux 上。

对于 Linux,如果您看到文件监视问题,请参阅此常见问题解答条目以获取更多信息。

键盘快捷方式编辑器改进

显示贡献键绑定的扩展

“键盘快捷方式”编辑器现在会在列中显示贡献键绑定的扩展。您可以选择扩展名以打开扩展的详细信息页面。

Source column shows extensions contributing keybindings

您还可以使用扩展上下文菜单中提供的扩展键盘快捷方式操作来搜索扩展贡献的任何键绑定。

Extension keyboard shortcuts action

显示 when 子句属性的上下文键建议

键盘快捷方式编辑器现在显示 when 属性的上下文键建议。您可以使用 Ctrl+Space 快捷键触发建议。

Context key suggestions for when clause property

搜索带有和弦的键绑定

键盘快捷键编辑器现在支持使用组合键搜索键绑定。例如,"Ctrl+K" 也将显示所有以 Ctrl+K 作为第一个组合键的键绑定。

设置以配置 Shell 环境解析超时

一个新的设置 application.shellEnvironmentResolutionTimeout(仅限 macOS 和 Linux)允许您在需要时增加解析 Shell 环境的超时时间。默认情况下,VS Code 会等待最多 10 秒来解析环境,但在某些具有更复杂 Shell 设置的情况下,这可能不够。

有关 VS Code 如何解析 Shell 环境的更多信息,请参阅此常见问题解答条目

新的 VSCODE_RESOLVING_ENVIRONMENT 环境变量

当 VS Code 正在解析用户 Shell 环境时,它现在会将一个新的环境变量 VSCODE_RESOLVING_ENVIRONMENT 设置为 1。这对于需要知道它们是否在解析 Shell 环境的上下文中运行的用户脚本(例如,在 .bashrc 中)很有用。

更新后更容易选择退出发行说明

您现在可以直接从发行说明编辑器中选择退出在每次更新后阅读发行说明。这将反映并更新 update.showReleaseNotes 设置。

There's a checkbox inside the release notes editor that allows the user to opt out reading release notes after every update

编辑器

建议选择模式

有一个新的设置 (editor.suggest.selectionMode) 允许您配置在您键入时或通过触发字符是否自动选择建议。

默认情况下,始终选择最佳建议,以便按 EnterTab 键插入它。如果您希望不选择建议,请将该值设置为 neverwhenQuickSuggestionwhenTriggerCharacter。当使用这些设置值时,建议仍然会显示,但不会自动选择,您可以使用箭头键来选择一个。

请注意,此设置仅适用于自动建议,不适用于通过 Ctrl+Space 显式触发时显示的建议。

代码操作列表现在可滚动

一些扩展会生成很长的代码操作列表。如果没有足够的空间来渲染所有代码操作,您现在可以滚动浏览列表

颜色装饰器限制

编辑器中显示的颜色装饰器的数量限制为 500。这是为了防止打开包含大量颜色的文件时出现性能问题。此限制现在可以通过 editor.colorDecoratorsLimit 设置进行配置。

CSS decorators shown in the editor

编辑器查找转到匹配项

新的 **转到匹配项...** 命令允许您在打开查找控件时,根据计数跳转到文件中特定的匹配项。当您有大量匹配项并且想要跳转到特定的匹配项时,这非常有用。

Go To Match... command

重新设计的内联建议工具栏

在本里程碑中,我们重新设计了内联建议工具栏,使其更紧凑且更易于使用。它具有快速循环浏览其他建议的按钮,以及完整或逐字接受建议的按钮。

在下面的视频中,用户查看了由GitHub Copilot提供的两个建议,在注释提示上触发,然后逐步接受第一个 console 和下一个单词 console.log

The toolbar features buttons to quickly cycle through alternative suggestions and to accept a suggestion fully or word by word.

设置 "editor.inlineSuggest.showToolbar": "always" 可以用于在内联建议可用时始终显示工具栏。

我们还添加了逐字接受/撤销建议的默认快捷键 (Ctrl+向左箭头/向右箭头)。

终端

新的默认快捷键

添加了以下默认快捷键,以提高高级终端功能的发现性

**打开检测到的链接** 命令 (⇧⌘G (Windows, Linux Ctrl+Shift+G)) 是一种可通过键盘访问的方式来打开终端链接。该命令会打开一个快速选择,其中包含终端视口中的所有可用链接。

Ctrl+Shift+O will open a Quick Pick with a categorized list of links found

之所以选择 ⇧⌘G (Windows, Linux Ctrl+Shift+G) 快捷键,是因为它与**转到编辑器中的符号**类似,但用于终端。

转到最近目录 - Ctrl/Cmd+G

转到最近目录 (⌘G (Windows, Linux Ctrl+G)) 会打开一个快速选择,其中包含由Shell 集成拾取的最近目录。它支持固定和模糊匹配。

Directories are presented in a Quick Pick, split up by the current and previous sessions.

之所以选择此快捷键,是因为 Ctrl+G 是一个相对不常用的 Shell 快捷键。

将 Ctrl+G 发送到 Shell - Ctrl+Alt+G

由于 Ctrl+G 现在用于 **转到最近目录**,因此使用 Ctrl+Alt+G 是将 Ctrl+G 直接发送到 Shell 的新方式。

运行最近命令 - Ctrl+Alt+R

运行最近命令 (⌃⌥R (Windows, Linux Ctrl+Alt+R)) 会打开一个快速选择,其中包含最近运行过的命令,其模型与大多数 Shell 的反向索引搜索 (Ctrl+R) 类似,但采用了一种更易于访问且功能更强大的方式。它支持固定和模糊匹配。

Commands previously run are split up by current and previous sessions and also pulled in from the shell's history file

之所以选择快捷键 ⌃⌥R (Windows, Linux Ctrl+Alt+R),是因为它是 Ctrl+R 的替代行为,但该快捷键对于覆盖其默认行为来说太重要了。

辅助功能模式覆盖

由于反向索引搜索对于屏幕阅读器来说不太容易访问,因此当辅助功能模式开启时,Ctrl+R 将触发运行最近命令,而 Ctrl+Alt+R 将把 Ctrl+R 发送到 Shell。

此版本中,终端中的链接检测进行了许多改进

  • 在某些情况下会检测到包含空格的链接

    • 当整行都是链接时。
    • Python 样式的堆栈跟踪链接:File "<path>", line <line>
    • 一些编译器错误:<path>(<line>,<col>) : ...
    • 独立样式的文本部分都将被独立检测,因此如果路径有下划线,即使它有空格也应被检测到。
  • 现在可以使用包含 [] 字符的链接,它们甚至支持在困难的边缘情况下进行检测,例如这样

    Links that end in the ] character will be detected, even when the whole link is wrapped in [ and ]

  • 现在可以检测到 vscode:// 协议链接。

  • 现在可以在 Windows 上检测到 /mnt/\\wsl$\\\wsl.localhost\ 链接。

  • v1.72 中添加了 OSC 超链接支持,现在支持这些链接中常用的 file:// 协议(例如 ls --hyperlink)。

  • terminal.integrated.enableFileLinks 设置现在具有 "notRemote" 选项,允许仅在远程文件存在检查可能导致性能问题的远程中禁用它。

大多数链接格式也始终支持以下行和列格式

  • <file>:<line>
  • <file>:<line>:<column>
  • <file> <line>
  • <file> <line>:<column>
  • <file>(<line>)
  • <file>(<line>,<column>)
  • <file>(<line>, <column>)
  • <file> (<line>)
  • <file> (<line>,<column>)
  • <file> (<line>, <column>)
  • 单引号或无引号也适用于这些
    • "<file>",<line>
    • "<file>",<line>:<column>
    • "<file>", line <line>
    • "<file>", line <line>, col <column>
    • "<file>", line <line>, column <column>
    • "<file>":line <line>
    • "<file>":line <line>, col <column>
    • "<file>":line <line>, column <column>
    • "<file>": line <line>
    • "<file>": line <line>, col <column>
    • "<file>": line <line>, column <column>
    • "<file>" on line <line>
    • "<file>" on line <line>, col <column>
    • "<file>" on line <line>, column <column>

终端编辑器文件拖放支持

终端编辑器现在支持在按住 Shift 键的同时进行拖放操作,以便将文件写入终端而不是打开编辑器。

Dragging a file into a terminal editor will show 'Hold Shift to drop into editor'

“不安全”的配置文件检测

最近由于 安全漏洞,Windows 上的 Cygwin shell 的检测被删除。此版本中,我们以更安全的形式将其恢复,并检测更多 Shell 配置文件,包括 Cygwin、Cmder 和 MSYS2。为了缓解安全问题,在使用这些配置文件之一之前,必须通过 **选择默认配置文件** 命令进行配置

Select Default Profile is available via the terminal view dropdown or the Command Palette

The newly detected profiles appear in a "detected" section at the bottom of the Quick Pick

选择后,会显示一条警告,然后再将其添加到您的 settings.json 文件中并像普通配置文件一样工作

The notification explains the path is potentially unsafe as it could be modified by another user

如果计算机不是由多个用户使用,例如在公司环境中,则可以安全地忽略此警告。

终端视图中的切换命令

长期以来一直有人要求将 **清除终端** 命令添加到终端视图操作中,但我们一直担心 UI 会过于臃肿。感谢一项新的内部功能,我们有了新的默认隐藏操作,这些操作会显示在溢出菜单中,但可以通过右键单击进行切换以显示

Clear terminal, Run Active File, and Run Selected Text commands are now available in the terminal view's overflow menu

Right-click one of the view actions to toggle which ones are visible and which go into the overflow menu

Ctrl+C 在 Windows 上删除选定内容

Windows 在复制选定内容和向 Shell 发送 SIGINT 之间共享 Ctrl+C,具体取决于是否存在选定内容。一个常见的烦恼是,如果您意外地进行了选择,Ctrl+C 可能不会发送 SIGINT。为了帮助缓解这种情况,Ctrl+C 复制选定内容现在也会清除选定内容,因此按两次 Ctrl+C 将可靠地发送 SIGINT 1 次或 2 次。

添加终端制表符宽度设置

有一个新的设置 terminal.integrated.tabStopWidth,用于配置终端的制表符宽度。当程序输出 \t 字符而不是在其配置中配置制表符大小时,这很有用。

Powerline 三角形和对角线自定义字形

GPU 加速的终端现在为三角形和对角线 Powerline 额外符号字形 (U+E0B8-U+E0BF) 获取像素完美的自定义字形。这些字符的宽度是单宽度还是双宽度是模棱两可的,并且因使用的字体而异,因此我们选择将其渲染为单宽度。

之前

Triangles and diagonal line previously could display with bad anti-aliasing and odd borders

之后

Triangles and diagonal line glyphs are drawn pixel perfect

在“在活动终端中运行选定的文本”中使用的括号粘贴模式

**在活动终端中运行选定的文本** 命令现在将在支持的 Shell 中使用“括号粘贴模式”运行文本,因此多行选择将被视为单个输入,而不是多个命令。这使得运行实际脚本更加直观,并且发生错误的次数更少。

之前

Previously, running two echo statements would be run one after the one with 2 separate prompts

之后

Running two echo statements will now run in a single prompt

Pwsh 预览反馈提供程序的快速修复

PowerShell 预览版最近实现了一个新的可插入反馈提供程序系统,该系统允许在命令失败时打印建议

Running 'gcc' in pwsh preview will present 3 suggestions, which VS Code will present as Quick Fixes

终端现在从 [General][cmd-not-found] 反馈提供程序中提取快速修复。可以通过单击灯泡或通过 Ctrl/Cmd+. 打开快速修复对话框。

源代码管理

新命令

Git 2.35git stash 命令引入了一个新的 --staged 模式。这种新模式允许您轻松地仅储藏已暂存的更改。如果您的 Git 版本支持此新模式,则可以使用新的 Git: 储藏暂存的 命令来利用它。

VS Code 已经支持使用 Git: 删除标签 命令删除本地标签。在这个里程碑中,我们启用了使用新的 Git: 删除远程标签 命令删除远程标签的功能。

父文件夹中的 Git 存储库

VS Code 使用 git rev-parse --show-toplevel 来确定 Git 存储库的根目录。在大多数情况下,Git 存储库的根目录位于工作区内,但在某些情况下,Git 存储库的根目录位于工作区或打开的文件(们)的父文件夹中。虽然在工作区或打开的文件(们)的父文件夹中打开 Git 存储库对高级用户来说是一个很棒的功能,但它可能会让新用户感到困惑。我们已经看到,这种困惑导致从这些 Git 存储库中丢弃更改,从而导致数据丢失。

为了避免混淆并降低数据丢失的风险,从这个里程碑开始,VS Code 将在源代码管理视图中显示通知和新的欢迎视图,并且不会自动打开来自工作区和打开的文件(们)的父文件夹中的 Git 存储库。

Notification that there is a Git repository in parent folders

主题:Dark+ V2MacOS Modern 产品图标

打开存储库 按钮将打开一个快速选择列表,其中包含在工作区或打开的文件(们)的父文件夹中发现的所有 Git 存储库。是否从父文件夹打开 Git 存储库的选择会被记住。

用户可以使用 git.openRepositoryInParentFolders 设置来控制如何处理来自父文件夹的 Git 存储库。想要恢复旧行为的用户可以将 git.openRepositoryInParentFolders 设置为 always

命令禁用

基于 Git 存储库的大小或各种 Git 钩子的存在,某些 Git 操作可能需要很长时间才能完成。我们过去曾看到,在前一个命令仍在进行时启动命令可能会导致意外的结果(例如,在提交操作正在进行时丢弃文件上的更改)。

为了防止这种情况,我们在以下操作正在进行时禁用大多数 Git 命令:CheckoutCommitPushPull。这意味着,在这些操作运行时,大多数 Git 命令不会出现在命令面板中,并且会在源代码管理视图和状态栏中被禁用。

用户界面改进

在这个里程碑中,我们改进了一些源代码管理用户界面元素

  • 源代码管理视图中 提交发布分支 操作按钮的工具提示现在包括分支名称。
  • 检出 状态栏项目现在根据检出的引用类型(分支、标签或提交)使用不同的图标。
  • 检出 状态栏项目现在在检出操作正在进行时显示旋转的进度图标。

笔记本

内核选择器改进

我们继续改进 MRU(最近使用)内核选择器。可以通过将 notebook.kernelPicker.type 设置为 mru 来启用它。未使用的内核会被移到辅助选择器 选择另一个内核... 中。当您安装了最新的 JupyterPython 扩展时,此选择器将按其来源(例如:Jupyter 内核、Python 环境等)对所有内核进行分组。

Notebook Kernel Picker

连接所选单元格

有一个新的命令 连接所选单元格 (kb(notebook.cell.joinSelected)`),用于将多个选定的单元格合并为一个单元格。

Join Selected Cells command

将输出回退渲染为支持的 MIME 类型

Jupyter Notebook 中的富输出(例如 IPyWidgets)仅在内核的生命周期内可见。这意味着当笔记本关闭并重新打开时,输出不再可见。但是,在许多情况下,可以使用回退机制渲染输出。例如,IPyWidget 在某些情况下(取决于所使用的 widget)可以渲染为静态图像或 HTML 内容。

因此,打开带有 matplotlib widget(或类似 widget)的现有笔记本的用户现在可以查看输出,而无需重新执行代码。

Notebook Renderer fallback

新文档

有两个新主题可帮助您在 VS Code 中使用 Jupyter Notebook。

调试

JavaScript 调试

改进的 Node.js 启动性能

用于 Node.js 调试的“断点预测器”已重写和改进,以显著提高大型项目的速度。例如,在 TypeScript 存储库中调试单元测试时,启动时间开销减少了 62%,而在 VS Code 存储库中调试和启动构建的开销减少了 80%。

如果您遇到诸如断点未被命中的问题,请提交问题。您可以通过在 launch.json 中设置 "enableTurboSourcemaps": false 来禁用新行为,但是随着我们获得信心,此选项最终将被删除。

语言

JavaScript React 语言标签现在是 JavaScript JSX

JavaScript React 语言模式已重命名为 JavaScript JSX,以反映 JSX 语法不仅用于 React。TypeScript React 也已重命名为 TypeScript JSX

请注意,仅更改了 UI 中显示的语言名称。出于兼容性原因,内部语言 ID (javascriptreacttypescriptreact) 保持不变。

新的 shellscript 语法

VS Code 现在使用来自 better-shell-syntax 的新语法来高亮显示 shellscript 语法。

扩展

VS Marketplace 扩展签名

从 2022 年 11 月开始,上传到 Visual Studio Marketplace 的每个扩展都由 VS Marketplace 进行代码签名。当用户通过 VS Code 的扩展视图安装已签名的扩展时,VS Code 将验证签名,从而证明该扩展确实来自 VS Marketplace 并且扩展包没有被修改。如果签名验证失败,VS Code 将不会安装该扩展。

VS Marketplace 正在对所有现有扩展进行签名(包括自 11 月以来未更新的扩展)。一旦此过程完成,在几个月后,VS Code 将要求来自 VS Marketplace 的所有扩展都由 VS Marketplace 签名。此要求将保证来自 VS Marketplace 的每个包的完整性,从而提高我们扩展生态系统的整体安全性。

注意:扩展作者无需执行任何操作即可选择加入 Marketplace 签名。除了 Marketplace 签名之外,我们目前正在进行发布者签名。有关发布者签名的更多信息,请参见 讨论 #137

从 CLI 固定扩展版本

当您从 CLI 安装特定版本的扩展时(code --install-extension {publisher}.{name}@{version}),它现在将被固定到该版本。这意味着,当您启用自动更新时,该扩展不会自动更新。

同步固定的扩展版本

设置同步现在将同步固定的扩展版本。这意味着,当您在一台机器上安装特定版本的扩展时,它将在您同步到的所有其他机器上固定到该版本。

扩展的贡献

Python

当 VS Code 从已激活的终端启动时自动选择环境

如果用户通过已激活 conda 或虚拟环境的终端启动 VS Code,则 Python 扩展现在会检测到这一点,然后根据环境自动选择环境本身,或者询问用户是否希望将该环境设置为他们选择的环境。

在创建环境时选择 requirements 文件

当使用 Python:创建环境 命令创建虚拟环境时,Python 扩展现在会查找工作区文件夹中的 requirement 文件,并允许用户多选任意数量的 requirement 进行安装。

从 pyproject.toml 中选择可选依赖项

Python 扩展会检测并加载 pyproject.toml 文件的 [project.optional-dependencies] 部分中提供的可选依赖项。如果我们检测到工作区包含 pyproject.toml 以及任何选定的可选依赖项,我们将使用 pip 可编辑安装命令。

使用 Pylance 自动缩进

当为 Python 文件启用 editor.formatOnType 设置时,Pylance 将在键入代码时自动缩进代码,使您可以更多地关注代码的逻辑,而更少地关注格式。

要试用它,请通过将以下内容添加到您的用户 settings.json 文件中来为 Python 文件启用 formatOnType

 "[python]": {
        "editor.formatOnType": true,
    },

实时预览

外部浏览器预览的设置

实时预览 扩展现在允许您在默认浏览器之外的浏览器中打开外部浏览器预览。使用 livePreview.customExternalBrowser 设置,您可以将外部预览设置为在以下浏览器中打开

  • Microsoft Edge
  • Google Chrome
  • Mozilla Firefox
  • 您的默认浏览器

Live Preview Custom External Browser setting

服务器根目录的设置

现在,您可以将服务器的根路径设置为工作区中的子文件夹。例如,您可以将 livePreview.serverRoot 设置为 "src",从而让 Live Preview 从工作区中的 src 文件夹提供文件。

ESLint

ESLint 扩展已更新至 2.4.0 版本。主要新功能包括:

  • 支持新的实验性 平面配置文件。您需要在 VS Code 中使用设置 eslint.experimental.useFlatConfig 单独启用此支持。需要 ESLint 版本 8.21 或更高版本。

  • ESLint 状态指示器已移至 VS Code 的语言状态区域。因此,设置 eslint.alwaysShowStatus 已被移除。请改用 VS Code 的固定功能。

    ESLint language status

    语言状态项现在会在保存期间计算代码修复时,通知您验证时间过长和 ESLint 运行时间过长。可用时间预算(以毫秒为单位)可以通过两个设置 eslint.timeBudget.onValidationeslint.timeBudget.onFixes 控制。

  • 可以使用新的设置 eslint.problems.shortenToSingleLine 将长的问题波浪线缩短为单行。

GitHub Pull Requests 和 Issues

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

  • 支持建议和接受更改。
  • 评论中的 GitHub 句柄现在已链接。
  • 可以在创建时将标签添加到 PR。
  • 实验性设置 githubPullRequests.experimental.quickDiff 将在编辑器装订线中显示已检出 PR 中已更改行的快速差异视图。

请查看扩展的 0.58.0 版本更改日志,了解其他亮点。

GitHub Copilot

GitHub Copilot 扩展是一个 AI 驱动的代码补全工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用 Copilot 扩展来生成代码,或从其生成的代码中学习。

GitHub Copilot 通过 内联建议 UI 集成到 VS Code 编辑器中,该 UI 允许您查看各种建议并轻松接受全部或部分生成的代码。

GitHub Copilot 现在已普遍可用于企业,具有许可管理、组织范围的策略控制和隐私保护等功能。您可以在 GitHub Copilot for Business 公告中了解更多信息。

要开始使用,您可以在 GitHub Copilot 网站上注册免费试用。

我们还在 VS Code 文档中添加了一个新的 VS Code 中的 GitHub Copilot 主题,它将帮助您开始使用 Copilot。

远程开发

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

  • 支持多个 devcontainers.json 文件的开发容器。
  • Docker 凭据转发。
  • X11 和 Wayland 转发

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

远程隧道

睡眠抑制

远程隧道现在可以防止计算机在 Windows、macOS 和基于 systemd 的 Linux 系统上进入睡眠状态。如果您离开桌面进行远程工作并希望确保隧道保持可访问状态,这将非常有用。要使用此功能:

  • 从 VS Code UI 打开远程隧道访问时,请将设置 remote.tunnels.access.preventSleep 更新为 true
  • 在 CLI 上使用 code tunnel 时,请传入 --no-sleep 标志。

可靠性改进

修复了远程隧道中几个与连接相关的问题,这应该会提高可靠性。

继续在...上工作

“继续在...上工作”功能支持在本地窗口中的 Git 存储库中启动,并像 GitHub Codespace 一样在远程窗口中继续。如果您在尚未发布到远程的分支上,当您选择在不同的开发环境中继续工作时,系统现在会自动提示您发布当前分支,以便您可以在其他地方访问完整的分支上下文。

此外,当您在远程窗口中的 Git 存储库上时,您现在可以使用“在新本地克隆中继续工作”命令在 VS Code 桌面上的新本地 Git 克隆中继续工作。

最后,在本地、远程或 Web 窗口中继续工作的所有选项现在都方便地显示在远程指示器中。这些选项在命令面板中也可用。

Continue Working On actions now available in the remote indicator

预览功能

Dark+ V2 和 Light+ V2 实验性主题

现在可以使用两个新的颜色主题:Dark+ V2 和 Light+ V2。这些主题是现有 Dark+ 和 Light+ 主题的演变,旨在更易于访问,并使 VS Code 看起来比以往更好!这些主题仍标记为实验性,我们正在寻求早期反馈。

Dark+ V2 and Light+ V2 experimental themes

您可以在颜色主题选择器中找到新的主题,它们被列为 Light+ V2 (Experimental)Dark+ V2 (Experimental)首选项:颜色主题 ⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T))。

TypeScript 5.0 支持

此更新包括对即将发布的 TypeScript 5.0 版本的支持。请参阅 TypeScript 5.0 迭代计划,了解有关 TypeScript 团队当前正在进行的工作的更多详细信息。一些编辑器工具亮点:

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

要开始使用 TypeScript 5.0 每夜构建版本,请安装 TypeScript Nightly 扩展。

命令面板中的“常用”部分

在这个里程碑中,我们在命令面板中添加了一个新的“常用”部分。此部分的目的是帮助新用户更好地理解命令面板的用途及其功能。

commonly used section in the Command Palette

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

此部分将显示在“最近使用”部分下方,以便不会破坏肌肉记忆,并且随着您运行越来越多的命令并熟悉 VS Code,该部分要么消失(因为“常用”命令会移动到“最近使用”),要么该部分位于下方且不可见。

commonly used section with recently used commands

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

目前,我们将此新体验置于设置 workbench.commandPalette.experimental.suggestCommands 之后,但我们计划在不久的将来将其设为默认行为。请告诉我们您的想法!

扩展创作

注释线程状态

CommentThread state API 已最终确定。此 API 控制注释呈现为已解决还是未解决,并且会影响“注释”视图中的筛选。您可以在 问题 #127473 中了解有关如何使用此 API 的更多信息。

忽略要同步的设置

您现在可以使用 ignoreSync 属性在注册设置时默认隐藏设置同步中的设置。这对于不打算跨计算机同步的设置非常有用。

遥测

新的 TelemetryLogger API 已最终确定。此 API 旨在使扩展作者更容易使用遥测,并使最终用户更安全。该 API 支持诸如内置机密清理、遥测输出通道、错误处理程序和自动遥测级别管理等功能。这应该会带来更具凝聚力的遥测体验,并保证符合我们的要求。

建议的 API

每个里程碑都附带新的提议 API,扩展作者可以试用它们。与往常一样,我们希望得到您的反馈。以下是试用提议 API 的步骤:

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

您不能发布使用提议 API 的扩展。下一个版本中可能会有重大更改,我们永远不想破坏现有的扩展。

让笔记本渲染器回退到不同的 MIME 类型

有时在渲染内容时,笔记本渲染器可能会意识到它无法正确渲染该项目。例如,渲染器可能需要内核处于某种状态。

以前对于这种情况,渲染器的唯一选择是渲染错误消息。我们添加了一个新的提议 API,该 API 允许渲染器抛出一个特殊命名的错误,从而使 VS Code 静默地回退到渲染笔记本输出项上存储的其他数据。例如,交互式图表渲染器可以抛出此错误,以使 VS Code 回退并渲染当前输出项上也存储的图像数据。

要触发此回退,请在 renderOutputItem 中抛出一个名为 vscode.fallbackToNextRenderer 的错误。

throw new class extends Error {
    override name = 'vscode.fallbackToNextRenderer';
}();

此特殊错误仅适用于在某些情况下预计渲染会失败的情况。如果您的渲染器遇到意外错误,它应该继续显示错误消息。

快速差异

快速差异对比(quick diff)是指编辑器中显示在新增、更改和删除行上的边槽装饰。目前,只有 SCM 提供程序可以使用快速差异对比。拟议的快速差异对比 API 允许在 SCM 提供程序之外使用快速差异对比。以下示例来自 GitHub Pull Request 扩展,该扩展使用快速差异对比 API 来显示 PR 中更改的行的快速差异对比。

vscode.window.registerQuickDiffProvider(
  { scheme: 'file' },
  {
    provideOriginalResource: (uri: vscode.Uri) => {
      const changeNode = this.reviewModel.localFileChanges.find(
        changeNode => changeNode.changeModel.filePath.toString() === uri.toString()
      );
      if (changeNode) {
        return changeNode.changeModel.parentFilePath;
      }
    }
  },
  'GitHub Pull Request',
  this.repository.rootUri
);

完整的提案在 quickDiffProvider.d.ts 中。

持续测试运行

持续测试运行允许测试扩展表明它们能够在发生更改时监视并重新运行测试。支持此 API 需要在您的测试运行配置文件中指示支持...

const profile = controller.createRunProfile('Run', TestRunProfileKind.Run, runHandler);
+profile.supportsContinuousRun = true;

然后在 runHandler 中检查该支持

const runHandler = (request: TestRunRequest, token: CancellationToken) => {
+   if (request.continuous) {
+       return watchForFileChangesThenRunTests(request, token);
+   }
}

完整的提案在 testContinuousRun.d.ts 中。

工程

扩展主机实用程序进程

用于进程沙箱所需的扩展主机实用程序进程使用现在默认启用。仍然有一个设置(extensions.experimental.useUtilityProcess),我们很快会将其删除。

通过命令行进行性能测试

我们引入了以下 node 模块,以从命令行运行一组性能测试。

vscode-bisect - 此模块可帮助我们快速衡量性能回归。运行 npx vscode-bisect --help 以了解如何操作此工具。

vscode-perf - 此模块可帮助我们衡量 VS Code 的性能。npx vscode-perf --help 描述了如何操作此工具。

GB18030 认证

VS Code 现在已通过 GB18030 认证 - 这意味着中国政府内的认证委员会已确认 VS Code 可以正确表示所有中文字符。测试涵盖了所有内置的使用场景。通过 VS Code 的认证,核心 Visual Studio 系列(包括 Visual Studio 和 Visual Studio for Mac)已通过 GB18030 的认证。

迁移到 ESM

我们已经开始将我们的代码库迁移到 ESM。VS Code 项目早于原生模块 (ESM),我们一直以来都使用异步模块系统 (AMD)。AMD 一直以来都很好地为我们服务,但现在是时候继续前进了。我们已经开始将我们的代码库迁移到 ESM,我们正在取得良好进展,并希望在未来几个月内完成这项工作。

macOS 10.11 和 10.12 的 EOL 警告

VS Code 桌面版将在接下来的几个里程碑中更新到 Electron 22。随着 Electron 22 的更新,VS Code 桌面版将不再在 OS X El CapitanmacOS Sierra 上运行。在这个里程碑中,我们为这些受影响平台上的用户添加了弃用通知,以帮助他们为迁移做好准备。如果您是上述操作系统版本的用户,请查看我们的 FAQ 以获取更多信息。

改进系统和应用程序语言变量的使用

在上一个版本中,我们开始将应用程序语言传递给 Electron,以便它可以正确布局某些组件,例如窗口控件叠加层 (WCO)。同时,语言推荐器依赖于系统语言,但是 app.getLocale() 开始获取应用程序语言而不是系统语言,因此我们使用较新的 app.getPreferredSystemLanguages() Electron API 来检索系统语言以用于语言推荐器。结果,出现了一个回归,导致扩展视图中的扩展无法渲染,因为新的 API 返回了一些 toLocaleString() 无法解析的值。

我们为恢复版本推送的直接解决方案是恢复到 app.getLocale() 并暂时中断语言推荐,但事实证明,代码库的许多区域也应该使用应用程序语言变量而不是系统语言变量。

此版本将许多系统语言的用法替换为应用程序语言。反过来,日期现在应该以更符合应用程序语言而不是系统语言的格式进行本地化。

值得注意的修复

  • 99878 在 macOS 上,使用 environmentVariableCollection 前置 PATH 环境变量不起作用
  • 153786 提供一个命令以打开差异编辑器的任一侧
  • 165123 允许使用两个未命名侧打开差异编辑器
  • 167004 输出:显示输出通道 一个用于显示输出通道的命令
  • 167528 扩展输出通道的日志级别在重新加载窗口后仍然存在

感谢

最后但同样重要的是,非常感谢 VS Code 的贡献者。

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-hexeditor 的贡献

vscode-json-languageservice 的贡献

vscode-languageserver-node 的贡献

vscode-pull-request-github 的贡献

debug-adapter-protocol 的贡献

monaco-editor 的贡献