在 VS Code 中试用

2023 年 8 月 (版本 1.82)

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

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

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

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


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

如果您想在线阅读这些发布说明,请访问 Updates,网址为 code.visualstudio.com

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

辅助功能

窗口标题中的聚焦视图

window.title 设置现在有一个 ${focusedView} 变量,如果当前聚焦了某个视图,该变量将在标题栏中显示该视图的名称。

内嵌补全的 Accessible View

内嵌补全,例如来自 GitHub Copilot 扩展的内嵌补全,现在可以在 Accessible View 中进行检查。

改进了工作台导航的一致性

上一个迭代中,我们使用 ⌘↓ (Windows、Linux Ctrl+Down)⌘↑ (Windows、Linux Ctrl+Up) 统一了在扩展视图、键盘快捷方式编辑器等组件中,在输入控件(例如,搜索或筛选输入)及其结果之间导航的体验。此功能已扩展到设置编辑器和 GitHub Pull Request 评论控件。

这也适用于在终端和终端 Accessible Buffer 之间导航。

更新的终端 Accessible Buffer 键绑定

以前,终端 Accessible Buffer 是通过 Shift+Tab 打开的。这与某些 shell 中现有的键盘快捷方式冲突。因此,我们删除了该键绑定,并改用 ⌘↓ (Windows、Linux Ctrl+Down)⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2),以与其他 Accessible View 对齐。

Accessible View 中的操作

Accessible View 中的操作允许屏幕阅读器用户对于特定功能导航到 next/previous,禁用辅助功能冗余等。这些操作存在于视图上的便捷工具栏中,以便可以保留当前上下文。

Accessible View 中的转到符号

辅助功能帮助对话框和一些 Accessible View 现在具有转到符号 (⇧⌘O (Windows、Linux Ctrl+Shift+O)) 操作,以允许更快速地导航内容。

运行后聚焦终端 Accessible Buffer

终端现在有一个 terminal.integrated.focusAfterRun 设置,用户可以指定在调用终端:在活动终端中运行选定文本时,终端的 Accessible Buffer (accessible-buffer)、终端本身 (terminal) 还是什么都不聚焦 (none)。

工作台

内置端口转发

VS Code 现在具有内置的端口转发系统。此功能允许您通过互联网将本地运行的服务共享给其他人或其他设备。要使用它,请在面板区域中的端口视图中选择转发端口按钮(端口:聚焦端口视图)。

Forward a Port button displayed in the Ports view

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

端口转发用户指南中阅读更多相关信息。

命令中心现在默认开启

命令中心是几个月前推出的,它是快速发现和与 VS Code 交互的一种方式。您可以将其用作在命令面板中查找命令、运行任务和其他快速体验的启动器。我们一直在运行一个在标题栏中显示命令中心的实验,并获得了积极的反馈,因此我们觉得是时候默认启用它了。

这里有一个使用命令中心以及后退和前进按钮的视频。

我们看到命令中心具有巨大的潜力,可以成为在 VS Code 中查找任何内容的中心,因此请期待未来更多的改进!

注意:如果您不想看到命令中心,可以右键单击标题栏,然后在下拉菜单中取消选中“命令中心”条目来将其隐藏。

控制置顶编辑器如何通过键盘或鼠标关闭

有一个新设置 workbench.editor.preventPinnedEditorClose,用于更精细地控制置顶选项卡如何响应键盘快捷方式或鼠标中键单击来关闭编辑器。默认情况下,置顶选项卡不会因键盘或鼠标交互而关闭(默认值 keyboardAndMouse)。您可以相应地更改此设置

  • keyboardAndMouse - 置顶选项卡不会因键盘快捷方式或鼠标中键单击而关闭(自 1.82.x 以来的默认设置)。
  • keyboard - 置顶选项卡不会因键盘快捷方式而关闭(直到 1.81.x 的默认设置)。
  • mouse - 置顶选项卡不会因鼠标中键单击而关闭。
  • never - 置顶选项卡始终会因键盘快捷方式或鼠标中键单击而关闭。

状态栏的新增和更新的可主题化颜色

状态栏已经为其项提供了许多可主题化的颜色。现在有更多颜色可以用于主题化悬停前景色和背景色

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

以下两个颜色名称已更新,因为该颜色不再适用于整个状态栏,而仅适用于远程指示器

  • statusBar.offlineBackground 重命名为 statusBarItem.offlineBackground
  • statusBar.offlineForeground 重命名为 statusBarItem.offlineForeground

