现已推出!阅读 10 月份的新功能和修复。

2023 年 8 月(版本 1.82)

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

更新 1.82.2:该更新解决了这些 问题.

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

下载:Windows:x64 Arm64 | Mac:通用 英特尔 | Linux:deb rpm tarball Arm snap


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

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

内部人士:想尽快尝试新功能?您可以下载夜间 内部人士 构建,并在新功能可用时尝试最新的更新。

辅助功能

窗口标题中的焦点视图

window.title 设置现在有一个 ${focusedView} 变量,如果视图当前处于焦点,则显示标题栏中的视图名称。

内联完成的辅助功能视图

内联完成,例如来自 GitHub Copilot 扩展的内联完成,现在可以在 辅助功能视图 中进行检查。

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

在上次迭代中,我们使用 ⌘↓ (Windows、Linux Ctrl+Down⌘↑ (Windows、Linux Ctrl+Up,使在输入控件(例如,搜索或过滤器输入)与其结果之间进行导航的体验在扩展视图、键盘快捷键编辑器等组件中保持一致。

这已扩展到设置编辑器和 GitHub 拉取请求评论控件。

这也适用于在终端和终端辅助功能缓冲区之间导航。

更新的终端辅助功能缓冲区键盘绑定

以前,终端辅助功能缓冲区通过 Shift+Tab 打开。这与某些 shell 中的现有键盘快捷键冲突。因此,我们已删除了该键盘绑定,转而使用 ⌘↓ (Windows、Linux Ctrl+Down⌥F2 (Windows Alt+F2,Linux Shift+Alt+F2,以与其他辅助功能视图保持一致。

辅助功能视图中的操作

辅助功能视图中的操作允许屏幕阅读器用户转到 next/previous,禁用辅助功能详细程度,以及更多特定功能。这些操作存在于视图上的一个便捷工具栏中,以便可以保留当前上下文。

辅助功能视图中的转到符号

辅助功能帮助对话框和一些辅助功能视图现在有一个转到符号⇧⌘O (Windows、Linux Ctrl+Shift+O)操作,允许用户更快地浏览内容。

运行后聚焦终端辅助功能缓冲区

工作台

终端现在有一个 terminal.integrated.focusAfterRun 设置,以便用户可以指定当调用终端:在活动终端中运行选定文本时,应该聚焦终端的辅助功能缓冲区 (accessible-buffer)、终端本身 (terminal) 还是什么都不聚焦 (none)。

内置端口转发

Forward a Port button displayed in the Ports view

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

主题: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

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

折叠未更改的代码标题

在此版本中,折叠代码块现在带有面包屑,以指示哪些符号已折叠。点击面包屑条目将显示所选条目。

Collapsed code headers

动态布局

如果差异编辑器的宽度太小,编辑器会自动切换到内联视图。如果编辑器再次足够宽,则会恢复先前的布局。设置 "diffEditor.useInlineViewWhenSpaceIsLimited": 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) 聚焦或不聚焦任何内容 (none)。

可调整大小的查找

终端的查找控件现在可以使用左侧的滑块调整大小,类似于编辑器

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

当悬停在滑块上或拖动它以调整查找控件的大小以调整大小时,滑块将被突出显示。

禁用 GPU 加速时渲染更快

禁用 GPU 加速时使用的“DOM 渲染器”的性能已显着提高,这得益于 对组件的重写。重写侧重于减少使用的 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

现在,视窗中的链接会立即显示,因此快速选择可以尽快显示

Now initial results are restricted to the initial viewport

只要显示快速选择,就会在后台检测终端缓冲区其余部分的链接。在键入以过滤时,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 文本格式,并允许您逐步执行并设置反编译模块中的断点。

Breakpoint hit during a WebAssembly debug session

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

源映射加载改进

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

  • 一些常见情况下的源映射,例如使用 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 命令。
  • 预构建开发容器说明指南。

您可以在 远程开发发行说明 中了解有关新扩展功能和错误修复的信息。

对扩展的贡献

GitHub Copilot

从聊天视图创建工作区

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

我们还进行了以下改进

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

在无标题编辑器中使用内联聊天开始编码

当您打开无标题文本编辑器时,现在有关于如何通过 ⌘I (Windows、Linux Ctrl+I 启动内联聊天会话的提示。屏幕阅读器用户可以听到此提示并选择使用 accessibility.verbosity.untitledHint 设置禁用它。

快速聊天的改进

我们在几个月前推出了快速聊天,并且一直在快速迭代以提供一种感觉上为 VS Code 量身定制的体验。

本次迭代的亮点

  • 更紧凑的 UX。
  • 快速聊天现在在失去焦点时保持打开状态。
  • 调整窗口大小的滑块和“滚动以增长”行为。
  • 打开快速聊天现在位于命令中心。

The Quick Chat window with a question and answer displayed

总的来说,UX 更紧凑,以与其他“快速打开”体验(如命令面板)保持一致(所有地方的填充减少,用户和 Copilot 图标更小,按钮是内联的而不是在标题栏中)。

默认情况下,当您提出问题时,快速聊天会调整大小以关注该问题和答案,从而最大程度地减少屏幕空间。我们还认为这有助于您专注于可能想向 Copilot 提出的那些快速问题。您的对话历史记录仍然可用,您可以向上滚动以返回过去。

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

可以通过以下操作之一将快速聊天的高度重置回仅显示最后一个问题和答案:

  • 关闭快速聊天并等待 30 秒。
  • 提出另一个问题或运行 /clear(请记住,/clear 会永久清除您的聊天历史记录)。
  • 双击底部滑块。

说到滑块... 我们在快速聊天的底部也有一个滑块,可以用来手动调整快速聊天的高度。当您使用滑块时,您将选择退出默认的动态行为,并表示“我希望此高度固定在这里,直到重置”。

注意:如果您想返回到动态行为,请双击滑块或在聊天中键入 /clear/clear 会清除您的聊天历史记录)。

最后但并非最不重要的一点是,您可以使用命令中心的打开快速聊天选项启动快速聊天。

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

主题:浅粉色(在 vscode.dev 上预览)

Python

新的 Python 格式化文章

有一篇关于 Python 格式化 的新专用主题,您将了解如何设置默认格式化程序,例如 autopep8Black,以及如何通过各种设置对其进行自定义。

使用环境变量激活终端

现在,Python 扩展有一个新的激活机制,可以在不运行任何显式激活命令的情况下在终端中激活所选环境。本月,我们开始将其作为一项实验推出,使其成为默认体验。通过这种新方法,我们使用环境变量来激活终端,这在终端启动时是隐式执行的,因此速度更快,尤其是对于 conda 环境。您可以添加以下用户设置:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 来试用它。

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

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

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

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

预览功能

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

使未聚焦的编辑器和终端变暗

有一个新的实验性功能,可以使当前未聚焦的编辑器和终端变暗。此功能的目标是使文本将要放置的位置比典型的闪烁光标更清晰。

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 集成 实现,并且仅在已启用并运行 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 使用 SwiftShader 后端用于 webgl 时,它似乎在 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