在 VS Code 中试用

一月 2024 (版本 1.86)

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

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

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

欢迎阅读 Visual Studio Code 2024 年 1 月版更新。此版本带来了许多我们希望您会喜欢的新功能,主要亮点包括

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

Insiders: 想尽快尝试新功能吗?您可以下载每夜构建的 Insiders 版本,并在最新更新可用时立即尝试。

可访问性

警报

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

使用“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 形图标以隐藏其所有子元素。此外,启用粘性滚动后,访问复选框和操作项也更容易。

每窗口配置缩放级别

新设置 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 文件仍处于未保存状态。

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

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

当您有外部工具监视文件更改时,这会很有用,您希望避免这些工具对包含错误的已更改文件进行操作。

仅自动保存工作区文件

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

允许按扩展禁用通知

我们现在提供更精细的控制,用于禁用来自扩展的通知。从通知 Toast 中,您可以禁用该扩展的通知

Turn off notifications for an extension.

在通知中心,有一个中心位置可以管理已触发通知的所有扩展的通知启用状态

Manage notifications for extensions.

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

允许交换左右 Diff 编辑器

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

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

从命令行 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.

允许在未保存的 Workspace 关闭时不确认

新设置 window.confirmSaveUntitledWorkspace 允许您禁用在关闭带有未保存的 workspace 的窗口时显示确认对话框。对话框上现在还有一个复选框可禁用显示它。为了保持当前行为,默认启用 window.confirmSaveUntitledWorkspace 设置。

Untitled workspace confirmation dialog showing checkbox to always discard changes.

注意:我们的文档中了解有关未保存的 workspace 的更多信息。

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

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

在新窗口中打开输出面板

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

从 CLI 更新扩展

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

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

我们已将快速选择中的多个悬停移至使用自定义悬停而不是原生渲染。这使得渲染更丰富,产品更具一致性。

Quick Pick hover rendered with custom hover instead of native.

在 Diff 编辑器中查看多个文件

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

当前,多 Diff 编辑器可用于查看本地更改、暂存更改、入站/出站更改、存储和拉取请求中的更改。可以通过选择各种新的查看更改操作打开它,这些操作可以通过多文件 Diff 图标识别。

当从源代码管理视图打开 Diff 编辑器时,它会随着文件更改或暂存而动态更新视图。

多 Diff 编辑器仍在开发中,因此预计在未来的版本中会有更多改进和 bug 修复。

GitHub 拉取请求扩展中的多文件差异

安装 GitHub 拉取请求和问题 扩展后,您可以设置 "githubPullRequests.focusedMode": "multiDiff" 以在打开拉取请求时自动打开多文件 Diff 编辑器。

当您为 github.dev 设置好后,您可以在 GitHub 上的拉取请求上按下 .github.dev 将打开多文件 Diff 编辑器以查看更改。

编辑器

粘贴 text/html 内容

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

Using 'Paste As' to paste HTML content.

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

源代码管理

提交输入自定义

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

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

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

源代码管理存储库视图改进

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

源代码管理存储库视图可能会因扩展贡献的操作而变得拥挤。为了解决这个问题,我们添加了通过右键单击操作并选择隐藏来隐藏贡献的操作的功能。隐藏的操作会移到...菜单中。除签出同步之外的所有操作都可以隐藏。

入站/出站更改改进

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

我们已将获取拉取操作添加到入站更改节点,并将推送操作添加到出站更改节点。

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

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

合并标签的能力

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

查看 Stash 命令

我们添加了一个新命令,Git: 查看 Stash...,该命令使用户可以在多文件 Diff 编辑器中查看存储库中的任何 Stash。查看 Git Stash 时,编辑器标题菜单中将包含应用/弹出或丢弃 Stash 的操作。

使用 SSH 密钥进行提交签名

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

Notebooks

浮动窗口支持

Notebook 编辑器现在可以在浮动窗口中打开。您可以将 Notebook 选项卡拖出主窗口以在新窗口中打开它,或使用视图: 将编辑器移至新窗口命令。

内置变量视图

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

"notebook.experimental.variablesView": true

Notebook 粘性滚动

Notebook 编辑器的粘性滚动功能已得到显着完善,以使其样式与工作台的其余部分保持一致,并为每个 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 处于活动状态时,除了启用带括号粘贴模式或行以 \n 字符结尾外,它始终会显示警告。此设置现在接受以下选项之一的字符串

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

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

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

终端语音命令

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

要使用此新功能,请安装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,它比以前的语法维护更活跃。

远程开发

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

主要亮点包括

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

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

对扩展的贡献

GitHub Copilot

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

保存前确认内联聊天

我们强调负责任地使用 AI,尤其是在源代码方面。因此,我们添加了一个新设置,在保存由 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。松开后,将发送请求。

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

内联聊天实时模式

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

用于 AI 修复的灯泡 (闪光)

要调用 Copilot,您还可以使用编辑器中的灯泡指示器。进行选择或将光标移至新行,选择灯泡,然后选择使用 Copilot 修改使用 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.

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

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

提交消息语言

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

请求对私有存储库的额外权限

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

Modal window asking for additional authentication for a private repository.

Python

默认安装 Python 调试器扩展

Python 调试器 扩展现在与 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 解释器快速选择现在会显示位于工作区中的 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: 管理对 Jupyter 内核的访问按扩展管理(授予/撤销)对 Jupyter 内核的访问权限。

GitHub 拉取请求和问题

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

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

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

预览功能

支持 TypeScript 5.4 beta

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

  • AI 支持的代码重构的初步工作。
  • 新的 NoInfer 内在类型,可以帮助库和类型作者阻止不正确的类型推断。
  • 类型细化和类型检查方面的改进。

要开始使用 TypeScript 5.4 beta,只需安装 TypeScript Nightly extension。请分享反馈,如果您在使用 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 和编辑器内体验已达到功能完善状态。我们鼓励扩展作者在这些 API 和体验预计在 VS Code 1.87 版本中最终确定之前试用它们并提供反馈。

尽管 API 内容过长无法在此处全部列出,但我们认为它相当直观,欢迎您在 issue #123713 中提供关于该提议的意见。

聊天代理 API

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

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

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

代码操作高亮 API

对于提取方法或移动到文件等重构,操作将应用于哪些代码并不总是清楚。对于 TypeScript 等试图智能扩展用户当前选择范围的语言来说尤其如此。

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

  • 对于重构,此范围将是当前文件中受重构影响的代码。
  • 对于快速修复,您可以突出显示相关的诊断信息。通过 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 月初,我们进行了年度内务整理。我们在所有代码仓库中实现了 1891 个问题的净减少。下图很好地说明了我们年度内务整理迭代的必要性和影响。

Chart of issue counts over the last years

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 发行版,建议的替代方案是使用我们的网页客户端。如果您想使用桌面版本,则可以下载 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 的贡献