编辑器

粘滞滚动

本次迭代中,粘滞滚动 UI 进行了多项改进,可在编辑器顶部使用(视图:切换粘滞滚动)。

  • 现在默认情况下,当编辑器水平滚动条滚动时,粘滞滚动也会水平滚动。可以通过禁用 editor.stickyScroll.scrollWithEditor 来关闭此功能。
  • 按住 Shift 键并悬停在粘滞滚动行上,可以查看作用域的最后一行。按住 Shift 键单击某一行,会将编辑器光标移动到该作用域的最后一行。
  • 粘滞滚动边槽已添加了折叠图标。这些图标的渲染遵循控制编辑器边槽中折叠图标渲染的设置 editor.showFoldingControls

保存时排序 JSON

现在可以在保存时对 JSON 或 JSONC(带注释的 JSON)文件进行排序。使用设置 json.sortOnSave.enable 启用此功能。

通过键盘导航代码操作和快速修复

您现在可以通过键入与可用菜单选项相对应的任何关键字或字母来快速浏览快速修复、代码操作或源代码管理菜单(它们使用“操作”控件)。筛选器使用模糊匹配,搜索不仅限于第一个字母或前缀,还包括整个标签文本。

Example of searching "Surround" or "Read" in the Refactor menu

差异编辑器

在此版本中,我们默认启用了新的差异编辑器。我们还改进了一些新的差异编辑器功能,并修复了许多错误。

移动代码检测

在本次迭代中,我们完善了移动代码检测功能。可以使用 "diffEditor.experimental.showMoves": true 或在差异编辑器上下文菜单中启用它。启用后,将检测同一文件中从一个位置移动到另一个位置的代码块,并绘制箭头指示代码块移动到了哪里。

代码移动在轻微修改后也会被检测到。可以使用比较按钮比较移动前后的代码块。

Moved code detection demo

折叠未更改的代码头部

使用 "diffEditor.hideUnchangedRegions.enabled": true 或在编辑器上下文菜单中选择地图图标以启用折叠未更改的代码块。

在此版本中,现在折叠的代码块有了面包屑,以指示折叠了哪些符号。单击面包屑项将显示选定的项

Collapsed code headers

动态布局

如果差异编辑器的宽度太小,编辑器会自动切换到内联视图。如果编辑器再次足够宽,则恢复之前的布局。将 "diffEditor.useInlineViewWhenSpaceIsLimited": false 设置为 false 可禁用此行为。

按钮切换状态

我们更新了差异编辑器中按钮的切换样式,使其更醒目。

旧的切换样式(未切换和已切换),未切换按钮变暗

Old, untoggled dim buttons, Old, toggled

新的切换样式(未切换和已切换),已切换背景带阴影

New, untoggled visible buttons, New, toggled with shaded background

终端

控制终端在启动时如何恢复

新设置 terminal.integrated.hideOnStartup 控制应用程序启动时是否自动创建终端。可用选项如下

  • never(默认):启动时从不隐藏终端视图。
  • whenEmpty:仅在没有恢复持久会话时隐藏终端。
  • always:即使恢复了持久会话,也始终隐藏终端。

禁用括号粘贴模式

