2024年1月 (版本 1.86)

更新 1.86.2: 此次更新解决了这些问题

更新 1.86.1: 此次更新解决了这些问题

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

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

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

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

可访问性

警报

屏幕阅读器和盲文用户现在有更多可配置的警报,例如当遇到调试断点时,当前行有错误时等等。这些可以通过以accessibility.alert开头的设置进行配置,或者使用帮助:列出警报命令进行探索和配置。

使用“嘿代码”语音命令

通过新的accessibility.voice.keywordActivation设置,您可以启用VS Code来监听“Hey Code”语音命令,以启动与Copilot Chat的语音会话。语音识别在您的机器上本地计算,并且永远不会发送到任何服务器。

可用的选项有:

  • chatInView: 从聊天视图开始语音聊天
  • quickChat: 从快速聊天控件开始快速语音聊天
  • inlineChat: 从编辑器中的内联聊天开始语音聊天
  • chatInContext: 如果焦点在编辑器中,则从内联聊天开始语音,否则从聊天视图开始语音聊天

以下示例展示了配置了inlineChat选项的“Hey Code”:

当VS Code使用麦克风识别“Hey Code”时,状态栏中的一个小麦克风图标会发出信号。

一旦语音聊天会话完成,VS Code 将再次监听“Hey Code”以重新启动它。

要使用这个新功能,需要以下扩展:

注意:语音识别在您的机器上本地运行,永远不会发送到任何服务器。

工作台

恢复辅助窗口

通过此版本,所有与主窗口关联的已打开浮动窗口将在您重新启动应用程序时恢复。这包括已打开的编辑器,以及辅助窗口的大小和位置。

树状视图中的粘性滚动

基于编辑器中Sticky Scroll的成功,我们已将此功能扩展到所有树视图,使用户能够更轻松地导航项目树。可以通过workbench.tree.enableStickyScroll设置启用或禁用树视图的Sticky Scroll。

为了确保粘性滚动不会占用太多空间,它被限制在视图高度的最大40%。此外,用户可以通过配置workbench.tree.stickyScrollMaxItemCount来自定义粘性元素的最大数量,默认设置为7。如果有比可以显示的更多的粘性元素,如果树视图支持此功能,粘性滚动将把最后的粘性元素合并在一起。

为了提升树形导航的体验,您可以选择一个固定元素直接跳转到树中的该元素。或者,按下父元素的箭头以隐藏其所有子元素。此外,当启用固定滚动时,访问复选框和操作项会更加容易。

为每个窗口配置缩放级别

新的设置window.zoomPerWindow,默认启用,允许您配置缩放命令(放大缩小重置缩放)仅应用于活动窗口,而不是所有打开的窗口。以前使用这些命令不仅会应用于所有打开的窗口,还会更新window.zoomLevel设置。

我们认为使用这些命令更像是一种临时的手势,例如在进行演示时,因此应该只适用于它们被调用的窗口。

正如你从这个例子中看到的,只有活动窗口的缩放级别发生了变化,而其他窗口没有变化:

当窗口的自定义缩放级别与window.zoomLevel设置值不匹配时,状态栏中会显示缩放级别指示器。选择状态栏指示器以找到更改缩放级别、重置缩放级别或快速转到相关设置的控件。

状态栏中的缩放指示器和控制。

具有自定义缩放级别的窗口在重新启动和工作区更改时保留该缩放级别。

注意:window.zoomPerWindow 配置为 false 以恢复之前的缩放级别行为。

更强大和灵活的自动保存选项

VS Code 长期以来提供了自动保存选项。在此版本中,我们使这一功能变得更加强大。

按资源或语言配置自动保存

所有自动保存设置现在可以按文件夹或语言进行配置,这使您可以选择性地仅为特定语言或文件夹启用自动保存。

在下面的示例中,设置配置为:

{
  "[markdown]": {
    "files.autoSave": "afterDelay"
  }
}

如你所见,编辑后的markdown文件会立即保存,而TypeScript文件仍然保持未保存状态。

