🚀 在 VS Code 中

2023 年 9 月(版本 1.83)

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

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


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

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

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

辅助功能

GitHub 拉取请求和问题评论改进

GitHub Pull Requests and Issues 扩展允许您处理、创建和管理拉取请求和问题,此迭代在评论和审阅体验方面进行了许多辅助功能改进。

当屏幕阅读器用户打开编辑器时,如果编辑器包含评论范围,则会收到通知。新的辅助功能帮助对话框 (editor.action.accessibilityHelp) 提供了在评论线程和范围之间导航的命令的见解。

此外,“评论”控件现在可访问。帮助对话框 (editor.action.accessibilityHelp) 也在此上下文中可用,以告知用户期望什么以及如何使用该功能。还有新的命令 评论:转到下一个评论范围 (⌘K ⌥⌘↓(Windows,Linux Ctrl+K Ctrl+Alt+Down) 和 评论:转到上一个评论范围 (⌘K ⌥⌘↑(Windows,Linux Ctrl+K Ctrl+Alt+Up) 用于在评论范围之间导航。

工作台

命令面板中的类似命令结果

找到您要查找的命令可能具有挑战性。仅在 VS Code 中就有超过 2000 个命令... 加上您最喜欢的扩展,这个数字可能会更高。我们想引入一种方法来帮助您找到您要查找的内容,同时仍然保持命令面板今天提供的速度。为此,我们在命令面板结果中包含了一个名为“类似命令”的新部分。以下是一些示例

查询不再需要“模糊”匹配才能显示在结果中。例如“切换自动保存”

'turn on auto save' and 'Toggle Auto Save' showed up in a similar results section

如果存在模糊结果,这些结果仍然显示在顶部,然后是类似命令

user searched for 'change language' and 'Configure Display Language' showed up in a similar results section

扩展贡献的命令也会被拾取

user searched for 'show git blame' and 'toggle file blame' showed up in a similar results section

我们认为这将真正帮助那些难以记住确切命令名称的人... 说实话,这几乎是我们所有人有时都会遇到的情况。

这只是此新功能的第一个版本,仍然需要匹配命令名称中的确切单词。在未来,您可以期待诸如以下的改进

  • 基于命令的非可见描述匹配的命令。
  • 更好地基本处理同义词(“切换”和“打开/关闭”,“显示”和“显示”等)

请告诉我们您的想法!

配置文件图标

您现在可以将图标与配置文件关联起来。此图标将显示在活动栏中,代替 管理 齿轮图标。如果您有多个配置文件并想快速识别当前活动的配置文件,这将非常有用。

下图显示了创建新配置文件时的图标选择对话框。

Icon selection dialog

然后,活动配置文件图标将显示在活动栏中。

Active profile icon in the Activity bar

编辑器选项卡高度密度

window.density.editorTabHeight 设置允许用户将选项卡高度减小到更紧凑的尺寸。

默认编辑器选项卡高度

Editor tabs with default height

紧凑型编辑器选项卡高度

Editor tabs with compact height

单独行上的固定编辑器选项卡

已添加新设置 workbench.editor.pinnedTabsOnSeparateRow。激活后,固定选项卡 将显示在其他选项卡上方的单独行中。当在选项卡行之间拖动时,编辑器选项卡会自动固定或取消固定。

Moving editor tabs between the two tab rows

设置编辑器搜索调整

设置编辑器现在为给定的搜索查询显示较少的结果,以减少噪音。如果您安装了 GitHub Copilot Chat 扩展,除了通过关键字匹配找到的设置外,仅选择前五个 Copilot Chat 设置匹配项,而不是前十五个。

搜索结果现在也按设置编辑器目录排序,以在顶部显示常用设置,并以原始顺序显示已过滤的扩展设置。要恢复按匹配类型和分数对搜索结果进行排序,请将 workbench.settings.settingsSearchTocBehavior 设置为 "hide",清除搜索查询,然后开始另一次搜索。

Searching "default formatter" in the Settings editor results in the editor.defaultFormatter setting appearing at the top.

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

改进的编辑器操作溢出行为

当编辑器操作的数量超过可用空间时,操作会溢出到 ... 更多操作 菜单中。此逻辑已得到改进,并且一些重要操作(例如 关闭拆分编辑器)现在被排除在外。这意味着即使可用空间有限,它们也将始终可见。

颜色主题选择器现在显示主题标识符

颜色主题选择器现在显示颜色主题的本地化名称及其旁边的字符串标识符。这样做是为了帮助使用非英语语言包但只知道主题英文名称的用户。

Color Theme Picker in Korean displaying English theme identifiers next to the localized name

评论

注释编辑器用于扩展,例如 GitHub Pull Request and Issues 扩展,它在其中显示拉取请求注释。

注释编辑器大小

注释编辑器现在随着添加的行数而展开,最大高度取决于注释所在的编辑器的大小。

Comment editor expanding as lines are added

在未解决的注释上打开“注释”视图

设置 comments.openView 有一个新的可能值 firstFileUnresolved。设置 firstFileUnresolved 会导致“注释”视图在每个会话中首次打开包含未解决注释的文件时打开。

自动折叠已解决的注释

默认情况下,当您解决注释线程时,它现在会折叠。可以使用设置 "comments.collapseOnResolve" 禁用此功能。

编辑器

保存和自动保存时的代码操作

您现在可以在编辑器的自动保存中启用代码操作。当您使用窗口更改 (onWindowChange) 或焦点更改 (onFocusChange) 保存或自动保存时,这将触发代码操作。要启用此功能或更新当前设置,请检查 编辑器:保存时代码操作 (editor.codeActionsOnSave) 并将每个代码操作的设置更改为 always

设置值也已更新,当前的布尔值将被弃用,取而代之的是字符串等效值。

选项为

  • explicit:在显式保存时触发代码操作。与 true 相同。
  • always:在显式保存时以及来自窗口或焦点更改的自动保存时触发代码操作。
  • never:永远不会在保存时触发代码操作。与 false 相同。

此版本仍然支持布尔值。

笔记本

在笔记本中转到符号

启用 notebook.gotoSymbols.showAllSymbols 后,转到符号 快速选择将填充笔记本中的所有代码符号。

单元格执行时的滚动

您现在可以使用 notebook.scrolling.revealNextCellOnExecute 设置配置在使用 Shift+Enter 运行 notebook.cell.executeAndSelectBelow 时显示下一个单元格的多少内容

  • fullCell - 完整的下一个单元格(默认)。
  • firstLine - 仅第一行。
  • none - 完全不滚动。

下面显示了 "notebook.scrolling.revealNextCellOnExecute": "firstLine"

空格修剪支持

笔记本现在遵循现有的三个与空格相关的设置

  • files.trimTrailingWhitespace - 保存文件时修剪尾随空格。
  • files.trimFinalNewlines - 修剪文件中最后一个换行符后的所有换行符。
  • files.insertFinalNewline - 在文件末尾自动插入最后一个换行符。

这些设置在保存时应用,包括自动保存。

最终的笔记本代码操作 API

笔记本现在完全支持贡献的代码操作,并具有专用的代码操作类型来支持它们。如果扩展作者定义了一个 kindnotebook.source. 为前缀的操作,则在保存时,笔记本编辑器会对整个笔记本运行提供的操作,而不是对每个单元格单独运行。要编辑将在保存时运行的代码操作,您可以在设置编辑器中设置 笔记本:保存时代码操作,或在 settings.json 文件中编辑 "notebook.codeActionsOnSave"

代码操作的当前启用已更新,之前的布尔值已被弃用,取而代之的是枚举等效值。选项为

  • "explicit":在显式保存时触发代码操作。与 true 相同。
  • "never":永远不会在保存时触发代码操作。与 false 相同。

第三个选项 "always" 即将推出,以完全匹配编辑器代码操作,使用户可以在自动保存设置 onFocusChangeonWindowChange 时触发笔记本代码操作。

语言

Perl 6/Raku

Perl 6 语言已重命名为 Raku(语言标识符 raku),Raku 将自动选为 .raku 文件的语言。

调试

JavaScript 调试器

WebAssembly 调试

如果 JavaScript 调试器编译为 WebAssembly 的代码包含 DWARF 调试信息,则现在可以对其进行调试。例如,可以使用 Emscripten 编译的 C++ 代码可以进行调试

Debugger stopped on a breakpoint in C++ source code

主题:代码之歌(在 vscode.dev 上预览)

要启用此功能,您需要安装 WebAssembly DWARF 调试 扩展,该扩展插入到内置 JavaScript 调试器中。请在 调试 WebAssembly 中阅读有关此功能的更多信息。

WebAssembly 调试构建于 Chromium 作者的 C/C++ 调试扩展 之上,并在他们的支持下成为可能。

改进的调用堆栈视图

调用堆栈 视图中的方法和函数现在将包含函数 (this) 上下文的名称。例如,类 Foo 上方法 bar 的调用堆栈现在显示为 Foo.bar

远程开发

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

此版本增加了使用 隧道 连接到开发容器的功能,类似于通过 SSH 连接。您可以在 远程开发发行说明 中了解有关此新功能的更多信息。

扩展贡献

GitHub Copilot

对 /tests 的改进

我们改进了 GitHub Copilot Chat 扩展提供的聊天视图和内联聊天的 /tests/test 斜杠命令现在可以更好地检测您正在使用的测试框架,并将以相同的样式生成新测试。此外,它在建议新测试文件的名称方面应该会更好,例如 foo.pytest_foo.pybar.jsbar.test.js

内联聊天变为多轮

内联聊天现在保留当前会话的所有提示,这允许您引用以前的消息并回复问题。

在下面的短视频中,内联聊天记住了用户说过他们位于东京,当提供代码片段来计算本地时间和与苏黎世的时差时。

“询问 GitHub Copilot”默认为“聊天”视图

几个月前,我们在命令面板中引入了 询问 GitHub Copilot 选项,以便您可以将命令面板中的查询打开到 Copilot 聊天中,如果命令面板没有提供有用的答案。

我们收集了关于 询问 GitHub Copilot 应该打开的首选体验的反馈:侧边栏中的“聊天”视图还是“快速聊天”。为了使首次体验更熟悉,我们选择了“聊天”视图。

话虽如此,如果您希望 询问 GitHub Copilot 在“快速聊天”中打开,您可以使用 askChatLocation 设置更改行为

"workbench.commandPalette.experimental.askChatLocation": "quickChat"

命令面板类似命令

此迭代中,我们在命令面板中发布了 类似命令 功能。Copilot Chat 用户获得了更好的类似命令体验,因为我们可以使用 Copilot AI 来确定相似性。这些智能有助于同义词和意图,并且在我们的测试中,Copilot 能够处理跨口语语言的相似性。在命令面板中找到您要查找的确切命令从未如此简单!

Jupyter

扩展作者的最终 Jupyter 服务器提供程序 API

Jupyter 扩展的用于贡献 Jupyter 服务器的 API 已最终确定。扩展可以使用 API 来提供自定义 Jupyter 服务器列表,以便在内核选择器中显示。

API 用法的示例可以在 Jupyter 服务器提供程序示例 中找到。JupyterHub 扩展 也使用了相同的 API。

npm 包 @vscode/jupyter-extension 包含所有 TypeScript 类型定义。

JupyterHub 扩展

现在有一个 JupyterHub 扩展,它支持登录 JupyterHub 并针对 VS Code 中笔记本或 交互窗口 中的内核执行代码。此扩展程序还可以在 vscode.devgithub.dev 的浏览器中使用。

如果您对此新扩展程序有任何问题或希望提供反馈,可以在 JupyterHub 扩展 GitHub 存储库 中提交问题。

Selecting an existing JupyterHub server in the Kernel Picker

Python

Python 调试器更新

几个月前宣布 的 Debugpy 扩展已重命名为 Python Debugger,以提高在 Marketplace 中的可发现性。

此扩展现在包含新的用户设置 debugpy.debugJustMyCode,禁用此设置后,它允许您步入所有应用程序的系统或第三方库代码(默认情况下,调试器仅步入您自己的 Python 代码中定义的代码)。对于那些想要更方便地为所有项目禁用 justMyCode 而不必在其所有项目的 launch.json 调试配置中手动配置它的用户来说,这是一个受欢迎的功能请求。

要试用它,请确保您已安装 Python Debugger 扩展。然后打开设置编辑器 (⌘,(Windows,Linux Ctrl+,),搜索“debugJustMyCode”,然后取消选中复选框

Searching "debugJustMyCode" in the Settings editor results in the debugpy.debugJustMyCode setting appearing at the top.

现在,一旦您创建 launch.json 文件,扩展程序默认使用 debugpy.debugJustMyCode 的值,只要 justMyCode 未在文件中指定。请注意,当 justMyCodelaunch.json 中指定时,其值优先于 debugpy.debugJustMyCode 设置。

Pylint 扩展的更改时 Lint 选项

默认情况下,Pylint 扩展仅在保存文件时报告错误和警告。现在有一个名为 pylint.lintOnChange 的新设置,如果设置为 true,则指示扩展程序在您键入时报告错误和警告,而无需保存文件。

Mypy 扩展报告范围和守护程序模式

Mypy Type Checker 扩展现在有两个新设置,允许您指定 Mypy 的报告范围以及是否使用 Mypy 的守护程序。

第一个是 mypy-type-checker.reportingScope,可以设置为 file(默认值)以仅对工作区中的打开文件启用问题报告,或设置为 workspace 以对工作区中的所有文件启用报告。

第二个是 mypy-type-checker.preferDaemon,当设置为 true 时,使用 Mypy 的守护程序 (dmypy) 而不是 Mypy 本身 (mypy) 来执行类型检查,这在某些情况下可能会快得多。

关于调用参数内联提示设置的更新

以前,Pylance 的用于启用部分调用参数的内联提示的设置 (python.analysis.inlayHints.callArgumentNames) 只能设置为 truefalse 以启用或禁用调用参数的类型提示。此设置已修改为允许更精细地控制为调用参数显示的类型提示。

现在可以将其设置为 partial 以禁用 仅位置仅关键字 参数的提示,设置为 all 以启用它们,或设置为 off 以完全禁用它们。

弃用对 Python 3.7 的支持

正如我们在 2023 年 7 月 发行博客中先前提到,我们已在 Python 扩展中放弃了对 Python 3.7 的官方支持。没有积极移除对 Python 3.7 支持的计划,因此我们预计该扩展在可预见的未来将继续非官方地与 Python 3.7 一起工作。

请记住,Python 的所有其他版本现在都处于年度发布节奏中,因此,我们预计一旦 Python 版本在下一个日历年的第一个扩展版本中达到 EOL,我们将停止对该版本的官方支持(例如,Python 3.8 计划于 2024 年 10 月达到 EOL,因此 2025 年的第一个扩展版本将停止官方支持)。

GitHub 拉取请求和问题

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

  • 改进了审阅 PR 的辅助功能。
  • 即使分支尚未发布,提交也会显示在“创建”视图中。

查看扩展程序 0.74.0 版本的更新日志,以了解其他亮点。

预览功能

最近的快速修复键盘快捷键

有一个新设置可以从 ⌘.(Windows,Linux Ctrl+.(命令 ID editor.action.quickFix)激活行中最接近的快速修复,无论您的光标在该行中的哪个位置。

该命令突出显示将使用快速修复进行重构或修复的源代码。普通代码操作和非修复重构仍然可以在光标位置激活。要启用此功能,请检查 代码操作小组件:包括附近的快速修复 (editor.codeActionWidget.includeNearbyQuickfixes)。

Example of new Quick Fix behavior, showing activation on nearest errors, and showing how all Code Actions can still be utilized at the cursor location

源代码管理同步视图

此里程碑版本包含 源代码管理同步 视图的早期版本。新视图提供有关尚未推送到远程分支的本地更改(传出)以及尚未从远程分支本地拉取的更改(传入)的详细信息。该视图还允许您发布分支并将更改(拉取/推送)与远程分支同步。新视图仍处于实验阶段,我们将根据用户反馈在即将到来的里程碑中继续改进它。您可以通过 scm.experimental.showSyncView 设置显示新视图。请试用并提供反馈,请在 问题 #192290 中提供反馈。

Source Control Sync view showing a diff view of an incoming change

命令中心和调试工具栏

有一个新的实验性设置可以在命令中心内显示调试工具栏。确保已启用命令中心并配置 debug.debugToolbarLocation 设置

"debug.toolBarLocation": "commandCenter"

Debug controls inside the Command Center

主题:GitHub Light Colorblind (Beta) (在 vscode.dev 上预览)

扩展创作

支持字符串设置验证的 Unicode 字符类转义

Unicode 字符类转义 现在在正则表达式中受支持,以验证字符串和字符串数组设置。换句话说,字符串和字符串数组设置现在可以指定一个 pattern 字段,其值例如 "\\p{Letter}+",允许仅包含字母的字符串值。

此时,对象设置中具有字符串值的 Unicode 字符类转义不支持。

贡献到终端菜单

有两个新的菜单可以贡献给 terminal/contextterminal/title/context,它们分别将条目添加到终端上下文菜单和终端选项卡上下文菜单。用法示例

{
  "contributes": {
    "menus": {
      "terminal/context": [
        { "command": "terminalTest.sendText" }
      ],
      "terminal/title/context": [
        { "command": "terminalTest.sendText" }
      ]
    }
    }
}

新的 env.onDidChangeShell 事件

有一个新的 env.onDidChangeShell: Event<string> 事件,当 env.shell 的值更改时触发。

从 VS Code 中删除 keytar

早在 6 月,我们将 SecretStorage API 转移到使用 Electron 的 safeStorage,并包括了 现在已存档且未维护的 keytar 模块从 VS Code 中弃用和删除的计划。我们最初没有删除 keytar,因为某些扩展程序仍在直接导入/需要 keytar(在 SecretStorage API 存在之前,这是推荐的做法,但在 SecretStorage API 发布后则不推荐)。

根据产品遥测和没有 keytar 的 Insiders 版本,keytar 的使用量已下降,我们已准备好从 VS Code 中完全删除 keytar

这对我的扩展意味着什么?

如果您使用 SecretStorage API,则无需执行任何操作。自 6 月以来,我们一直在将密钥从 keytar 中迁移出来,因此如果您在两个月内接触过这些密钥,那么您的所有密钥都应该已经迁移完毕。

如果您仍然在扩展中直接使用 keytar,则可以考虑以下几个选项

  • (推荐) 使用 VS Code 在 ExtensionContext 上提供的 SecretStorage API。此 API 是跨平台的,可在 VS Code 支持的所有平台上运行。它也由 VS Code 团队维护,将继续得到维护,并且多年来一直是 VS Code API 的一部分。
  • (不推荐) 您可以将 keytar 模块与您的扩展捆绑在一起。请记住,keytar 是一个原生 node 模块,这意味着您需要为要支持的每个平台发布特定于平台的扩展

--disable-keytar 已重命名为 --use-inmemory-secretstorage

当使用 SecretStorage API 时,--disable-keytar 标志会禁用在机器上持久化密钥。这主要用于 CI 环境,这些环境通常没有配置密钥环,因为如果没有密钥环,当使用 SecretStorage API 但没有可用的密钥环时,VS Code 会抛出错误。

由于我们已经移除了 keytar,因此这个标志需要一个新的名称。我们现在已将 --disable-keytar 标记为已弃用,而推荐使用 --use-inmemory-secretstorage。未来,我们将考虑移除 --disable-keytar,但它在近期内不会消失。

最后,我们要感谢所有迅速采取行动迁移出 keytar 的杰出扩展作者,他们确保了他们的用户在使用 VS Code 中的密钥时拥有出色且安全的体验!

语言服务器协议

新版本的 Language Server Protocol npm 包已发布 (protocol@3.17.5, client@9.0.1 和 server@9.0.1)。

此版本的亮点包括

  • 添加了建议的内联完成请求。

  • 添加了建议的格式化范围请求。

  • 为折叠范围添加了建议的刷新请求。这改变了折叠范围功能的形状,因为 API 需要暴露事件发射器,这是一个重大更改。要获取提供程序,您现在需要使用以下代码

    client.getFeature(lsclient.FoldingRangeRequest.method).getProvider(document)?.provider;
    
  • 各种 错误修复

工程

浮动编辑器窗口探索

我们已经开始探索如何将编辑器从工作台窗口中拉出到它们自己的窗口中。此功能是我们得票最高的 功能请求,我们计划在 10 月份为我们的 Insiders 用户提供第一个工作版本以供试用。

所有窗口中的所有编辑器都对相同的底层编辑器模型进行操作,因此在一个窗口中所做的更改会实时反映在所有其他窗口中。您可以在浮动窗口中创建任何编辑器布局,并根据需要打开任意数量窗口的任何编辑器。

对于我们的第一个工作版本,我们设想状态栏也将出现在浮动窗口中,以便显示编辑器信息 - 例如行号和选择范围。请继续关注未来几个月的更多开发!

vscode.dev 现在是跨域隔离的

跨域隔离现已为 vscode.dev 启用。这实现了强大的新功能,例如共享数组缓冲区,它是跨文件 TypeScript 支持、Web 中的 Python 执行以及一般的 vscode-wasm-wasi 的构建块。

设置同步故障排除

我们添加了一个新的开发者命令 开发者: 下载设置同步活动,它会下载您所有的 设置同步 活动,包括云端和本地机器上的活动,以及日志。这将帮助我们解决设置同步的问题。我们还创建了一个新视图来浏览下载的活动。您可以通过运行命令 设置同步: 显示同步数据 并启用 同步活动 (开发者) 视图来打开该视图。您可以通过选择视图中的 加载同步活动 按钮来加载下载的同步活动,如下所示。

Sync activity (developer) view with Load Sync Activity button

值得注意的修复

  • 190679 主题颜色 icon.foreground 不一致且不适用于 .svg

感谢

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

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-html-languageservice 的贡献

vscode-languageserver-node 的贡献

vscode-pull-request-github 的贡献