尝试以扩展 VS Code 中的代理模式!

2024 年 2 月 (版本 1.87)

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

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

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

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

如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。Insiders 版本:想尽快试用新功能?您可以下载每晚发布的 Insiders 版本,并在新功能可用时立即试用。

辅助功能

在编辑器中使用听写

现在,您可以直接使用语音在编辑器中进行听写,前提是您已安装 VS Code 语音 (Speech) 扩展。

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

您可以按住启动命令的组合键 (⌥⌘V (Windows, Linux Ctrl+Alt+V)) 以启用对讲机模式,在此模式下,语音识别会在您释放按键后立即停止。

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

语音识别支持多种语言

当您使用 VS Code 语音 (Speech) 扩展时,现在可以通过使用 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 的语言模型。为了提供最大的透明度和对模型访问的控制,我们添加了以下功能。

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

我们发现,管理语言模型访问与管理您在 VS Code 中的 GitHub 帐户或 Microsoft 帐户(或任何利用 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 设置配置最大行数。

多光标内联补全

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

多重差异编辑器中的重构预览

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

终端

命令持续时间跟踪

启用 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

笔记本缩进设置

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

用户还会注意到状态栏中有一个名为**笔记本缩进**的条目,显示笔记本编辑器的当前缩进设置。此条目有一个快速选择菜单,可以管理缩进设置,而无需打开设置编辑器。这与编辑器中也提供的快速选择菜单相同。

调试

支持新的 BreakpointMode

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

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

远程开发

远程开发扩展允许您使用开发容器、通过 SSH 或远程隧道连接的远程机器,或者 适用于 Linux 的 Windows 子系统 (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 Pull Requests 扩展取得了更多进展,它使您能够处理、创建和管理拉取请求和问题。新功能包括

  • 从“GitHub Pull Requests and Issues”更名为“GitHub Pull Requests”
  • 合并或 squash 提交时可以选择关联的电子邮件
  • 设置 githubPullRequests.labelCreated 可用于配置自动添加到已创建 PR 的标签
  • 现在支持“所有者级别”的 PR 模板
  • 可以在 PR 和问题创建时添加项目

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

预览功能

致扩展作者:@vscode/l10n-dev 和 Azure AI 翻译器预览

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

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

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

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

有关更多信息,请参阅l10n-dev 关于 Azure AI 翻译器集成的文档。

扩展开发

扩展中的测试覆盖率

使用 test 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)和一个菜单贡献点。

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

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

订阅问题 #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 太长,无法在此处包含,但我们认为它相当直观,欢迎您在问题 #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 的贡献