当出现错误时禁用自动保存

一个新的files.autoSaveWhenNoErrors设置允许你在文件中有错误标记时禁用自动保存,当自动保存通常会保存编辑器时。

当你有外部工具监视文件更改时,这可能很有用,在这种情况下,你希望避免这些工具对包含错误的更改文件采取行动。

仅对工作区文件自动保存

最后,一个新的设置 files.autoSaveWorkspaceFilesOnly 将自动保存限制为仅在工作区内的文件。

允许按扩展禁用通知

我们现在提供了更细粒度的控制来禁用来自扩展的通知。从通知弹窗中,您可以禁用该扩展的通知:

关闭扩展的通知。

在通知中心,有一个集中管理所有触发通知的扩展的通知启用状态的地方:

管理扩展的通知。

这一新功能补充了我们现有的“请勿打扰”模式,该模式全局禁用所有通知。与全局开关一样,错误通知将始终显示且无法禁用。

允许交换左右差异编辑器

当你比较两个文件时(例如从文件资源管理器),会出现一个新的操作来交换差异编辑器的左右两侧。

注意:比较两个可编辑文件允许你在任一侧进行更改。

在从命令行读取标准输入时不要强制使用 --wait

当使用终端时,您可以直接将进程的输出传递到VS Code中以作为编辑器打开,例如:

  • ps aux | grep code | code - 在 Linux 或 macOS 上
  • echo Hello World | code - 在Windows上

到目前为止,这也意味着--wait标志,这意味着在关闭编辑器窗口或完全退出VS Code之前,您将无法返回到终端提示符。在这个里程碑中,当从stdin读取时,我们不再强制执行--wait,因此您可以立即返回到终端提示符。

注意:要恢复之前的行为,只需在命令行调用中附加--wait

支持自定义标题栏与原生标题栏

我们正在引入window.customTitleBarVisibility设置,该设置允许在使用原生标题栏时显示自定义标题栏。这对于偏好原生标签页的macOS用户尤其有益。通过这一新设置,使用原生标题栏的用户现在可以访问自定义标题栏的功能,例如:

  • 命令中心: 直接从自定义标题栏轻松访问命令中心。
  • 布局控制: 以更大的灵活性自定义您的工作区布局。
  • 活动栏自定义: 将活动栏操作移动到顶部。
  • 编辑器操作自定义: 将编辑器操作重新定位到自定义标题栏。

此外,对于喜欢在全屏模式下拥有简洁视图的用户,window.customTitleBarVisibility: "windowed" 选项允许您在全屏模式下隐藏自定义标题栏。此功能确保了一个更加专注且无干扰的编码环境,同时仍然提供了在非全屏模式下使用自定义标题栏功能的选项。

设置编辑器中的'窗口:自定义标题栏可见性'设置。

强制系统颜色主题的新设置

一个新的设置 window.systemColorTheme 允许你显式覆盖应用于 VS Code 中本地元素的系统颜色主题,例如 macOS 上的菜单或对话框。该设置支持以下值:

  • default: 颜色主题与操作系统的主题相匹配(默认选项)。
  • auto: 根据 VS Code 主题选择 lightdark
  • light: 选择 light 系统主题
  • dark: 选择 dark 系统主题

以下是一个适用于macOS上下文菜单的示例,顶部显示light,底部显示dark

展示了应用于上下文菜单的'浅色'和'深色'系统主题。

允许在没有确认的情况下关闭未命名的工作区

一个新的设置 window.confirmSaveUntitledWorkspace 允许你在关闭带有未命名工作区的窗口时禁用显示确认对话框。现在对话框上还有一个复选框可以禁用它。默认情况下,window.confirmSaveUntitledWorkspace 设置是启用的,以保持当前的行为。

未命名工作区确认对话框,显示复选框以始终放弃更改。

注意:了解更多关于未命名工作空间的信息 在我们的文档中.

切换输出面板中的自动换行

