2024年2月(版本1.87)

更新 1.87.1: 本次更新解决了这些问题

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

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

欢迎来到2024年2月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:

如果您想在线阅读这些发布说明,请访问更新code.visualstudio.com上。 内测用户:想要尽快尝试新功能吗?您可以下载每晚的内测版构建,并在最新更新可用时立即尝试。

可访问性

在编辑器中使用听写

您现在可以使用语音直接在编辑器中输入,前提是您已安装VS Code Speech扩展。

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

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

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

语音识别支持多种语言

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

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

可访问性信号

可访问性信号包括声音(以前称为音频提示)和公告(以前称为警报)。

命令Help: List Signal SoundsHelp: List Signal Announcements允许用户查看可用的信号并进行配置。迁移到这个新配置是自动进行的。

之前:

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

之后:

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

工作台

发布说明中的交互设置

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

发布说明中的交互设置示例

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

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

像管理认证访问一样管理语言模型访问

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

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

一旦访问权限被授予,您将能够在管理账户访问权限的同一位置管理该访问权限,即在账户菜单中:

在账户菜单中管理受信任的扩展选项

"管理受信任的扩展" 将引导您进入一个快速选择界面,您可以在其中根据需要管理访问权限:

管理受信任的扩展快速选择

在完成初步工作后,我们将继续优化体验,使其尽可能流畅和清晰。

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

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

在扩展编辑器中跟踪语言模型使用情况

在运行扩展编辑器中跟踪语言模型使用情况

编辑器

编辑器粘性滚动

本次迭代中,我们默认在编辑器中启用了粘性滚动。你可以通过设置 editor.stickyScroll.enabled 来更改此设置。

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

多光标的内联补全

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

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

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

终端

命令持续时间跟踪

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

悬停终端命令显示其耗时(以毫秒为单位)

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

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

  • 终端:增大字体大小 (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设置来为笔记本设置特定的缩进样式。

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

调试

支持新的 BreakpointMode

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

断点上下文菜单现在有一个'编辑模式...'选项来更改断点模式

远程开发

Remote Development extensions 允许您使用 Dev Container、通过 SSH 连接的远程机器或 Remote Tunnels,或者 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扩展时,选择图标首先会要求安装该扩展以启用语音转文本功能。

聊天输入中的麦克风图标

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

隐藏聊天输入中的麦克风图标

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

当你使用VS Code Speech扩展通过语音填充聊天输入字段时,诸如“at workspace”或“slash fix”之类的短语现在会翻译成相应的代理和斜杠命令。这适用于聊天视图和内联聊天。

随处对讲模式

当你使用VS Code Speech扩展时,命令Voice: Start Voice Chat (⌘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扩展无法检测到已安装的包。

远程Jupyter服务器失败的语言特性

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

远程Jupyter服务器的语言特性

Python

Python REPL 的 Shell 集成

我们现在在Mac、Linux和Windows上通过WSL扩展启用了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 Debugger 扩展开发和测试您的 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的Bug

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

GitHub 拉取请求

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

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

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

预览功能

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

在这个迭代中,我们引入了一个新的命令,它是@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标志在命令行生成,也可以通过使用Run with 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字段。这使得扩展能够直接打开本机问题报告器,并预填更多信息。

为了让扩展在通过帮助:报告问题...导航正常问题报告流程的单独情况下也能从中受益,扩展可以贡献一个自定义命令(将调用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 here.

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

测试覆盖率 API

在此次迭代中,测试覆盖率API和编辑器内体验已达到功能完备状态。我们鼓励扩展作者在VS Code 1.88版本预计最终发布之前尝试使用它们并提供反馈。

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

虽然API太长无法在此包含,但我们认为它相当直接,并欢迎您在问题 #123713中对提案提出意见。

调试可视化工具 API

我们有一个新的API,允许扩展为变量提供可视化工具。这些可视化工具可能是运行命令的操作,例如打开一个新编辑器,或者是嵌入到调试视图中的树,并取代数据的默认表示形式。

你可以在这里查看新的API here.

新符号名称提供者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的贡献: