2024年1月 (版本 1.86)

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

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

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

欢迎使用 Visual Studio Code 2024年1月发布版。此版本中有许多我们希望你会喜欢的更新,一些主要的亮点包括:

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

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

辅助功能

警报

屏幕阅读器和盲文用户现在拥有更多可配置的警报,例如触发调试断点时、当前行存在错误时等。这些可以通过以 accessibility.alert 开头的设置进行配置,或者通过 Help: List Alerts 命令进行浏览和配置。

使用“Hey Code”语音命令

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

可用选项包括:

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

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

状态栏中会出现一个小麦克风图标,提示 VS Code 正在使用麦克风识别“Hey Code”。

语音聊天会话完成后,VS Code 将再次监听“Hey Code”以便再次启动。

要使用此新功能,需要安装以下扩展:

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

工作台

恢复辅助窗口

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

树形视图中的粘性滚动

基于编辑器粘性滚动的成功,我们将此功能扩展到了所有树形视图,使用户能够更轻松地导航项目树。可以使用 workbench.tree.enableStickyScroll 设置启用或禁用树形视图的粘性滚动。

为确保粘性滚动不占用过多空间,它被限制为视图高度的 40%。此外,用户可以通过配置 workbench.tree.stickyScrollMaxItemCount(默认为 7)来自定义粘性元素的最大数量。如果树形视图支持该功能,且粘性元素多于显示数量,粘性滚动将合并最后的粘性元素。

为了获得更好的树形导航体验,你可以选择粘性元素以直接跳转到树中的该元素。或者,按下父元素的 V 形图标(chevron)以隐藏其所有子元素。此外,启用粘性滚动后,访问复选框和操作项会更加容易。

按窗口配置缩放级别

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

我们认为使用这些命令更多是一种临时的操作(例如在进行演示时),因此应该仅应用于调用它们的窗口。

如本例所示,只有活动窗口的缩放级别发生了变化,而另一个窗口没有变化

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

Zoom indicator and controls in the Status Bar.

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

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

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

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

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

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

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

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

如你所见,编辑后的 Markdown 文件立即保存,而 TypeScript 文件保持未保存(dirty)状态。

出错时禁用自动保存

新的 files.autoSaveWhenNoErrors 设置允许你在通常会执行自动保存时,如果文件中存在错误标记,则禁用自动保存。

当你有外部工具监视文件更改时,这非常有用,因为你希望避免这些工具对包含错误的文件进行操作。

仅针对工作区文件自动保存

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

允许按扩展禁用通知

我们现在提供了更细粒度的控制来禁用来自扩展的通知。通过通知弹出框,你可以禁用该扩展的通知:

Turn off notifications for an extension.

在通知中心,有一个集中的位置来管理所有触发过通知的扩展的通知启用状态:

Manage notifications for extensions.

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

允许交换左右差异编辑器

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

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

从命令行 stdin 读取时不强制执行 --wait

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

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

到目前为止,这还隐含了 --wait 标志,这意味着在你关闭编辑器窗口或彻底退出 VS Code 之前,你无法回到终端提示符。在本次里程碑中,从 stdin 读取时我们不再强制执行 --wait,因此你可以立即回到终端提示符。

注意:若要恢复之前的行为,只需在命令行调用中添加 --wait 即可。

支持配合原生标题栏使用自定义标题栏

我们引入了 window.customTitleBarVisibility 设置,允许在即使使用原生标题栏时也显示自定义标题栏。这对于喜欢原生标签页的 macOS 用户尤其有利。通过这个新设置,原生标题栏用户现在可以访问自定义标题栏的功能,例如:

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

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

The 'Window: Custom Title Bar Visibility' setting in the Settings editor.

强制执行系统色彩主题的新设置

新设置 window.systemColorTheme 允许你显式覆盖应用于 VS Code 原生元素(如 macOS 上的菜单或对话框)的系统色彩主题。该设置支持以下值:

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

以下是这在 macOS 上下文菜单中的应用示例,上部显示 light,下部显示 dark