输出面板现在支持使用查看:切换自动换行命令来切换自动换行。这对于在输出面板中查看长文本行非常有用。

在新窗口中打开输出面板

输出面板现在在面板标题菜单中有一个在新窗口中打开输出操作,以在单独的窗口中查看输出面板。

从CLI更新扩展

你现在可以通过使用--update-extensions参数从命令行更新扩展。这将把所有已安装的扩展更新到最新版本。

快速选择中的悬停现在使用自定义悬停

我们已将Quick Pick中的几个悬停效果改为使用自定义悬停,而不是原生渲染。这使得渲染更加丰富,并在整个产品中保持更高的一致性。

快速选择悬停使用自定义悬停而非原生渲染。

在差异编辑器中查看多个文件

随着此版本的发布,多差异编辑器现已对所有用户启用。多差异编辑器允许您在一个可滚动的视图中查看多个文件的更改:

目前,多文件差异编辑器可用于审查本地更改、暂存更改、传入/传出更改、存储以及来自拉取请求的更改。 可以通过选择各种新的查看更改操作来打开它,这些操作可以通过多文件差异图标来识别。

当从源代码控制视图中打开差异编辑器时,它会随着文件的更改或暂存而动态更新视图。

多差异编辑器仍在开发中,因此预计在即将发布的版本中会看到更多的改进和错误修复。

GitHub Pull Requests 扩展中的多文件差异

当安装了GitHub Pull Requests and Issues扩展时,您可以设置"githubPullRequests.focusedMode": "multiDiff"以在打开拉取请求时自动打开多文件差异编辑器。

当你为github.dev设置好后,你可以在GitHub上的拉取请求中按下.,然后github.dev会打开多文件差异编辑器来审查更改。

编辑器

粘贴文本/HTML内容

粘贴为... 命令现在允许你粘贴剪贴板中的 text/html 内容:

使用'粘贴为'来粘贴HTML内容。

当你从网页复制内容时,你可以使用这个功能来粘贴内容的HTML,而不是以纯文本形式粘贴:

源代码控制

提交输入自定义

在这个里程碑中,我们添加了一个新的设置,scm.inputMinLineCount,可以用来控制提交输入字段的初始高度。控制提交输入字段最大大小的设置已从scm.inputMaxLines重命名为scm.inputMaxLineCount,以便与类似设置的命名约定相匹配。

用户现在可以使用特定语言的编辑器设置来进一步自定义提交输入字段。特定语言的编辑器设置可用于定义编辑器规则并禁用自动换行:

"[scminput]": {
    "editor.rulers": [
      50,
      72
    ],
    "editor.wordWrap": "off"
  }

源代码控制仓库视图改进

为了更好地管理拥有大量仓库的工作空间,我们在仓库上下文菜单中添加了一个新命令:关闭其他仓库。我们还为关闭仓库关闭其他仓库命令添加了多选支持,因此用户可以一次性关闭多个仓库,或者关闭除少数仓库之外的所有仓库。

由于扩展程序贡献的操作,源代码控制仓库视图可能会变得拥挤。为了帮助解决这个问题,我们增加了通过右键单击操作并选择隐藏来隐藏贡献的操作的功能。隐藏的操作将被移动到...菜单中。除了CheckoutSync之外,所有操作都可以被隐藏。

传入/传出更改改进

我们继续完善源代码管理视图中的传入/传出更改部分。在这个里程碑中,我们进行了更改,使得传入更改节点仅在当前分支具有跟踪远程分支时显示。

我们已向传入更改节点添加了获取拉取操作,并向传出更改节点添加了推送操作。

我们添加了操作来查看每个单独的提交,以及利用多文件差异编辑器的所有传入/传出更改。

用户现在可以使用一个新的设置,scm.showChangesSummary,来隐藏所有更改条目。

合并标签的能力

我们通过添加合并标签的功能,解决了一个长期存在的功能请求。在命令面板中添加了一个新命令,Git: Merge...,它取代了Git: Merge Branch...命令。调用Git: Merge...命令将显示一个快速选择控件,列出分支和标签。

查看暂存命令

我们添加了一个新命令,Git: 查看存储...,使用户能够在多文件差异编辑器中查看存储库中的任何存储。查看git存储时,编辑器标题菜单将包含应用/弹出或删除存储的操作。

使用SSH密钥进行提交签名

在这个里程碑中,我们增加了使用带有密码的SSH密钥签署提交的功能。当使用SSH密钥签署提交时,VS Code将在屏幕顶部显示一个快速选择控件,提示输入密码。VS Code不会缓存密码,每次签署提交时都会提示输入密码。

笔记本

浮动窗口支持

现在可以在浮动窗口中打开Notebook编辑器。您可以将Notebook标签从主窗口中拖出以在新窗口中打开它,或使用View: Move Editor into New Window命令。

内置变量视图

我们已经在运行和调试视图中添加了一个实验性的变量视图,如果扩展提供了这些变量,可以用来查看来自笔记本内核的变量。可以通过以下设置启用此功能:

"notebook.experimental.variablesView": true

笔记本粘性滚动

笔记本编辑器的粘性滚动功能已经得到了显著的改进,以使其风格与工作台的其余部分保持一致,并为每个Markdown元素添加了折叠控制。

终端

选择下显示的背景

当启用GPU加速时,具有非默认背景颜色的单元格现在将在常规选择颜色“下方”渲染。

终端中的单元格背景颜色现在即使在选中时也会保留。

通过鼠标滚轮缩放终端

终端现在可以通过按住Ctrl并使用鼠标滚轮进行放大和缩小,当启用此设置时:

"terminal.integrated.mouseWheelZoom": true

多行粘贴警告改进

在之前的版本中,terminal.integrated.enableMultiLinePasteWarning 接受 true(默认)或 false。当 true 激活时,除非启用了括号粘贴模式或行以 \n 字符结尾,否则总是显示警告。此设置现在接受一个字符串,具有以下选项:

  • auto: 之前的真实行为
  • always: 总是显示警告
  • never: 从不显示警告

此外,对话框中有一个新按钮,可以将字符串粘贴为单行,这将删除所有的\r\n字符。

