2023 年 9 月 (版本 1.83)

更新 1.83.1:此更新修复了这些 问题

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


欢迎阅读 Visual Studio Code 2023 年 9 月版发布说明。此版本包含许多我们希望您会喜欢的更新,以下是主要亮点:

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

内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。

辅助功能

GitHub Pull Requests 和 Issues 评论改进

GitHub Pull Requests and Issues 扩展(允许您操作、创建和管理拉取请求及问题)在本迭代中对评论和审阅体验进行了多项无障碍改进。

当屏幕阅读器用户打开包含评论区域的编辑器时,系统会给予提示。一个新的无障碍帮助对话框 (editor.action.accessibilityHelp) 提供了在评论线程和区域之间导航的命令说明。

此外,评论控件现在具有无障碍性。在此上下文中也提供了帮助对话框 (editor.action.accessibilityHelp),以告知用户预期的行为和使用方法。同时新增了 Comments: Go to Next Commenting Range (⌘K ⌥⌘↓ (Windows, Linux Ctrl+K Ctrl+Alt+Down)) 和 Comments: Go to Previous Commenting Range (⌘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”等)。

让我们知道你的想法!

配置文件的图标

您现在可以为 配置文件 关联一个图标。该图标将显示在活动栏(Activity Bar)中,以替代 管理 齿轮图标。如果您有多个配置文件并想快速识别当前激活的是哪一个,这非常有用。

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

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: Code Actions On Save (editor.codeActionsOnSave) 并将每个代码操作的设置更改为 always

设置值也进行了更新,当前的布尔值将被废弃,转而推荐使用等效的字符串。

选项包括

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

此版本仍支持布尔值。

Notebook

Notebook 中的“转到符号”

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

单元格执行时的滚动

您现在可以使用 notebook.scrolling.revealNextCellOnExecute 设置,配置执行 notebook.cell.executeAndSelectBelow (Shift+Enter) 时显示下一个单元格的程度。

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

下方显示 "notebook.scrolling.revealNextCellOnExecute": "firstLine" 的效果。

空白符修剪支持

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

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

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

最终确定的 Notebook 代码操作 API

Notebook 现在完全支持贡献的代码操作,并拥有专门的代码操作类型支持。如果扩展作者定义的动作其 kind 前缀为 notebook.source.,则在保存时,Notebook 编辑器将针对整个 Notebook 运行该动作,而不是分别针对每个单元格。要编辑保存时运行的代码操作,您可以在设置编辑器中设置 Notebook: Code Actions on Save 或在 settings.json 文件中编辑 "notebook.codeActionsOnSave"

当前的代码操作启用方式已更新,先前的布尔值将被废弃,转而使用枚举等效值。选项为:

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

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

语言

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

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

要启用此功能,您需要安装 WebAssembly DWARF Debugging 扩展,它会插入到内置的 JavaScript 调试器中。阅读 调试 WebAssembly 了解更多信息。

WebAssembly 调试构建在 Chromium 作者提供的 C/C++ 调试扩展之上,并在他们的支持下得以实现。

改进了调用堆栈视图

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

远程开发

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

此版本增加了通过 隧道 (Tunnels) 连接到开发容器的功能,类似于通过 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 服务器提供程序 API 最终确定

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

可以在 Jupyter Server Provider Sample 中找到 API 使用示例。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,以便在市场中更易于发现。

此扩展现在包含一个新的用户设置 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)。请注意,当 launch.json 中指定了 justMyCode 时,其值优先于 debugpy.debugJustMyCode 设置。

Pylint 扩展的实时检查选项

默认情况下,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 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。

  • 审查拉取请求的无障碍功能已得到改进。
  • 即使分支尚未发布,提交记录也会显示在创建视图中。

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

预览功能

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

新增了一个设置,用于在任何位置使用 ⌘. (Windows, Linux Ctrl+.) (命令 ID editor.action.quickFix) 激活行内最近的快速修复,无论光标在该行何处。

该命令会高亮显示将通过快速修复进行重构或修复的源代码。常规代码操作和非修复重构仍可在光标位置激活。要启用此功能,请检查 Code Action Widget: Include Nearby Quickfixes (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 设置显示新视图。请试用并反馈在 issue #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 中移除

早在六月份,我们将 SecretStorage API 迁移为使用 Electron 的 safeStorage,并包含了对已归档且不再维护的 keytar 模块的 废弃和移除计划。我们最初没有移除 keytar,因为一些扩展仍在直接导入/引用它(这在 SecretStorage API 存在之前是推荐做法,但在其发布后则不然)。

根据产品遥测和不包含 keytar 的 Insiders 版本数据,keytar 的使用率已下降,我们准备将 keytar 从 VS Code 中完全移除。

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

如果您使用 SecretStorage API,则毫无影响。自六月以来,我们一直在将密钥从 keytar 中迁移出来,因此如果在过去两个月中有所更新,所有的密钥应该都已经迁移完成。

如果您仍在扩展中直接使用 keytar,有几种选项可以考虑:

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

--disable-keytar 更名为 --use-inmemory-secretstorage

--disable-keytar 标志禁用了在使用 SecretStorage API 时在机器上持久化存储密钥的功能。这主要用于通常没有配置钥匙串的 CI 环境,因为如果没有它,在没有可用钥匙串的情况下使用 SecretStorage API 会抛出错误。

既然我们已经移除了 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;
    
  • 各种 错误修复

工程

浮动编辑器窗口探索

我们已经开始探索如何将编辑器从工作台窗口中拉出到其自己的窗口中。这是我们投票率最高的 功能请求,我们计划在十月份为 Insiders 用户提供首个可用版本进行试用。

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

对于首个可用版本,我们设想状态栏也会出现在浮动窗口中,以便显示编辑器信息——例如行号和选择范围。敬请期待未来几个月的更多开发进展!

vscode.dev 现在支持跨域隔离

跨域隔离现已为 vscode.dev 启用。这开启了强大的新功能,如共享数组缓冲区 (Shared Array Buffers),它是跨文件 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 的贡献

© . This site is unofficial and not affiliated with Microsoft.