Showing both 'light' and 'dark' system theme applied to a context menu.

允许不经确认关闭无标题工作区

新设置 window.confirmSaveUntitledWorkspace 允许你禁用关闭包含无标题工作区的窗口时的确认对话框。对话框中现在还有一个复选框可以禁用显示。默认启用 window.confirmSaveUntitledWorkspace 设置以保持当前行为。

Untitled workspace confirmation dialog showing checkbox to always discard changes.

注意:我们的文档中了解有关无标题工作区的更多信息。

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

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

在新窗口中打开输出面板

输出面板现在在面板标题菜单中有一个 Open Output in New Window 操作,以便在单独的窗口中查看输出面板。

从 CLI 更新扩展

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

快速选择中的悬浮提示现在使用自定义悬浮窗

我们将快速选择(Quick Pick)中的几个悬浮提示从原生渲染迁移到了自定义悬浮窗。这允许更丰富的渲染效果,并提高整个产品的一致性。

Quick Pick hover rendered with custom hover instead of native.

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

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

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

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

多文件差异编辑器仍在开发中,因此请期待在未来的版本中看到更多改进和错误修复。

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

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

当你设置好 github.dev 后,可以在 GitHub 上的拉取请求中按下 . 键,github.dev 将通过多文件差异编辑器打开,供你查看更改。

编辑器

粘贴 text/html 内容

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

Using 'Paste As' to paste HTML content.

例如,当你从网页复制内容时,你可以使用此功能粘贴内容的 HTML,而不是将其作为纯文本粘贴。

源代码管理

提交输入自定义

本次里程碑我们添加了一个新设置 scm.inputMinLineCount,用于控制提交输入框的初始高度。控制提交输入框最大行数的设置已从 scm.inputMaxLines 重命名为 scm.inputMaxLineCount,使其符合类似设置的命名规范。

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

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

源代码控制仓库视图改进

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

源代码控制仓库视图可能会因为扩展贡献的操作而变得拥挤。为了解决这个问题,我们增加了隐藏贡献操作的功能,只需右键单击该操作并选择 Hide(隐藏)。隐藏的操作会被移动到 ... 菜单中。除 CheckoutSync 之外的所有操作都可以隐藏。

传入/传出更改改进

我们继续完善源代码控制视图中的传入/传出更改部分。本次里程碑中,我们进行了更改,使得 Incoming changes(传入更改)节点仅在当前分支具有跟踪的远程分支时才显示。

我们在 Incoming changes 节点中添加了 Fetch(获取)和 Pull(拉取)操作,并在 Outgoing changes(传出更改)节点中添加了 Push(推送)操作。

我们添加了查看每个单独提交的操作,并且所有传入/传出更改都会利用多文件差异编辑器进行展示。

用户现在可以使用新设置 scm.showChangesSummary 来隐藏 All Changes 条目。

合并标签的功能

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

查看储藏(Stash)命令

我们添加了一个新命令 Git: View Stash...,它允许用户在多文件差异编辑器中查看仓库中的任何储藏内容。查看 git 储藏时,编辑器标题菜单将包含应用/弹出(apply/pop)或删除(drop)储藏的操作。

使用 SSH 密钥进行提交签名

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

Notebook

悬浮窗口支持

笔记本编辑器现在可以在悬浮窗口中打开。你可以将笔记本标签页拖出主窗口以在新窗口中打开它,或使用 View: Move Editor into New Window 命令。

内置变量视图

我们在“运行和调试”视图中添加了一个实验性的变量视图,如果扩展提供了变量,则该视图可用于查看笔记本内核中的变量。可以使用以下设置启用此功能:

"notebook.experimental.variablesView": true

笔记本粘性滚动

笔记本编辑器的粘性滚动功能经过了大幅润色,使其样式与工作区的其余部分保持一致,并为每个 Markdown 元素添加了折叠控件。

终端

选中项下方显示背景

启用 GPU 加速后,具有非默认背景颜色的单元格现在将呈现在常规选中颜色“下方”。

Cell background colors in the terminal are now retained, even when selected.

通过鼠标滚轮缩放终端

现在,在按住 Ctrl 的同时使用鼠标滚轮可以放大和缩小终端,前提是启用了此设置:

"terminal.integrated.mouseWheelZoom": true

多行粘贴警告改进

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

  • auto:之前的 true 行为
  • always:始终显示警告
  • never:从不显示警告

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

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

终端语音命令

新的 Terminal: Start Terminal VoiceTerminal: Stop Terminal Voice 命令可在终端中启动语音转文字会话。

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

任务

路径分隔符变量简写

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

调试

触发断点

你现在可以设置在触发另一个断点后自动启用的断点。例如,这在诊断仅在某些前提条件之后才发生的代码故障案例时非常有用。触发式断点适用于所有语言,条件断点也可以用作触发器。

可以通过右键单击字形边距(glyph margin),选择 Add Triggered Breakpoint...,然后选择哪个其他断点启用此断点来设置触发式断点。

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

会话结束时关闭只读文件

连接到调试器时,可能会有一些不存在于磁盘上的内部或虚拟源文件作为只读文件打开。有一个新设置 debug.closeReadonlyTabsOnEnd,它会让 VS Code 在调试会话结束时自动关闭来自该会话的所有已打开只读文件。

测试

更多运行测试的方式

在点击测试装饰时按住 Alt,现在可以在调试模式下运行该测试(如果可用)。

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

为扩展开发者敲定了 TestRunProfile.isDefault/onDidChangeDefault API

以前,TestRunProfile.isDefault 仅控制测试运行配置文件的初始默认状态,之后就再未更改或读取过。

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

语言

想把你复制的链接变成 Markdown 链接吗?当你在选中文字的情况下向 Markdown 文件粘贴 URL 时,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,它比之前的语法维护更活跃。

远程开发

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

亮点包括:

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

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

对扩展的贡献

GitHub Copilot

现在可以通过设置 editor.inlineSuggest.fontFamily 来更改内联建议的字体系列。

保存前确认内联聊天

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

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

启用该设置后,文件保存将等待用户接受(Accept)或放弃(Discard)任何待处理的内联聊天会话。这也适用于启用了自动保存的情况,自动保存将暂时禁用,直到内联聊天结束。

“按住说话”模式

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

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

  • Cmd+ICtrl+I 触发内联聊天。
  • 按住按键不放,你会注意到语音录制自动开始。
  • 释放按键停止录制并将你的请求发送给 Copilot。

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

这种新模式也有一个设置,默认启用,但可以通过 inlineChat.holdToSpeech 禁用。

预览:内联聊天快速语音

除了“按住说话”之外,我们还在尝试这种功能的更轻量的替代 UI。通过按 Cmd+KCtrl+K 然后按住 I 来激活快速语音(Quick Voice)。按住 I 时,会显示更轻量级的录制 UI。释放后发送请求。

Quick Voice showing only a microphone indicator and the text of the recorded voice message.

内联聊天实时模式 (Live Mode)

上一个版本有一个新的实验性内联聊天模式,称为 live3。它提供了更流畅的流式传输体验和更易理解的差异视图。它现在已经毕业并取代了以前的 live 模式。默认设置仍然是 livePreview,但我们鼓励用户尝试 live 模式。我们也正在通过实验来了解哪种模式效果最好。

用于 AI 修复的灯泡图标(火花)

要调用 Copilot,你还可以使用编辑器中的灯泡图标。选择一段文本或将光标移动到新行,选择灯泡,然后选择 Modify with CopilotGenerate with Copilot

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

Inline chat opened from the sparkle.

#file 上下文变量

在聊天输入框中输入 # 时,你已经可以使用一些上下文变量,我们添加了 #file,让你可以在聊天提示中包含工作区中的指定文件作为上下文。从输入框的建议控件中挑选 #file,然后从出现的“快速选择”中选择一个文件。

如果可能,将包含文件的完整内容。如果内容太大而无法放入上下文窗口,则将包含文件的大纲(包括函数及其描述,但不包括实现)。如果大纲也太大,则该文件将不作为提示的一部分。

File context example in the Copilot Chat View.

聊天中的默认上下文

以前,默认情况下我们会在你的聊天请求中包含活动代码编辑器中的两类上下文:

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

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

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

Editor context example in the Copilot Chat View.

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

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

提交消息语言

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

请求私有仓库的其他权限

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

Modal window asking for additional authentication for a private repository.

Python

默认安装 Python Debugger 扩展

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

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

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

要确保你正在使用新的 Python Debugger 扩展,请将 launch.json 配置文件中的 "type": "python" 替换为 "type": "debugpy"。将来,Python 扩展将不再提供调试支持,我们将把所有调试功能过渡到 Python Debugger 扩展。

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

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

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

改进了工作区 conda 环境的显示

Python 解释器快速选择现在会显示位于工作区中的 conda 环境名称,以便更容易识别它们。

Workspace conda environment names displayed in the Python interpreter Quick Pick.

支持多层级 pytest 类

使用多层级 pytest 类时,顶层类现在会显示在测试资源管理器中。以前,仅显示底层类。

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

Jupyter

为扩展开发者敲定了 Jupyter 内核执行 API

Jupyter 扩展用于针对 Jupyter 内核执行代码的 API 已敲定。扩展可以使用该 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)解决冲突。
  • 问题查询(issue queries)的 groupBy 属性。
  • 在检出的 PR 中点击永久链接(permalinks)将在编辑器中打开该文件。
  • 将鼠标悬停在评论回应(comment reactions)上可显示是谁做出的回应。
  • 设置 "githubPullRequests.focusedMode": "multiDiff" 将在检出时打开多差异编辑器,显示 PR 中的所有文件。

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

预览功能

TypeScript 5.4 Beta 支持

我们现在支持 TypeScript 5.4 的 Beta 版本。查看 TypeScript 5.4 Beta 博客文章迭代计划以获取此版本的详细信息。亮点包括:

要开始使用 TypeScript 5.4 Beta,只需安装 TypeScript Nightly 扩展即可。请分享反馈,并告诉我们你是否在 TypeScript 5.4 中遇到了任何错误。

快速搜索改进

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

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

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

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

提议的 API

每个里程碑都会带来新的提议 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 太长无法在此列出,但我们认为它非常直观,并欢迎你在 issue #123713 中对该提案发表意见。

聊天代理 API

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

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

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

代码操作亮点(Code Action Highlights)API

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

此 API 允许代码操作提供一个或可能有多个它将应用于的范围(Range[])。当用户悬停或使用方向键浏览代码操作列表时,该范围将高亮显示。

  • 对于重构,该范围将是当前文件中受重构影响的代码。
  • 对于快速修复(Quick Fixes),你可以高亮显示相关的诊断信息。这在从 editor.codeActionWidget.includeNearbyQuickFixes 调用的快速修复中已经实现。

问题报告器 API

对提议的 API 进行了细微补充,允许 IssueUriRequestHandlerIssueDataProvider 同时使用。

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

订阅 issue #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,则当用户尝试编辑文件系统中的文件时,编辑器中将显示该消息。

Example of readonly message showing in the editor.

工程

内务管理

12 月初,我们进行了年度内务清理(housekeeping)。我们的各个仓库累计净减少了 1891 个问题。下图很好地说明了我们年度清理迭代的必要性和影响。

Chart of issue counts over the last years

Markdown Language Service 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 发行版,推荐的替代方案是使用我们的网页版客户端。如果你想使用桌面版本,可以下载 VS Code 1.85 版本。根据你的平台,确保禁用更新以保留在该版本。一个好的建议是使用便携模式 (Portable Mode)进行安装设置。

值得注意的修复

感谢

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

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-flake8 的贡献

vscode-hexeditor 的贡献

vscode-languageserver-node 的贡献

vscode-pull-request-github 的贡献

vscode-vsce 的贡献

language-server-protocol 的贡献

monaco-editor 的贡献

node-jsonc-parser 的贡献

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