括号粘贴模式是终端中的一个功能,它使用特殊序列包装粘贴的文本,以便 shell 可以使用该信息。启用此功能的 shell 应正确支持此功能,但有时可能会出现问题,此时粘贴时可能会意外看到类似 [201~ 的文本。现在可以显式禁用此功能,即使 shell 请求启用此功能,该功能也会被禁用。

运行后终端聚焦设置

终端现在有一个 terminal.integrated.focusAfterRun 设置,用户可以指定在调用终端:在活动终端中运行选定文本时,终端是否应聚焦。其他选项是聚焦终端的 Accessible Buffer (accessible-buffer) 或什么都不聚焦 (none)。

可调整大小的查找

终端的查找控件现在可以使用左侧的分隔条进行调整大小,类似于编辑器

Hover the left border of the Find control to see the resize handle

悬停或拖动分隔条以调整查找控件大小时,分隔条会突出显示。

禁用 GPU 加速时渲染速度更快

“DOM 渲染器”在禁用 GPU 加速时使用,其性能已显著提高,这得益于组件的重写。重写侧重于减少使用的 DOM 元素数量,并且终端越大,节省的效果越好。

在具有 117 列和 36 行的终端上测试典型的渲染调用时,之前需要约 10 毫秒,之后需要约 2 毫秒。在测试机上将终端大小增加到 300x100,记录的渲染时间之前约为 25-35 毫秒,之后约为 4-5 毫秒。

更好的选择渲染

关闭 GPU 加速时,选择渲染现在与 webgl 渲染器相同,并且所有背景都更改为主题的选择背景色,以确保良好的对比度和一致性。

The background when selected will now be the same as the rest of the selection

尊重变暗文本的半数最小对比度

最小对比度功能允许终端更精细地控制终端中的前景色,以确保它们以特定的对比度显示。过去,此功能的一个问题是变暗的文本 (CSI 2 m) 也会遵循对比度要求,这意味着它可能与普通文本一样醒目。PowerShell 的自动补全幽灵文本就是一个不友好的例子。

变暗的文本现在将具有半数的对比度要求。虽然这意味着文本可能不再满足最小对比度要求,但它现在显然与普通文本不同,这更重要。

Now dimmed text should be visually different for typical minimum contrast ratios

配置未聚焦时的光标外观

终端在未聚焦时的光标外观现在可以使用 terminal.integrated.cursorStyleInactive 进行配置。这支持现有 terminal.integrated.cursorStyle 的所有样式,外加 outline(默认)和 none

The new inactive cursor styles are underline, block, line, outline and none

打开检测到的链接命令 (⇧⌘G (Windows、Linux Ctrl+Shift+G)) 的行为已更改,以在保持高性能的同时,使其更轻松地搜索整个终端缓冲区以查找链接。以前,它只提供视区及其上方少量内容的链接,并在末尾有一个繁琐的显示更多链接按钮来搜索缓冲区的其余部分

Previously the last entry must have been selected to search everything

现在,视区中的链接会立即呈现,以便 Quick Pick 可以尽快显示

Now initial results are restricted to the initial viewport

一旦 Quick Pick 显示,将在后台检测终端缓冲区其余部分的链接。当键入进行筛选时,VS Code 会等待所有结果并将其包含在筛选结果中

Results from the entire buffer are included in the search when filtering begins

请注意,CodeQL.yml 在键入筛选条件之前未包含在内,因为它在视区之外。

终端现在支持检测以下 GNU 风格的链接格式

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

调试

JavaScript 调试器

WebAssembly 调试

JavaScript 调试器现在将自动反编译 WebAssembly 模块到 WebAssembly Text Format,并允许您在反编译的模块中单步调试和设置断点。

Breakpoint hit during a WebAssembly debug session

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

源映射加载改进

在此版本中,我们对源映射的加载方式进行了许多改进

  • 在某些常见情况下,例如使用 tsc 命令行编译的应用程序中,源映射加载速度提高了 3-5 倍。
  • 现在支持来自 Vite 开发服务器的热模块重载。
  • 源映射现在可以从经过身份验证的端点自动加载。

测试

改进的状态区域

测试视图中筛选框下方的“状态区域”现在更加简洁,并提供一个可点击的操作来重新运行最近运行的测试。按住 Alt 并单击重新运行按钮将改为调试这些测试。

Testing view status area displaying test result count, test timing, and rerun button

链接检测现在在显示测试输出的终端中运行。文件名、路径和 URI 现在可以点击。

改进了测试相关输出的体验

测试扩展可以将控制台输出与特定的测试或位置关联起来。以前,通过这种方式创建的每个输出都会在测试结果视图中显示为一个单独的项,并在选中时在文本编辑器中打开。

现在,它们显示在一个适当的终端中,并且导航到输出消息会在该测试的输出终端中打开,并选中该消息。

笔记本

复制单元格输出

单元格输出菜单现在包含一个选项,用于将输出复制到系统剪贴板。对于图像输出,也可以通过右键单击图像并选择复制输出命令来使用上下文菜单。

主题:Bearded Theme feat. Gold D Raynh(在 vscode.dev 上预览)

语言

TypeScript 5.2

VS Code 现在附带 TypeScript 5.2.2。此重大更新带来了新的 TypeScript 语言功能、更好的性能以及许多重要的改进和错误修复。您可以在TypeScript 博客上阅读有关 TypeScript 5.2 的信息。

移动到文件重构

JavaScript 和 TypeScript 的移动到文件重构允许您将类、函数或常量移动到现有文件中。这还将自动更新对符号的所有引用,并根据需要更新导入

当您选择移动到文件时,VS Code 会显示当前 TypeScript 或 JavaScript 项目中的所有文件列表。您可以开始键入以快速筛选到您想要的文件。

或者,您可以使用选择现有文件...通过常规文件选择器选择文件,或使用输入新文件路径...指定应创建的新文件。

内联变量重构

JavaScript 和 TypeScript 的内联变量重构将变量的所有出现替换为其常量值。

当重写现有代码时,此重构通常最有用。例如,当一个变量被声明后立即返回时,您可以使用内联变量删除多余的声明并直接返回值

function add(a, b) {
  const result = a + b;
  return result;
}

result 运行 inline variable

function add(a, b) {
  return a + b;
}

可点击的参数提示

您现在可以单击参数提示以快速跳转到参数声明。启用内嵌提示后,使用

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

按住 Ctrl/Cmd 并单击参数名称以跳转到该参数的声明

我们计划在即将发布的版本中为其他 JavaScript 和 TypeScript 内嵌提示启用转到定义

远程开发

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

亮点包括

  • 改进的远程 - 隧道连接可靠性。
  • 新增在 WSL 中安装 Docker 命令。
  • 预构建开发容器指导指南。

您可以在远程开发发布说明中了解新的扩展功能和 bug 修复。

对扩展的贡献

GitHub Copilot

从聊天视图创建工作区

现在,您可以在 GitHub Copilot Chat 扩展的稳定版本中使用 /createWorkspace 从自然语言描述创建工作区。

我们还做了以下改进

  1. 提议的工作区现在在聊天响应中以文件树的形式呈现。
  2. 您可以单击文件以在编辑器中打开只读预览。
  3. 如果 Copilot 的初始提议不够准确,您可以提出后续问题以帮助 Copilot 迭代和改进。

在未命名编辑器中使用内嵌聊天开始编码

打开未命名文本编辑器时,现在有一个提示,说明如何通过 ⌘I (Windows、Linux Ctrl+I) 启动内嵌聊天会话。屏幕阅读器用户可以听到此提示,并选择使用 accessibility.verbosity.untitledHint 设置禁用它。

Quick Chat 的改进

我们在几个月前推出了 Quick Chat,并一直在快速迭代,以提供一种专为 VS Code 设计的体验。

本次迭代的亮点

  • 更紧凑的 UX。
  • Quick Chat 现在在失去焦点时保持打开状态。
  • 分隔条和“滚动增长”行为以调整窗口大小。
  • 打开 Quick Chat 现在在命令中心中。

The Quick Chat window with a question and answer displayed

总体而言,用户体验更加紧凑,以与其他“快速打开”体验(如命令面板)保持一致(各处填充更少,用户和 Copilot 图标更小,按钮内联而不是在标题栏中)。

默认情况下,当您提问时,Quick Chat 会调整大小以聚焦于该问题和答案,从而最大程度地减少屏幕空间。我们还认为这有助于聚焦于您可能想询问 Copilot 的快速问题。您的对话历史仍然可用,您可以向上滚动以查看更早的内容。

由于这种动态高度,我们还想提供一种方法来调整窗口大小,如果您需要更多或更少的空间。有两种选项可以调整窗口大小。第一种是我们称之为“滚动增长”。如果您的 Quick Chat 窗口由于答案较短而很小,但您想查看之前的长答案,当您向上滚动时,Quick Chat 会增长到最大高度。

可以通过执行以下任一操作将 Quick Chat 的高度重置回仅显示最后一个问题和答案的状态

  • 关闭 Quick Chat 并等待 30 秒。
  • 提出另一个问题或运行 /clear(请记住,/clear 会彻底清除您的聊天历史记录)。
  • 双击底部分隔条。

说到分隔条... Quick Chat 底部还有一个分隔条,可用于手动调整 Quick Chat 的高度。当您使用分隔条时,您就选择了退出默认的动态行为,并表示“我希望此高度在此处固定,直到重置为止”。

注意:如果您想恢复动态行为,请双击分隔条或在聊天中键入 /clear/clear 会清除您的聊天历史记录)。

最后但同样重要的是,您可以从命令中心通过打开 Quick Chat 选项启动 Quick Chat。

Open Quick Chat command in the Command Center

解释终端选定内容

Copilot 现在具有解释当前终端选定内容的能力,方法是在终端的上下文菜单中选择Copilot:解释此内容(根据平台不同,使用右键单击Shift + 右键单击)。

The terminal context menu's first entry is Copilot: Explain This

Copilot:解释此内容命令将打开聊天视图,Copilot 将返回详细的解释。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

设置的自然语言搜索

设置编辑器现在允许使用 GitHub Copilot Chat 进行自然语言搜索。

自然语言搜索结果目前位于关键字匹配结果下方,并按相似度得分降序排序,但我们计划下个月修复排序问题,以便搜索结果继续按其目录组排列。

自然语言搜索目前依赖于 Copilot 嵌入。因此,在嵌入可用之前(即 GitHub Copilot Chat 扩展激活后几秒钟内)进行的搜索,其自然语言搜索结果不会显示在设置编辑器中。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

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

Python

新 Python 格式化文章

有一个新的专门主题关于Python 格式化,您将在其中学习如何设置默认格式化程序(例如 autopep8Black),并通过各种设置对其进行自定义。

使用环境变量激活终端

Python 扩展现在具有一种新的激活机制,可以在终端中激活选定的环境,而无需运行任何显式的激活命令。本月,我们开始将其作为一项实验推出,并使其成为默认体验。使用新方法,我们利用环境变量激活终端,这在终端启动时隐式完成,因此可以更快,特别是对于 conda 环境。您可以添加以下用户设置:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 来尝试。

如果您对此实验有任何意见或建议,请随时在vscode-python issue #11039 中分享。

重建或使用现有的 .venv 环境

在包含 .venv 文件夹的工作区中工作时,Python:创建环境命令已更新,提供选项来重建或使用现有环境。如果您选择重建环境,则会删除当前的 .venv,允许您重建一个名为 .venv 的新环境。然后,您可以通过遵循Python:创建环境流程来选择您首选的解释器并指定要安装的任何依赖文件,从而自定义此新环境。如果无法删除环境(例如,由于环境处于活动状态),系统会提示您手动删除环境。

或者,如果您选择使用现有环境,则会为您的工作区选择该环境。

预览功能

我们正在试验在快速访问菜单中显示工作区搜索结果。要试用此功能,请运行搜索:快速文本搜索(实验性)。此命令设置 Quick Open 以接受搜索查询。键入一些文本以查看来自不同工作区文件的匹配项。

变暗非聚焦的编辑器和终端

有一项新的实验性功能,用于变暗当前未聚焦的编辑器和终端。此功能的目标是与典型的闪烁光标相比,更清楚地指示文本将出现在哪里。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上图显示了启用变暗非聚焦功能并将不透明度设置为 0.5 的情况,这样可以更清楚地看到 terminalService.ts 编辑器具有焦点。

这可以使用 accessibility.dimUnfocused.enabled 启用,变暗程度由 accessibility.dimUnfocused.opacity 控制。

此功能目前仅覆盖编辑器和终端,但计划扩展此功能,允许用户自行配置他们想要调暗的视图

扩展创作

支持批量范围格式化

DocumentRangeFormattingEditProvider API 现在支持批量格式化。这意味着扩展可以有选择地向编辑器发出信号,表明它支持一次处理多个范围的调用。这有助于减少对格式化提供程序的调用次数,从而提高性能。

要选择启用批量格式化,提供程序必须实现一个新的可选函数:provideDocumentRangesFormattingEdits

EnvironmentVariableCollection 作用域限定到工作区文件夹

EnvironmentVariableCollection API 现在支持创建作用域限定到特定工作区文件夹的新集合,并且该集合将应用于“全局”集合之外。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 扩展使用此机制根据终端在多根工作区中所属的文件夹来设置不同的虚拟环境。

配置何时应用 EnvironmentVariableMutator

EnvironmentVariableCollection API 现在具备在 shell 初始化脚本后运行的 shell 集成脚本中应用更改的能力。这仅在启用 shell 集成时有效,因此如果更改是关键的,可以在 shell 创建时和 shell 集成中同时应用更改。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

当相关变量可能被 shell 初始化脚本修改时,此功能非常有用。

提议的 API

每个里程碑都会带来新的提案 API,扩展作者可以试用它们。一如既往,我们希望收到您的反馈。以下是试用提案 API 的步骤:

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

您不能发布使用提案 API 的扩展。下一个版本中可能存在破坏性更改,我们永远不想破坏现有扩展。

TestMessage 上的 contextValue 和贡献点

您可以在 TestMessage 上提供 contextValue,以便在用户对这些消息执行操作时显示。此外,提供了两个新的菜单贡献点,testing/message/contexttesting/message/content。前者显示在“测试结果”树视图中的消息上,后者显示在编辑器中消息的上方。

请参阅 问题 #190277 以了解有关 contextValue 的更多信息。

终端上下文菜单贡献

正在提出两个新菜单,允许扩展将自己的上下文菜单操作集成到终端中

  • terminal/context - 终端上下文菜单
  • terminal/title/context - 终端标签页上下文菜单

监听终端命令执行

对扩展监听终端命令执行 API 的长期请求提供了一个早期提案,可供测试。此 API 使用shell 集成实现,并且只会在已启用并正常工作的终端上触发。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

此 API 的形式并非最终确定,但基本思想将保持不变。

以下是一个示例用法,它监听任何成功的 git push 命令并触发扩展中的刷新

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

访问终端选择

一个用于访问终端选择的简单提案 API

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

此 API 在最终确定之前可能会包含相应的更改事件,并且 API 名称可能会更改,以使其更清楚它是一个简单的字符串,而不是像 TextEditor.selection 那样基于 Range

终端快速修复进展

终端快速修复提案现在可以触发常规的 VS Code 命令,而不是终端命令。此更改还需要更改终端命令接口名称

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

工程

Electron 25 更新

在此里程碑中,我们将 Electron 25 更新推广给稳定版用户。此更新附带 Chromium 114.0.5735.289 和 Node.js 18.15.0。我们要感谢所有在 Insiders 版本上自托管并提供早期反馈的人员。

Node.js 更新亮点

我们桌面应用程序中捆绑的 Node.js 和我们 服务器 捆绑的独立可执行文件已从 v16 更新到 v18。鉴于这是一个主版本升级,有一些行为和兼容性更改:

  • 来自操作系统的 DNS 结果顺序不再排序。我们在本地和服务器场景中都为扩展主机添加了 --dns-result-order=ipv4first,以避免破坏可能尚未适应此更改的扩展。今后,我们建议扩展在 socket.connect API 中使用 autoSelectFamily 选项来适应结果顺序的变化。

  • 官方 Node.js 仓库提供的适用于 Linux 的预构建二进制文件现在与基于 glibc 2.28 或更高版本的 Linux 分发版兼容。这意味着我们将停止对 Ubuntu 18、CentOS 7、RHEL 7 等服务器的支持。我们现在正在为我们的 Linux 服务器提供 Node.js 的定制构建,以保持 glibc 2.17 或更高版本的兼容性。此支持将在未来的更新中发生变化,届时我们将无法再在 CentOS 7 镜像上构建更新的 Node.js 版本,因此我们建议受此更改影响的服务器用户更新其操作系统版本。

Chromium 更新亮点

  • Mesa 版本更新后,Chromium 着色器编译可能会中断,导致应用程序 UI 中出现异常。此问题在 问题 #190437 中进行跟踪,其中也包含指向 Chromium 错误报告的链接。您可以通过运行 --verbose 并在日志中查找以下行 ERROR:shared_context_state.cc(81)] Skia shader compilation error 来识别此问题。如果您受到此问题的影响,当前的解决方法是删除位于 ~/.config/Code/GPUCache 的 GPU 缓存。
  • 当 Chromium 为 webgl 使用 SwiftShader 后端时,它在 Windows 和 Linux 上似乎都导致集成终端的性能下降。作为一种变通方法,我们根据 GL_RENDERER 字符串检测受影响的用户,并切换到终端的 DOM 后端。更多详细信息可在 问题 #190195 中找到,其中也包含指向 Chromium 错误报告的链接。

感谢

最后但同样重要的是,衷心感谢 VS Code 的贡献者。

问题跟踪

对我们的问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-hexeditor 的贡献

vscode-js-debug 的贡献

vscode-pull-request-github 的贡献

vscode-vsce 的贡献

  • @bandantonio (Antonio)
    • feat: 为 --help 添加用户友好信息 PR #884
    • feat: 添加支持在没有许可证文件的情况下打包和发布 PR #887
    • 重新措辞清单中不匹配定价值的错误消息 PR #890