文件协议URI(file://)现在支持在末尾添加行号和列号扩展,就像大多数其他链接一样。新的#格式也得到了支持。

终端语音命令

新的终端:启动终端语音终端:停止终端语音命令可以在终端中启用语音到文本的会话。

要使用这个新功能,请安装VS Code Speech扩展。

任务

路径分隔符变量的简写

新的${/}变量可以用作现有${pathSeparator}变量的简写。

调试

触发的断点

您现在可以设置断点,一旦另一个断点被命中,这些断点将自动启用。例如,这在诊断仅在满足特定前提条件后发生的代码故障时非常有用。触发的断点适用于所有语言,条件断点也可以用作触发器。

可以通过右键点击符号边距,选择添加触发断点...,然后选择启用此断点的其他断点来设置触发断点。

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

会话结束时关闭只读文件

当附加到调试器时,可能会有内部或虚拟的源文件,这些文件不存在于磁盘上,并以只读方式打开。有一个新的设置,debug.closeReadonlyTabsOnEnd,它使得VS Code在调试会话结束时自动关闭所有打开的只读文件。

测试

更多运行测试的方法

按住 Alt 键并点击测试装饰时,现在会在可用的情况下以调试模式运行该测试。

现在在资源管理器视图中有了上下文菜单操作,可以用来运行文件中或文件夹中声明的所有测试。

为扩展作者定稿的 TestRunProfile.isDefault/onDidChangeDefault API

之前,TestRunProfile.isDefault 仅控制测试运行配置文件的初始默认状态,并且在此之后从未更改或读取。

在此版本中,用户更改其选择的配置文件将反映在TestRunProfile.isDefault属性中,并触发相应的TestRunProfile.onDidChangeDefault事件。同样,当扩展更改isDefault时,这将导致UI中选定的配置文件更新。

语言

想要将你复制的链接转换为Markdown链接吗?当你将URL粘贴到已选择文本的Markdown文件中时,VS Code现在会自动插入一个Markdown链接:

此功能由markdown.editor.pasteUrlAsFormattedLink.enabled设置控制。您可以更改它以自定义此行为:

  • smartWithSelection — 默认情况下。当您选择了文本并且不在特殊元素(如代码块)内时,此功能将启用。
  • smart — 与 smartWithSelection 相同,但不需要选择。
  • always — 始终将URL粘贴为Markdown链接
  • never — 禁用粘贴为Markdown链接。

粘贴值后,您始终可以通过使用粘贴控件以不同的方式切换粘贴内容。

配置Markdown的音频/视频片段

新的markdown.editor.filePaste.audioSnippetmarkdown.editor.filePaste.videoSnippet设置允许您自定义在拖放或粘贴时如何将音频和视频文件插入到Markdown中。代码片段可以使用以下变量:

  • ${src} — 音频/视频文件的解析路径。
  • ${title} — 用于音频/视频的标题。将自动为此变量创建一个片段占位符。

新的Less语法

之前的Less语法已被存档,VS Code现在使用来自Better-Less的语法来进行Less语法高亮显示。

新的Go语法

Go语法高亮语法已更改为使用Go Syntax,它比之前的语法更积极地维护。

远程开发

Remote Development extensions 允许您使用 Dev Container、通过 SSH 连接的远程机器或 Remote Tunnels,或者 Windows Subsystem for Linux (WSL) 作为全功能的开发环境。

亮点包括:

  • 在您的用户数据文件夹中创建一个devcontainer.json
  • 在使用Dockerfile时,在devcontainer.json中指定构建选项。

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

对扩展的贡献

GitHub Copilot

现在可以通过使用设置editor.inlineSuggest.fontFamily来更改内联建议的字体家族。

保存前确认内联聊天

我们强调负责任地使用人工智能,尤其是在涉及源代码时。因此,我们添加了一个新设置,要求用户在保存由Copilot生成的代码之前进行确认。此设置inlineChat.acceptedOrDiscardBeforeSave默认启用。

内联聊天保存同意消息。 主题: GitHub Light Default (在 vscode.dev 上预览)

当启用此设置时,文件保存将等待用户接受或丢弃任何待处理的内联聊天会话。这也适用于启用自动保存时,自动保存将暂时禁用,直到内联聊天结束。

按住说话模式

不久前,我们为VS Code添加了语音支持。安装VS Code Speech扩展,该扩展为聊天输入字段添加了语音转文本支持。

对于内联聊天,我们现在添加了“按住说话”,其工作原理如下:

  • 按下 Cmd+ICtrl+I 来触发内联聊天。
  • 按住按键并注意语音录制如何自动开始。
  • 释放按键以停止录制并将您的请求发送到Copilot。

主题: GitHub Light Default (在vscode.dev上预览)

这种新模式还附带一个设置,默认情况下是启用的,但可以通过inlineChat.holdToSpeech来禁用。

预览:内联聊天快速语音

除了“按住说话”之外,我们还在尝试一种更轻量级的替代UI来实现此功能。通过按下Cmd+KCtrl+K然后按住I来激活快速语音。按住I时,会显示一个更轻量级的录音UI。松开后,请求将被发送。

快速语音显示仅有一个麦克风指示器和录制的语音消息的文本。

内联聊天实时模式

过去的版本中有一个新的实验性内联聊天模式,称为live3。它提供了更流畅的流媒体体验和更易于理解的差异视图。现在这个模式已经成熟并取代了之前的live模式。默认模式仍然是livePreview,但我们鼓励用户尝试live模式。我们还在进行一项实验,以了解哪种模式效果最好。

AI修复的灯泡(闪烁)

要调用Copilot,您还可以使用编辑器中的灯泡指示器。进行选择或将光标移动到新行,选择灯泡,然后选择使用Copilot修改使用Copilot生成

如果没有其他代码操作,灯泡会显示为火花,并直接打开内联聊天。

从星形图标打开的内联聊天

#file 上下文变量

有一些上下文变量,您可以通过在聊天输入中输入#来使用,我们还添加了#file,让您可以将工作区中的指定文件作为上下文包含在聊天提示中。从输入中的建议控件中选择#file,然后从出现的快速选择中选择一个文件。

如果可能,文件的所有内容将被包含。如果内容太大无法放入上下文窗口,则将包含文件的概述,其中包括函数及其描述,但不包括实现。如果概述也太大,则该文件将不会成为提示的一部分。

Copilot聊天视图中的文件上下文示例。

聊天中的默认上下文

以前,我们默认会在您的聊天请求中包含来自活动代码编辑器的两种类型的上下文:

  1. 如果有文本选择,则选择将被包含
  2. 如果没有选择,则将包括活动编辑器的可见视口中的代码范围

我们发现,当你想问一个通用问题时,第二种类型可能会导致混淆,但LLM会将其解释为关于你编辑器中包含为上下文的代码的问题。我们正在试验默认情况下不在视口中包含代码,而只包含被选中的代码。

当然,你经常会想要询问你在编辑器中看到的代码,所以我们添加了一个新的上下文变量,#editor

Copilot Chat 视图中的编辑器上下文示例。

添加了“清除所有工作区聊天”命令

每次您使用+按钮开始新聊天时,您之前的聊天都会存储在您的工作区聊天历史记录中,您可以通过使用聊天视图标题中的时钟图标来访问。为了方便起见,我们添加了清除所有工作区聊天命令来清除您过去的所有聊天历史记录。

提交信息语言

生成git提交消息的代码现在使用github.copilot.chat.localeOverride设置来生成特定语言的提交消息。

请求私有仓库的额外权限

为了为私有仓库启用额外的工作区搜索功能,我们需要额外的权限。如果我们检测到尚未拥有这些权限,我们将在启动时请求它们。一旦授予,我们将安全地存储会话以供将来使用。

模态窗口要求对私有仓库进行额外认证。

Python

默认安装的Python调试器扩展

Python Debugger 扩展现在默认与 Python 扩展一起安装。

Python 调试器扩展旨在将调试功能与主 Python 扩展分离,以防止兼容性问题。这确保了即使 Python 扩展停止对旧版 Python(例如 Python 3.7)的支持,您也可以继续使用这些版本调试项目,而无需降级 Python 扩展。它还提供特定于平台的构建,确保您只接收与特定操作系统相关的组件,从而减少下载时间和不必要的开销。

这个新扩展复制了主Python扩展中的所有可用功能,甚至更多。

为确保您使用的是新的Python调试器扩展,请从您的launch.json配置文件中将"type": "python"替换为"type": "debugpy"。未来,Python扩展将不再提供调试支持,我们将把所有调试功能转移到Python调试器扩展中。

Python 解释器快速选择中的创建环境选项

您现在可以更方便地从Python解释器快速选择中创建Python环境。运行Python: 选择解释器命令,然后选择创建环境选项,为您的项目创建一个新的虚拟环境。

Python解释器快速选择中的创建环境选项。 主题: Catppuccin Mocha (在 vscode.dev 上预览)

工作区conda环境的改进显示

Python解释器Quick Pick现在显示工作区中conda环境的名称,以便更容易识别它们。

工作空间的conda环境名称显示在Python解释器的快速选择中。

支持多级pytest类

在使用多级pytest类时,顶级类现在会在测试资源管理器中显示。以前,只显示较低级别的类。

在测试资源管理器中显示的多级pytest类。 主题: Catppuccin Mocha (在 vscode.dev 上预览)

Jupyter

为扩展作者定稿的Jupyter内核执行API

Jupyter扩展的API用于针对Jupyter内核执行代码,现已最终确定。扩展可以使用该API针对内核执行代码。

API 使用示例可以在 Jupyter Kernel Execution Sample 中找到。

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

当扩展尝试访问Jupyter内核时,用户会被提示授予或撤销对内核的访问权限。 对Jupyter内核的访问权限由用户按扩展授予。这意味着用户可以授予扩展A的访问权限,并撤销扩展B的访问权限。

用户可以通过命令Jupyter: Manage Access To Jupyter Kernels来管理(授予/撤销)每个扩展对Jupyter内核的访问权限。

GitHub 拉取请求和问题

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

  • 解决当前检出PR的冲突。
  • 用于问题查询的 groupBy 属性。
  • 在已检出的PR中点击永久链接将在编辑器中打开文件。
  • 悬停在评论反应上会显示谁做出了反应。
  • 设置 "githubPullRequests.focusedMode": "multiDiff" 将在检出时打开包含PR中所有文件的多差异编辑器。

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

预览功能

TypeScript 5.4 beta 支持

我们现在支持TypeScript 5.4的测试版发布。查看TypeScript 5.4测试版博客文章迭代计划以了解此版本的详细信息。亮点包括:

  • AI驱动的重构的初步工作。
  • 一个新的NoInfer intrinsic,可以帮助库和类型作者阻止错误的类型推断。
  • 改进类型细化和类型检查。

要开始使用 TypeScript 5.4 测试版,只需安装 TypeScript Nightly 扩展。请分享反馈,并告诉我们您在使用 TypeScript 5.4 时是否遇到任何错误。

快速搜索改进

在版本1.82中,我们引入了快速访问文本搜索("快速搜索"),它允许用户从选择器中进行搜索。🔎

快速搜索现在具有以下功能:

  • 在活动选择时预览编辑器。在浏览时查看编辑器上下文中的结果。
  • 从快速搜索到搜索视图的导航更加简便。选择输入框旁边的按钮或结果,将结果转移到搜索视图。

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

提议的API

每个里程碑都伴随着新的提议API,扩展作者可以尝试它们。一如既往,我们希望得到您的反馈。以下是尝试提议API的步骤:

  1. 找到一个你想尝试的提案并将其名称添加到package.json#enabledApiProposals中。
  2. 使用最新的@vscode/dts并运行npx @vscode/dts dev。它会将相应的d.ts文件下载到您的工作区。
  3. 您现在可以针对提案进行编程。

你不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

测试覆盖率 API

这个里程碑,测试覆盖率的API和编辑器内体验已经达到了功能完备的状态。我们鼓励扩展作者在VS Code 1.87版本预计最终发布之前尝试它们并提供反馈。

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

聊天代理 API

我们一直在开发一个API,使扩展作者能够将他们自己的聊天代理贡献到VS Code的聊天视图中。我们对API进行了一些更改,包括:

  • 传递给聊天代理的历史上下文现在正确地表示了给定消息调用了哪个聊天代理和命令、历史消息中变量的值以及结果是什么。
  • ChatAgentTask 已被移除,现在可以在响应流中使用 ChatProgressMessage 来覆盖相同的场景。
  • 所有与“slashCommand”相关的术语已更名为“subCommand”。

如果你想尝试API,可以从我们的示例聊天代理扩展开始,并订阅问题 #199908以获取API的更新。

代码操作高亮API

对于诸如提取方法或移动到文件等重构操作,操作将应用于哪些代码并不总是清晰。这对于像TypeScript这样的语言尤其如此,它们试图智能地扩展用户的当前选择。

此API允许代码操作提供一个或多个可能适用的范围(Range[])。当用户悬停或通过代码操作列表箭头时,该范围将突出显示。

  • 对于重构,这个范围将是当前文件中将受到重构影响的代码。
  • 对于快速修复,您可以突出显示相关的诊断信息。这已经在从editor.codeActionWidget.includeNearbyQuickFixes调用的快速修复中完成。

问题报告者 API

对提议的API进行的小幅添加,允许同时使用IssueUriRequestHandlerIssueDataProvider

还对 vscode.commands.openIssueReporter 命令进行了改进,现在可以贡献额外的扩展数据并修改 GitHub 问题指向的 URL。

订阅问题 #197863以获取API和openIssueReporter命令的更新或更改。

评论反应反应器 API

CommentReaction 接口有一个新的 reactors 属性,以便扩展可以指示谁对评论做出了反应。这些 reactors 目前显示在评论反应的悬停中。

查看 issue #201131 以跟踪此API的进展。

已定稿的API

新的 workspace.saveworkspace.saveAs API

新定稿的API workspace.saveworkspace.saveAs 允许扩展触发保存编辑器的流程,既可以保存到其资源,也可以要求用户提供资源。

所有保存方法都会返回结果的Uri,如果操作被取消则返回undefined。未命名的文件将始终要求用户指定目标,除非已经关联了路径。

FileSystemProvider API 的只读消息

当使用registerFileSystemProvider注册FileSystemProvider时,可以将options设置为将整个文件系统标记为只读。现在,如果isReadonly选项设置为MarkdownString,那么当用户尝试在文件系统中编辑文件时,该消息将显示在编辑器中。

编辑器中显示的只读消息示例。

工程

日常维护

在十二月初,我们进行了年度整理工作。我们在所有仓库中实现了1891个问题的净减少。下图很好地展示了我们年度整理迭代的必要性和影响。

过去几年问题数量的图表

Markdown 语言服务 0.4 版本发布

Markdown Language Service 包为 VS Code 的内置 Markdown 支持提供了动力。新的 0.4 版本捆绑了过去半年我们做出的一些改进,其他工具和编辑器也可以从中受益。以下是一些亮点:

  • 启用Markdown中HTML片段的文档链接、引用和重命名功能。
  • 修复正则表达式中潜在的灾难性回溯问题。
  • 避免在完成时添加额外的编码。
  • 使用模糊匹配进行工作区符号搜索。
  • 修复了多个关于链接检测/验证的情况。

新的 localize2 函数使创建 ILocalizedString 更加容易

在 VS Code 的核心代码库中,我们使用一种名为 ILocalizedString 的类型来同时显示本地化字符串和英文字符串。如果你使用语言包并打开命令面板,你可能已经见过这种情况。

以前,我们必须这样写这些表达式:

const str = { value: localize('id', 'Hello World'), original: 'Hello World' };

现在可以表示如下:

const str = localize2('id', 'Hello World');

我们的本地化管道随后将捕获这些 localize2 的出现。

Electron 27 更新

在这个里程碑中,我们正在向稳定版用户推广Electron 27更新。此更新包含Chromium 118.0.5993.159和Node.js 18.17.1。我们要感谢所有在Insiders版本上自托管并提供早期反馈的用户。

Linux 最低要求更新

在这个里程碑中,我们更新了构建桌面客户端的工具链。从这个版本开始,VS Code 桌面版仅兼容基于 glibc 2.28 或更高版本以及 glibcxx 3.4.25 或更高版本的 Linux 发行版,例如 Debian 10、RHEL 8 或 Ubuntu 20.04。

如果您无法升级您的Linux发行版,推荐的替代方案是使用我们的web客户端。如果您想使用桌面版本,那么您可以下载VS Code 1.85版本。根据您的平台,确保禁用更新以保持在该版本。一个好的建议是使用便携模式进行安装设置。

显著的修复

感谢您

最后但同样重要的是,向VS Code的贡献者们表示衷心的感谢

问题跟踪

对我们问题跟踪的贡献:

拉取请求

vscode 的贡献:

vscode-flake8 的贡献:

vscode-hexeditor的贡献:

vscode-languageserver-node的贡献:

vscode-pull-request-github 的贡献:

vscode-vsce 的贡献:

language-server-protocol的贡献:

monaco-editor的贡献:

node-jsonc-parser的贡献: