现已发布!阅读 10 月份的新功能和修复。

2024 年 2 月(版本 1.87)

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

更新 1.87.2:此更新解决了此安全问题

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

欢迎使用 Visual Studio Code 的 2024 年 2 月版本。此版本包含许多更新,我们希望您会喜欢,其中一些关键亮点包括

如果您想在线阅读这些发行说明,请访问 更新code.visualstudio.com 上。内部人员:想尽快试用新功能?您可以下载 nightly 内部人员 构建,并在它们可用后立即尝试最新更新。

无障碍功能

在编辑器中使用听写

您现在可以使用您的声音直接在编辑器中听写,前提是您已安装了 VS Code 语音 扩展。

我们添加了新的命令来启动和停止编辑器听写:语音:在编辑器中启动听写 (⌥⌘V(Windows、Linux Ctrl+Alt+V) 和 语音:在编辑器中停止听写 (Escape)。

您可以按住启动命令的快捷键 (⌥⌘V(Windows、Linux Ctrl+Alt+V) 来启用 walky-talky 模式,在这种模式下,一旦您松开键,语音识别就会停止。

注意:听写甚至可以在使用富文本编辑器的其他地方使用,例如 SCM 提交输入框和查看拉取请求时的评论输入字段。

语音识别的多语言支持

当您使用 VS Code 语音 扩展时,您现在可以使用 accessibility.voice.speechLanguage 设置从 26 种支持的语言中选择一种。

语音扩展的每种语言都作为其自己的扩展提供。当您首次开始语音识别时,您将看到每个所选语言的扩展安装。

无障碍信号

无障碍信号包括声音(以前称为音频提示)和公告(以前称为警报)。

命令 帮助:列出信号声音帮助:列出信号公告 允许用户查看可用的信号并配置它们。迁移到此新配置会自动发生。

之前

"audioCues.clear": "on | auto | off"
"accessibility.alert.clear": true | false

之后

"accessibility.signals.clear": {
    "sound": "auto | on | off",
    "announcement" (optional): "auto | off"
}

工作台

发行说明中的交互式设置

为了让您更容易开始使用新功能,您现在可以直接从发行说明中启用或查看设置。当您从 VS Code 中查看发行说明时(显示发行说明 命令),请注意某些设置有一个齿轮图标。选择设置或齿轮图标以立即与设置交互。

Example of an interactive setting in release notes

语言模型访问的透明度和控制

在此迭代中,我们介绍了一个建议的 API,它使扩展能够使用 GitHub Copilot Chat 的语言模型。为了提供对模型访问的最高透明度和控制,我们添加了以下功能。

像管理身份验证访问一样管理语言模型访问

我们发现,管理对语言模型的访问与管理对您的 GitHub 帐户或 Microsoft 帐户的访问非常相似(或任何利用 VS Code 中的 AuthenticationProvider 模型的访问)。由于这些相似性,我们也利用了 VS Code 的身份验证堆栈来访问语言模型。

当一个扩展想要访问另一个扩展的语言模型时,他们会看到一个一次性访问提示,该提示将被持久化:模态对话框显示扩展需要语言模型访问

授予访问权限后,您可以在管理帐户访问权限的相同位置管理该访问权限,即帐户菜单中

Manage trusted extensions options in the account menu

"管理受信任的扩展" 将引导您进入快速选择,您可以在其中管理访问权限(如果您愿意)。

Manage trusted extensions quick pick

随着初始工作的完成,我们将继续完善体验,使其尽可能流畅清晰。

跟踪扩展的语言模型使用情况

您可以在扩展编辑器和运行时扩展编辑器中跟踪扩展的语言模型使用情况。以下图像显示了 Copilot Chat 示例扩展对 GitHub Copilot Chat 语言模型发出的请求数。

Tracking language model usage in extension editor

Tracking language model usage in running extensions editor

编辑器

编辑器粘性滚动

在此迭代中,我们默认情况下在编辑器中启用粘性滚动。您可以使用 editor.stickyScroll.enabled 设置更改此设置。

我们还将编辑器粘性窗口小部件中可以显示的最大行数从 10 增加到 20。您可以使用 editor.stickyScroll.maxLineCount 设置配置最大行数。

多光标内联完成

在此迭代中,我们添加了对多光标内联完成的支持。现在,内联完成将在主光标和辅助光标位置预览和应用。

在多重 diff 编辑器中预览重构

使用重构预览,您可以查看代码重构将应用的更改。重构预览更改现在显示在多重 diff 编辑器中,这有助于您一目了然地查看所有更改并将它们与先前版本进行比较。

终端

跟踪命令持续时间

现在跟踪终端持续时间,并且在启用 shell 集成时会在命令悬停时显示详细信息

Hovering the terminal command shows how long it took in milliseconds

用于放大、缩小和重置的新命令

有用于放大、缩小和重置终端字体大小的新命令。这些命令默认情况下未绑定,但您可以将它们绑定到您喜欢的快捷键。

  • 终端:增加字体大小 (workbench.action.terminal.fontZoomIn)
  • 终端:减小字体大小 (workbench.action.terminal.fontZoomOut)
  • 终端:重置字体大小 (workbench.action.terminal.fontZoomReset)

源代码管理

在窗口标题中包含存储库或分支名称

用户可以使用 window.title 设置自定义窗口标题。在此迭代中,我们添加了两个可以与此设置一起使用的变量:${activeRepositoryName}${activeRepositoryBranchName}。这些变量分别替换为活动存储库的名称和活动分支的名称。

提交输入验证改进

在此迭代中,我们探索了使用语言诊断来提供更好的输入验证以编写提交消息。使用语言诊断使我们能够显示可以调用的代码操作来解决输入验证警告。我们添加了代码操作以删除空白字符,根据 git.inputValidationSubjectLengthgit.inputValidationLength 设置硬换行,并且我们正在考虑在将来添加更多代码操作。

要启用它,请切换 git.inputValidation 设置。在我们可以默认启用它之前,我们还需要解决一些问题,但在此期间,您可以随意启用它,并告知我们您的反馈。

传入/传出更改设置管理

我们继续完善源代码管理视图的传入/传出部分。在此迭代中,我们在“传入/传出”分隔符中添加了一个设置操作,允许用户更轻松地切换 scm.showIncomingChangesscm.showOutgoingChangesscm.showChangesSummary 设置。这些操作也位于源代码管理视图标题栏的 ... 菜单中的传入和传出菜单中。

关闭所有未修改的编辑器命令

为了帮助管理编辑器,我们在命令面板中添加了关闭所有未修改的编辑器命令,该命令将关闭所有包含未修改文件的编辑器。该命令不会关闭包含未保存更改的编辑器。

笔记本

笔记本的缩进设置

我们现在通过 notebook.editorOptionsCustomizations 设置支持特定于笔记本的缩进设置。此设置允许用户通过 editor.tabSizeeditor.indentSizeeditor.insertSpaces 设置为笔记本设置特定的缩进样式。

用户还会注意到一个名为笔记本缩进的状态栏条目,它显示笔记本编辑器的当前缩进设置。此条目有一个快速选择菜单,它允许在不打开设置编辑器的情况下管理缩进设置。这与在编辑器中也可用的快速选择菜单相同。

调试

支持新的 BreakpointMode

VS Code 支持调试适配器协议 (DAP) 的一项新增功能,允许您设置断点的不同“模式”。 此功能通常由原生代码调试器使用,例如,用于设置硬件断点与软件断点。 您可以使用断点上下文菜单中的“编辑模式”操作更改断点的模式。

Breakpoint context menu now has an 'Edit Mode...' option to change the breakpoint mode

远程开发

远程开发扩展(https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)允许您使用 开发容器、通过 SSH 或 远程隧道 连接到远程机器,或者将 Windows Subsystem for Linux (WSL) 作为完整的开发环境。

亮点包括

  • GitHub Copilot Chat 在向工作区添加开发容器配置文件时建议模板和功能

您可以在 远程开发发布说明 中了解有关这些功能的更多信息。

不要错过最新的 使用 Visual Studio Code 学习远程开发,它将介绍 VS Code 中不同的远程开发功能。

对扩展的贡献

GitHub Copilot

重命名建议

我们正在逐步推出 Copilot 的重命名建议。 当您在编辑器中重命名符号时,GitHub Copilot 会根据您的代码建议一个可能的符号新名称列表。

内联聊天可访问性视图

内联聊天现在有一个可访问性视图,它显示代码更改,就像可访问的差异查看器一样。 当您使用屏幕阅读器模式时,可访问性视图将被启用。 您也可以使用 inlineChat.accessibleDiffView 设置将其配置为始终开启或关闭。

此外,现在可以使用 F7Shift+F7 键盘快捷键导航更改块。

内联聊天的默认模式

我们已经停用 live preview 模式,并将 live 模式设置为内联聊天的默认模式。 这意味着建议会直接应用于编辑器,并且更改将通过内联差异突出显示。

麦克风图标始终可见

用于在 Copilot Chat 中启动语音识别的麦克风图标现在始终可见。 如果 VS Code Speech 扩展尚未安装,则首次选择该图标会提示您安装扩展以启用语音到文本功能。

Microphone icon in chat input

如果您对该功能不感兴趣,或者只想通过键盘快捷键使用该功能,则可以从上下文菜单中隐藏该功能。

Hide microphone icon in chat input

代理和斜杠命令的语音支持

当您使用 VS Code Speech 扩展通过语音填写聊天输入字段时,诸如“at workspace”或“slash fix”之类的短语现在将转换为相应的代理和斜杠命令。 这在聊天视图和内联聊天中都适用。

随处可见的“对讲机”模式

当您使用 VS Code Speech 扩展时,命令“语音:开始语音聊天”(⌘I(Windows,Linux Ctrl+I)现在可以在任何地方使用,并根据您的焦点位置(编辑器中的内联聊天,否则是面板聊天)显示语音聊天。

要启用“对讲机”模式,请按住键盘快捷键。 语音识别会在您松开按键之前一直处于活动状态,之后请求会自动提交。

基于光标位置的 Copilot: Explain This

以前,在聊天中输入 Explain This 需要您首先在活动编辑器中选择要解释的文本。 现在您也可以将光标放在标识符上,让 Copilot 查看标识符的定义。 如果定义在另一个文件中,则需要丰富的语言支持才能使用。

预览:#codebase 变量

在此版本中,在 GitHub Copilot Chat 的**预发布**版本中,我们引入了一个名为 #codebase 的新聊天变量。 此变量可用于根据您的查询向 Copilot 或您正在与之交谈的聊天参与者提供工作区上下文。

在此示例中,您可以将 #codebase 视为首先向 @workspace 提出问题,然后将该响应添加到您向 @terminal 提出的问题中。

这是一个预览功能,因此 #codebase 可能不是此变量的最终名称,但我们的意图是提供某种方法将工作区上下文包含到聊天参与者中。

同样,这仅在 GitHub Copilot Chat 的预发布版本中提供。 请告诉我们您的想法以及您如何使用它!

终端工作区上下文

终端不再自动提取工作区上下文,这可能需要一些时间。 相反,您需要使用 #codebase 变量显式包含它。

终端聊天位置

有一个名为 github.copilot.chat.terminalChatLocation 的新设置,它控制终端聊天体验。 默认值为 chatView,如果喜欢以前的行为,可以将其配置为 quickChat

Jupyter

对本地运行的 Jupyter 服务器的语言服务器支持

连接到本地 Jupyter 服务器时,Jupyter 扩展以前将这些 Jupyter 服务器视为远程服务器。 因此,Pylance 扩展无法检测到已安装的软件包。

Failed language features for remote Jupyter Servers

在此版本中,Jupyter 扩展检测连接的 Jupyter 服务器是本地服务器还是远程服务器。 这使得 Pylance 扩展能够根据已安装的软件包(在本地 Python 环境中)提供更丰富的语言功能。

Language features for remote Jupyter Servers

Python

Python REPL 的 Shell 集成

我们现在通过 WSL 扩展 为 Mac、Linux 和 Windows 上的 Python REPL 启用了 Shell 集成。 当您在 Python REPL 中执行命令时,彩色圆形修饰符会指示命令是成功还是失败。 此外,我们还支持 Python REPL 的“终端:运行最近的命令...”命令,该命令使您可以查看和使用 REPL 的命令历史记录。

我们现在还支持所有操作系统的 Python Shell 文件历史记录,可以通过“终端:运行最近的命令”进行访问。

减少忽略第一个命令的风险

以前,许多 Python REPL 用户注意到他们的第一个 Python REPL 命令出现了问题(例如,使用 Shift+Enter)。 他们的 Python 命令要么被忽略,没有发送到 Python REPL,要么命令在启动 Python REPL 的 Shell 中而不是 Python REPL 本身多次粘贴。 这种行为特别发生在 Windows 用户或使用旧机器的用户身上。

在此版本中,我们努力减轻并降低这种行为发生的风险。 用户现在遇到的第一个命令在他们将 Python 命令发送到 VS Code 中的第一个 REPL 实例时丢失的情况更少。

添加缺失导入的改进

Pylance 扩展提供“添加导入”代码操作以添加缺失的导入。 在 Pylance 的预发布版本中,我们改进了此代码操作。 Pylance 现在使用启发式方法仅显示前三个高置信度导入选项,并根据以下标准进行优先排序:最近使用的导入、来自同一模块的符号、来自标准库的符号、来自用户模块的符号、来自第三方包的符号,最后按模块和符号名称排序。

此外,还引入了两个新的代码操作:“搜索其他导入匹配项”,它会显示一个快速选择菜单,允许您搜索与缺失的导入符号前缀匹配的导入选项,“更改拼写”,它会为由于拼写错误导致的缺失导入提供导入建议。

您现在可以使用 python.analysis.addImport.heuristics 设置启用此行为。 我们计划很快将其设为新默认行为,并在以后的版本中弃用此设置。

调试 Django 或 Flask 应用程序时自动打开浏览器

使用 Python 调试器扩展 开发和测试 Python Web 应用程序现在更加方便! 现在,通过在 launch.json 配置中设置 autoStartBrowser: true,您可以在使用 Django 或 Flask 应用程序启动调试器时让浏览器自动打开。

{
  "name": "Python Debugger: Flask",
  "type": "debugpy",
  "request": "launch",
  "module": "flask",
  "env": {
    "FLASK_APP": "hello_app.webapp",
    "FLASK_DEBUG": "1"
  },
  "args": ["run"],
  "jinja": true,
  "autoStartBrowser": true
}

修复了符号链接工作区中的 Pytest 错误

我们实施了一个错误修复,使 pytest 测试能够在具有符号链接的工作区中正常运行。 在测试重写中,来自符号链接位置的测试会通过其符号链接路径正确引用和运行。

GitHub 拉取请求

GitHub 拉取请求 扩展取得了更多进展,该扩展使您能够处理、创建和管理拉取请求和问题。 新功能包括

  • 从“GitHub 拉取请求和问题”重命名为“GitHub 拉取请求”
  • 可以在合并/压缩时选择与合并或压缩提交关联的电子邮件
  • 可以使用 githubPullRequests.labelCreated 设置配置自动添加到创建的 PR 的标签
  • 现在支持“所有者级别”PR 模板
  • 可以在创建 PR 和问题时添加项目

查看 扩展的 0.82.0 版本的变更日志,了解其他亮点。

预览功能

对于扩展作者:@vscode/l10n-dev 和 Azure AI Translator 的预览版

在此版本中,我们引入了一个新命令,它是 @vscode/l10n-dev 的一个子命令,它允许您使用 Azure AI Translator 翻译您的字符串。

导出字符串并创建 Azure AI Translator 实例后,您可以设置 AZURE_TRANSLATOR_KEYAZURE_TRANSLATOR_REGION 环境变量,然后运行以下命令使用 Azure AI Translator 生成翻译

npx @vscode/l10n-dev generate-azure -o ./l10n/ ./l10n/bundle.l10n.json ./package.nls.json

Azure AI Translator 提供免费层。 我们认为这是一个很好的机会,可以为扩展作者提供工具,使他们能够更轻松地支持说各种语言的众多用户。 请记住,这些是机器翻译,因此可能并不总是完美。 它们可以作为起点,如果您有能力,可以从说这种语言的人那里获得更精炼的翻译。

有关更多信息,请查看 Azure AI Translator 集成上的 l10n-dev 文档

扩展编写

扩展中的测试覆盖率

使用 测试 CLI 为其扩展进行测试的扩展作者可以通过更新到 @vscode/test-cli 包的最新版本来生成测试覆盖率。

可以在命令行中通过在运行测试时传递 --coverage 标志来生成覆盖率,也可以在 VS Code UI 中通过使用“使用覆盖率运行”操作来生成覆盖率。

launch.json 中的测试配置

您现在可以在 launch.json 配置中引用测试配置文件

{
    "type": "extensionHost",
    "request": "launch",
    "name": "My extension tests",
+   "testConfiguration": "${workspaceFolder}/.vscode-test.js",
-   "args": ["--extensionDevelopmentPath=${workspaceFolder}"]
},

之前需要传入的各种args现在会自动生成,但任何传入的额外参数将附加到 VS Code 的命令行中。

在问题报告器中贡献额外数据

在上一个版本中,我们在workbench.action.openIssueReporter命令中添加了datauri字段。 这使扩展能够直接使用更多预填充的信息打开本地问题报告器。

为了让扩展能够通过帮助:报告问题...导航正常的 Issue Reporter 流程,扩展可以贡献一个自定义命令(该命令将调用openIssueReporter)和一个指向issue/reporter的菜单贡献点。

package.jsoncontributes的贡献命令和菜单示例

"commands": [
    {
        "command": "extension.myCommand",
        "title": "Report Issue"
    }
],
    "menus": {
        "issue/reporter": [
            {
                "command": "extension.myCommand"
            }
        ]
    }

订阅 Issue #196863 获取 API 和openIssueReporter命令的更新或更改。

建议的 API

聊天和语言模型 API 即将完成

我们一直在努力支持扩展为聊天视图和语言模型的通用使用做出贡献。 我们现在处于以下 API 的最终确定阶段,并热切地希望听到您的反馈

详细了解如何构建聊天扩展以及如何在我们的扩展指南中使用语言模型

FindFiles2 API

我们添加了一个新的提议扩展 API,它是现有workspace.FindFiles API 的改进版本。 新的workspace.FindFiles2 API 引入了新的选项,允许工作区文件搜索

  • 尊重files.excludesearch.exclude设置
  • 尊重忽略文件
  • 执行模糊搜索
  • 遵循符号链接

您可以查看新的 API 此处

请注意,FindFiles2 是一个暂定名称,此功能将来可能会作为FindFiles 的替代重载提供。

测试覆盖率 API

在这次迭代中,测试覆盖率 API 和编辑器内的体验处于功能完整状态。 我们鼓励扩展作者尝试它们并提供反馈,以便在预计的 VS Code 1.88 版本中最终确定。

用于 Java 的 扩展包 已经采用了测试覆盖率 API。 开发人员现在可以查看运行 Java 测试时的覆盖率结果。 现在您可以通过选择 **使用覆盖率运行测试** 按钮来获取测试覆盖率,并在测试资源管理器视图中查看 **测试覆盖率** 面板。 在团队的12 月1 月更新中了解有关使用 Java 扩展包进行测试覆盖率的更多信息。

虽然 API 过长,无法在此处包含,但我们认为它相当简单,并欢迎您在Issue #123713中对该提议发表意见。

调试可视化器 API

我们有一个新的 API,它使扩展能够为变量贡献可视化器。 这些可视化器可能是运行命令(例如打开新编辑器)的操作,也可能是嵌入到调试视图中的树,这些树取代了数据的默认表示形式。

您可以查看新的 API 此处

新的符号名称提供程序 API

此 API 允许扩展在用户想要重命名符号时提供名称建议。

重要修复

  • 184046 链接有时在终端中完全停止工作

感谢

最后但并非最不重要的一点是,对 VS Code 贡献者表示衷心的感谢。

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode的贡献

vscode-black-formatter 的贡献

vscode-hexeditor 的贡献

vscode-isort 的贡献

vscode-languageserver-node 的贡献

vscode-pull-request-github 的贡献

language-server-protocol 的贡献

node-pty 的贡献