在 VS Code 中试试

2023 年 9 月 (版本 1.83)

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

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


欢迎来到 Visual Studio Code 2023 年 9 月发布版本。此版本有许多更新,我们希望您会喜欢,以下是主要亮点:

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

Insiders:想尽快尝试新功能吗?您可以下载每晚的 Insiders 版本,并在有最新更新时立即尝试。

可访问性

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

GitHub 拉取请求和问题扩展允许您处理、创建和管理拉取请求和问题,在此迭代中,其评论和审查体验获得了许多可访问性改进。

如果编辑器包含评论范围,屏幕阅读器用户会在打开时收到通知。新的可访问性帮助对话框 (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 多个命令……加上您喜欢的扩展,这个数字可能更高。我们希望引入一种方法,在保持命令面板现有速度的同时,帮助您找到所需内容。为此,我们在命令面板结果中新增了一个名为“类似命令”的部分。以下是一些示例:

查询不再需要“模糊”匹配即可显示在结果中。例如“切换自动保存”(Toggle Auto Save)。

'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

我们认为这确实有助于那些难以记住确切命令名称的人……老实说,我们大多数人都曾遇到过这种情况。

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

  • 根据命令的非可见描述进行命令匹配。
  • 更好地基本处理同义词(例如,“toggle”和“turn on/off”、“show”和“reveal”等)。

欢迎反馈您的想法!

配置文件的图标

您现在可以为配置文件关联一个图标。此图标将显示在活动栏中,替换管理齿轮图标。如果您有多个配置文件并想快速识别哪个配置文件当前处于活动状态,这将非常有用。

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

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.

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

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

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

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

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

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

评论

评论编辑器用于诸如 GitHub 拉取请求和问题扩展等扩展中,它在那里显示拉取请求评论。

评论编辑器大小

评论编辑器现在随着添加行而扩展,最高高度取决于评论所在编辑器的大小。

Comment editor expanding as lines are added

在未解决的评论上打开评论视图

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

自动折叠已解决的评论

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

编辑器

保存和自动保存时运行 Code Actions

您现在可以在编辑器中启用自动保存时运行 Code Actions。这会在您保存或通过窗口更改 (onWindowChange) 或焦点更改 (onFocusChange) 进行自动保存时触发 Code Actions。要启用此功能或更新您当前的设置,请选中编辑器:保存时运行 Code Actions (editor.codeActionsOnSave) 并将每个 Code Action 的设置更改为 always

设置值也已更新,当前布尔值将被弃用,转而使用字符串等效值。

选项如下:

  • explicit:显式保存时触发 Code Actions。与 true 相同。
  • always:显式保存时以及因窗口或焦点更改而触发的自动保存时触发 Code Actions。
  • never:从不触发保存时 Code Actions。与 false 相同。

此版本仍支持布尔值。

Notebooks

Notebook 中的转到符号

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

执行单元格时滚动

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

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

下面显示了设置 "notebook.scrolling.revealNextCellOnExecute": "firstLine" 的效果。

支持空白字符修剪

Notebook 现在遵循现有的三个与空白字符相关的设置:

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

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

Notebook Code Action API 最终定型

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

Code Actions 的当前启用方式已更新,先前的布尔值已被弃用,转而使用枚举等效值。选项如下:

  • "explicit":显式保存时触发 Code Actions。与 true 相同。
  • "never":从不触发保存时 Code Actions。与 false 相同。

第三个选项 "always" 即将推出,以完全匹配编辑器 Code Actions,允许用户在自动保存设置 onFocusChangeonWindowChange 生效时触发 Notebook Code Actions。

语言

Perl 6/Raku

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

调试

JavaScript 调试器

WebAssembly 调试

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

Debugger stopped on a breakpoint in C++ source code

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

要启用此功能,您需要安装 WebAssembly DWARF Debugging 扩展,它会与内置的 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.py 建议 test_foo.py,为 bar.js 建议 bar.test.js

行内聊天支持多轮对话

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

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

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

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

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

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

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

命令面板类似命令

在本次迭代中,我们在命令面板中推出了类似命令功能。Copilot Chat 用户获得了更好的类似命令体验,因为我们可以使用 Copilot AI 来确定相似性。这些智能有助于处理同义词和意图,并且在我们的测试中,Copilot 也能处理跨自然语言的相似性。在命令面板中找到您正在寻找的确切命令从未如此容易!

Jupyter

面向扩展作者的 Jupyter Server Provider API 最终定型

Jupyter 扩展的贡献 Jupyter 服务器的 API 已最终定型。扩展可以使用此 API 在内核选择器中提供自定义 Jupyter 服务器列表。

API 使用示例可在 Jupyter Server Provider Sample 中找到。JupyterHub 扩展也使用了相同的 API。

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

JupyterHub 扩展

现在有一个 JupyterHub 扩展,支持登录到 JupyterHub,并在 VS Code 的 Notebook 或 交互式窗口中针对内核执行代码。此扩展还可在浏览器中的 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 文件,只要文件中没有指定 justMyCode,扩展将默认使用 debugpy.debugJustMyCode 的值。请注意,如果在 launch.json 中指定了 justMyCode,则其值优先于 debugpy.debugJustMyCode 设置。

Pylint 扩展的更改时 lint 选项

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

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

Mypy 类型检查器扩展现在有两个新设置,允许您指定 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 拉取请求和问题扩展允许您处理、创建和管理拉取请求和问题,此扩展已取得更多进展。

  • 查看 PR 的可访问性已得到改进。
  • 即使分支尚未发布,提交也会显示在创建视图中。

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

预览功能

最近快速修复键盘快捷方式

新增了一个设置,无论您的光标位于行中的何处,都可以通过 ⌘. (Windows, Linux Ctrl+.)(命令 ID editor.action.quickFix)激活行中最接近的快速修复。

该命令会突出显示将通过快速修复进行重构或修复的源代码。常规的 Code Actions 和非修复重构仍可在光标位置激活。要启用此功能,请勾选Code Action Widget:包含附近的快速修复 (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 的值发生变化时触发。

keytar 从 VS Code 中移除

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

基于产品遥测和没有 keytar 的 Insiders 版本,keytar 的使用率已下降,我们准备将 keytar 从 VS Code 中完全移除。

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

如果您使用 SecretStorage API,没有任何影响。自 6 月以来,我们一直在将秘密从 keytar 中迁移出来,因此如果您在过去两个月内曾访问过秘密,您的所有秘密应该都已经迁移完毕。

如果您的扩展仍在直接使用 keytar,您可以考虑以下几种选择:

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

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

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

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

最后,我们要感谢所有迅速行动、不再使用 keytar 并确保其用户在 VS Code 中拥有良好且安全的秘密体验的优秀扩展作者们!

Language Server Protocol

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;
    
  • 各种错误修复

工程

浮动编辑器窗口探索

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

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

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

vscode.dev 现在已实现跨源隔离

vscode.dev 现在已启用跨源隔离。这使得诸如共享数组缓冲区等新的强大功能成为可能,它们是跨文件 TypeScript 支持、在 Web 中执行 Python 和vscode-wasm-wasi 等的基础构建块。

设置同步故障排除

我们添加了一个新的开发者命令Developer: Download Settings Sync Activity,该命令会下载您所有的设置同步活动,包括云端和本地机器上的日志。这将有助于我们对设置同步问题进行故障排除。我们还创建了一个新的视图来浏览下载的活动。您可以通过运行命令Settings Sync: Show Synced Data并启用SYNC ACTIVITY (DEVELOPER)视图来打开此视图。您可以通过在视图中选择Load Sync Activity按钮来加载下载的同步活动,如下图所示。

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 的贡献