2023年8月 (版本 1.82)
更新 1.82.1:此更新解决了此安全 问题。
更新 1.82.2:此更新解决了这些 问题。
更新 1.82.3:此更新解决了此安全 问题。
下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2023 年 8 月版本。此版本包含许多更新,我们希望您会喜欢。其中一些主要亮点包括:
- 辅助功能改进 - 支持内联补全的辅助视图,更新了关键绑定。
- 内置端口转发 - 从 VS Code 内部转发本地服务器端口。
- 粘性滚动更新 - 与编辑器水平滚动,显示范围内的最后一行,折叠 UI。
- 新的差异编辑器功能 - 检测移动的代码,动态切换内联和并排视图。
- 命令中心默认显示 - 快速打开文件或从标题栏运行命令。
- 复制笔记本输出 - 轻松复制单元格输出以及生成的图像。
- WebAssembly 调试 - 编译 WASM 代码以逐步执行并设置断点。
- 新的 TypeScript 重构 - 移动到文件和内联变量重构。
- 新的 Python 格式化主题 - 了解如何集成 autopep8 和 Black 等格式化程序。
- 预览:GitHub Copilot - CreateWorkspace 命令预览了建议代码的文件结构。
如果您想在线阅读这些发行说明,请访问 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)。
工作台
内置端口转发
VS Code 现在具有内置的端口转发系统。此功能允许您将本地运行的服务通过互联网共享给其他人和设备。要使用它,请选择面板区域(端口:聚焦到端口视图)中提供的 转发端口 按钮。

主题:Codesong(在vscode.dev上预览)
有关端口转发的更多信息,请阅读 端口转发 用户指南。
命令中心默认启用
命令中心几个月前作为一种快速发现和使用 VS Code 的方式推出。您可以使用它作为启动板,以查找命令调色板、运行任务和其他快速体验。我们一直在进行一项实验,在标题栏中显示命令中心,并获得了积极的反馈,因此我们认为现在是时候默认启用它了。
这里有一个使用命令中心以及后退和前进按钮的视频。
我们认为命令中心有潜力成为查找 VS Code 中任何内容的中心,因此请关注未来的更多改进!
注意:如果您不想显示命令中心,可以右键单击标题栏,并在下拉菜单中取消选中命令中心条目以隐藏它。
控制通过键盘或鼠标关闭固定编辑器的方式
有一个新的设置 workbench.editor.preventPinnedEditorClose,可以更精细地控制固定选项卡如何响应键盘快捷键或鼠标中键单击以关闭编辑器。默认情况下,固定选项卡不会通过键盘或鼠标交互关闭(默认值 keyboardAndMouse)。您可以相应地更改此设置
keyboardAndMouse- 固定选项卡不会通过键盘快捷键或鼠标中键单击关闭(从1.82.x开始的默认设置)。keyboard- 固定选项卡不会通过键盘快捷键关闭(直到1.81.x的默认设置)。mouse- 固定选项卡不会通过鼠标中键单击关闭。never- 固定选项卡始终可以通过键盘快捷键或鼠标中键单击关闭。
状态栏的新增和更新的可主题颜色
状态栏已经提供了许多可主题化的颜色。现在有更多颜色可以主题化悬停前景色和背景色
statusBarItem.errorHoverBackgroundstatusBarItem.errorHoverForegroundstatusBarItem.warningHoverBackgroundstatusBarItem.warningHoverForegroundstatusBarItem.remoteHoverBackgroundstatusBarItem.remoteHoverForegroundstatusBarItem.offlineHoverBackgroundstatusBarItem.offlineHoverForeground
以下两个颜色名称已更新,因为该颜色不再应用于整个状态栏,而仅应用于远程指示器
statusBar.offlineBackground重命名为statusBarItem.offlineBackgroundstatusBar.offlineForeground重命名为statusBarItem.offlineForeground
编辑器
粘滞滚动
本次迭代对粘性滚动 UI 进行了多项改进,该 UI 可在编辑器顶部找到(视图:切换粘性滚动)。
- 现在,默认情况下,当编辑器的水平滚动条滚动时,粘性滚动会水平滚动。可以通过禁用
editor.stickyScroll.scrollWithEditor来关闭此功能。 - 可以通过按住
Shift键并悬停在粘性滚动行上,来查看范围的最后一行。单击该行时按住Shift会将编辑器光标移动到范围的最后一行。 - 已将折叠图标添加到粘性滚动沟槽。这些图标的渲染遵循
editor.showFoldingControls设置,该设置控制编辑器沟槽中折叠图标的渲染。
保存时对 JSON 进行排序
现在可以对 JSON 或 JSONC(带有注释的 JSON)文件进行排序。使用设置 json.sortOnSave.enable 来启用此功能。
通过键盘进行代码操作和快速修复导航
现在可以通过键入任何关键字或与可用菜单选项对应的字母,快速浏览快速修复、代码操作或源代码管理菜单(它们使用“操作”控件)。该筛选器利用模糊匹配,并且搜索不限于第一个字母或前缀,而是包括整个标签文本。

差异编辑器
在此版本中,我们默认启用了新的差异编辑器。我们还改进了一些新的差异编辑器功能并修复了许多错误。
移动的代码检测
本次迭代中,我们完善了移动的代码检测功能。可以通过 "diffEditor.experimental.showMoves": true 或在差异编辑器上下文菜单中启用它。启用后,将检测从文件中的一个位置移动到同一文件中不同位置的代码块,并绘制箭头以指示代码块移动到的位置。
即使代码略有修改,也会检测到代码移动。可以使用 比较 按钮来比较移动前后代码块。

折叠未更改的代码标题
使用 "diffEditor.hideUnchangedRegions.enabled": true 或选择编辑器上下文菜单中的地图图标,以启用折叠未更改的代码块。
有了此版本,现在有面包屑用于折叠的代码块,以指示哪些符号被折叠。单击面包屑项目会显示所选项目

动态布局
如果差异编辑器的宽度太小,编辑器将自动切换到内联视图。如果编辑器再次足够宽,则将恢复以前的布局。将 "diffEditor.useInlineViewWhenSpaceIsLimited": false 设置为 false 以禁用此行为。
按钮切换状态
我们更新了差异编辑器中按钮的切换样式,使其更清晰可见。
旧的切换样式(未切换和已切换),未切换的按钮颜色较暗
, 
新的切换样式(未切换和已切换),已切换的按钮带有阴影背景
, 
终端
控制终端启动时的恢复方式
新的设置 terminal.integrated.hideOnStartup 控制应用程序启动时是否自动创建终端。可用的选项如下:
never(默认): 启动时从不隐藏终端视图。whenEmpty: 只有在没有恢复持久会话时才隐藏终端。always: 始终隐藏终端,即使恢复了持久会话。
禁用带括号的粘贴模式
带括号的粘贴模式是终端中的一项功能,它将粘贴的文本包装在特殊序列中,以便 shell 可以使用这些信息。启用此功能的 shell 应该能够正确支持它,但有时可能会出现问题,导致粘贴时意外出现类似 [201~ 的文本。现在可以显式禁用此功能,即使 shell 请求该功能,也会禁用它。
运行后终端焦点设置
终端现在有一个 terminal.integrated.focusAfterRun 设置,允许用户指定在调用 Terminal: Run Selected Text In Active Terminal 时终端是否应该获得焦点。其他选项是聚焦终端的可访问缓冲区 (accessible-buffer) 或不聚焦任何内容 (none)。
可调整大小的查找
现在可以使用左侧的隔板(类似于编辑器)调整终端的查找控件的大小。

悬停或拖动隔板时会突出显示隔板,以调整查找控件的大小。
禁用 GPU 加速时的更快渲染
由于 组件重写,当禁用 GPU 加速时,“DOM 渲染器”的性能得到了显著提升。重写侧重于减少使用的 DOM 元素数量,并且节省的资源随着终端尺寸的增大而更好地扩展。
在测试具有 117 列和 36 行的终端的典型渲染调用时,之前需要 ~10 毫秒,之后需要 ~2 毫秒。将测试机器上的终端尺寸增加到 300x100 后,渲染时间从之前的 ~25-35 毫秒减少到之后的 ~4-5 毫秒。
更好的选择渲染
当 GPU 加速关闭时,选择渲染与 webgl 渲染器相同,所有背景颜色都更改为主题的选择背景颜色,以确保良好的对比度和一致性。

尊重调暗文本的半最小对比度比率
最小对比度比率功能允许终端更多地控制终端中的前景色,以确保它们以特定的对比度比率显示。过去,此功能的一个问题是调暗文本 (CSI 2 m) 也会尊重对比度比率,这意味着它可能与普通文本一样突出。PowerShell 的自动完成幽灵文本就是一个不适用的例子。
现在调暗文本将具有 一半 的对比度要求。虽然这意味着文本可能不再满足最小对比度比率,但现在它与普通文本明显不同,这更重要。

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

改进了“打开检测到的链接”行为
打开检测到的链接 命令 (⇧⌘G (Windows, Linux Ctrl+Shift+G)) 的行为已更改为在保持高性能的同时,使搜索整个终端缓冲区中的链接变得更加容易。 以前,它仅提供视口和视口上方一小部分链接,并在末尾提供一个笨拙的 显示更多链接 按钮来搜索剩余缓冲区

现在,视口中的链接会立即呈现,以便可以尽快显示快速选择。

一旦显示了快速选择,就会在后台检测终端缓冲区的其余链接。在键入以进行筛选时,VS Code 会等待所有结果并将其包含在筛选后的结果中。

请注意,CodeQL.yml 直到键入筛选器才被包含,因为它超出了视口范围。
新的链接格式
现在在终端中检测到以下 GNU 样式的链接格式:
sourcefile:lineno.columnsourcefile:line1-column1.column2sourcefile:line1.column1-line2.column2
调试
JavaScript 调试器
WebAssembly 调试
JavaScript 调试器现在将自动将 WebAssembly 模块反编译为 WebAssembly 文本格式,并允许您逐步执行和在反编译的模块中设置断点。

主题:Codesong(在vscode.dev上预览)
源映射加载改进
我们在此版本中对源映射的加载方式进行了许多改进
- 在某些常见情况下,例如使用
tsc命令行编译的应用程序中,源映射的加载速度提高了 3-5 倍。 - 现在支持来自 Vite 开发服务器的热模块重新加载。
- 现在可以从经过身份验证的端点自动加载源映射。
测试
改进的状态区域
测试视图中筛选框下方的“状态区域”现在更加简洁,并提供了一个可点击的操作来重新运行最近运行的测试。按住 Alt 并单击重新运行按钮将调试这些测试。

支持在测试输出中检测链接
链接检测现在在显示测试输出的终端中运行。文件名、路径和 URI 现在可以点击。
改进了与测试相关的输出的体验
测试扩展可以将控制台输出与特定测试或位置关联起来。 以前,以这种方式创建的每个输出都会作为测试结果视图中的一个单独项目出现,并在选择时在文本编辑器中打开。
现在,它们显示在一个适当的终端中,并且导航到输出消息会打开该测试输出的终端,并选中该消息。
Notebook
复制单元格输出
单元格输出菜单现在包含一个选项,可以将输出复制到系统剪贴板。还可以通过右键单击图像并选择 复制输出 命令来对图像输出使用上下文菜单。
主题: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 命令。
- 预构建 Dev Containers 指南。
您可以在 远程开发发布说明中了解有关扩展新功能和错误修复的信息。
对扩展的贡献
GitHub Copilot
从聊天视图创建工作区
现在可以使用 /createWorkspace 从 GitHub Copilot Chat 扩展的稳定版本中,使用自然语言描述创建工作区。
我们还进行了以下改进:
- 建议的工作区现在以文件树的形式呈现在聊天响应中。
- 您可以单击文件以在编辑器中打开只读预览。
- 如果 Copilot 的初始建议不太正确,您可以提出后续问题以帮助 Copilot 进行迭代和改进。
使用内联聊天在无标题编辑器中开始编码
现在有一个提示,说明如何通过 ⌘I (Windows, Linux Ctrl+I) 在打开无标题文本编辑器时启动内联聊天会话。屏幕阅读器用户可以听到此提示并使用 accessibility.verbosity.untitledHint 设置选择禁用它。
快速聊天改进
我们在几个月前推出了快速聊天,并且一直在快速迭代以提供一种感觉是为 VS Code 量身定制的体验。
本次迭代的亮点:
- 更紧凑的 UX。
- 快速聊天在失去焦点时现在保持打开状态。
- 隔板和“滚动以增长”行为以调整窗口大小。
- 打开快速聊天 现在在命令中心中。

总体而言,UX 更紧凑,与命令面板 (Command Palette) 等其他“快速打开”体验保持一致 (所有地方的填充更少,用户和 Copilot 图标更小,按钮内联而不是位于标题栏中)。
默认情况下,当您提出问题时,快速聊天会调整大小以专注于该问题和答案,以最大限度地减少屏幕空间。我们还认为这有助于专注于您可能想问 Copilot 的那些快速问题。对话记录仍然可用,您可以向上滚动以返回时间线。
由于这种动态高度,我们也希望提供一种调整窗口大小的方式,以便在需要更多或更少空间时使用。调整窗口大小有两种选择。第一种是我们称之为“滚动增长”。如果您的快速聊天窗口因为简短的回答而很小,但您想查看之前的长答案,那么随着您向上滚动,快速聊天窗口会增长到最大高度。
快速聊天的显示高度可以重置为仅显示最后一个问题和答案,方法如下:
- 关闭快速聊天并等待 30 秒。
- 提出另一个问题或运行
/clear(请记住,/clear会永久清除您的聊天记录)。 - 双击底部边框。
说到边框... 我们还在快速聊天的底部有一个边框,可以手动调整快速聊天的显示高度。当您使用边框时,您将放弃默认的动态行为,并表示“我希望此高度在此处固定,直到重置”。
注意:如果您想恢复动态行为,请双击边框或在聊天中键入
/clear(/clear会清除您的聊天记录)。
最后,您可以使用命令中心中的 打开快速聊天 选项启动快速聊天。

解释终端选择
Copilot 现在可以通过在终端的上下文菜单中选择 Copilot: 解释此项 来解释当前的终端选择(具体取决于平台,使用 右键单击 或 Shift + 右键单击)。

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

设置的自然语言搜索
设置编辑器现在允许使用 GitHub Copilot Chat 进行自然语言搜索。
自然语言搜索结果当前放置在关键字匹配结果下方,并按降序相似度评分排序,但我们计划下个月修复排序方式,以便搜索结果继续按其目录表分组排列。
目前,自然语言搜索依赖于 Copilot 嵌入。因此,在嵌入可用之前(即 GitHub Copilot Chat 扩展激活后的几秒钟),自然语言搜索结果不会显示在设置编辑器中。

主题:浅粉色(在 vscode.dev 上预览)
Python
新的 Python 格式化文章
有一个新的专门介绍 Python 格式化 的主题,您将学习如何设置默认格式化程序,例如 autopep8 或 Black,并通过各种设置对其进行自定义。
使用环境变量激活终端
Python 扩展现在有一种新的激活机制,可以在不运行任何显式激活命令的情况下激活终端中选择的环境。本月,我们将开始将其作为实验推出,使其成为默认体验。使用新方法,我们使用环境变量来激活终端,这会在终端启动时隐式完成,因此速度可能更快,尤其是在 conda 环境中。您可以添加以下 用户 设置:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 来试用它。
如果您对这个实验有任何意见或建议,请随时在 vscode-python issue #11039 中分享。
重新创建或使用现有的 .venv 环境
当在一个已经包含 .venv 文件夹的工作区中工作时,Python: 创建环境 命令已更新,提供重新创建或使用现有环境的选项。如果您决定重新创建环境,则会删除当前的 .venv,允许您重新创建一个名为 .venv 的新环境。然后,您可以按照 Python: 创建环境 流程选择首选的解释器并指定要安装的任何依赖文件来定制这个新环境。如果由于环境正在活动状态等原因而无法删除环境,系统将提示您手动删除环境。
或者,如果您选择使用现有环境,则该环境将为您的工作区选择。
预览功能
快速访问文本搜索
我们正在尝试在快速访问菜单中显示工作区搜索结果。要尝试此操作,请运行 搜索: 快速文本搜索(实验版)。此命令设置“快速打开”以接受搜索查询。键入一些文本以查看来自不同工作区文件的匹配项。
调暗未聚焦的编辑器和终端
有一个新的实验性功能,可以调暗当前未聚焦的编辑器和终端。此功能的目的是使文本将要输入的位置与典型的闪烁光标相比更加清晰。

上面的图像显示启用了调暗未聚焦功能,不透明度设置为 0.5,以便更清楚地显示 terminalService.ts 编辑器具有焦点。
可以使用 accessibility.dimUnfocused.enabled 启用此功能,并使用 accessibility.dimUnfocused.opacity 控制调暗量。
此功能目前仅涵盖编辑器和终端,但计划扩展到 允许用户配置他们想要调暗的视图。
扩展创作
支持批量范围格式化
DocumentRangeFormattingEditProvider API 现在支持批量格式化。这意味着扩展可以选择性地向编辑器发出信号,表明它支持一次性调用多个范围。这有助于减少对格式化提供程序的调用次数,从而提高性能。
要选择加入批量格式化,提供程序必须实现一个新的可选函数:provideDocumentRangesFormattingEdits。
作用域限定为工作区文件夹的环境变量集合
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 扩展使用此机制根据终端属于多根工作区中的哪个文件夹来设置不同的虚拟环境。
配置应用环境变量突变器的时间
EnvironmentVariableCollection API 现在能够在 shell 集成脚本中应用更改,该脚本将在 shell 初始化脚本运行后运行。只有在启用 shell 集成时,才能应用此更改,因此如果至关重要,可以在 shell 创建和 shell 集成中应用该更改。
context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
applyAtProcessCreation: true,
applyAtShellIntegration: true
});
当相关变量可能被 shell 初始化脚本修改时,此功能很有用。
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试这些 API。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤
- 查找您要尝试的提议并将其名称添加到
package.json#enabledApiProposals。 - 使用最新的 @vscode/dts 并运行
npx @vscode/dts dev。它会将相应的d.ts文件下载到您的工作区。 - 您现在可以根据该提议进行编程。
您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
TestMessage 和贡献点上的 contextValue
您可以在 TestMessage 上提供一个 contextValue,以便在用户对这些消息采取操作时显示。此外,还提供了两个新的菜单贡献点,即 testing/message/context 和 testing/message/content。前者显示在测试结果树视图中的消息上,后者显示在编辑器中的消息上。
有关 contextValue 的更多信息,请参阅 issue #190277。
终端上下文菜单贡献
正在提出两个新菜单,允许扩展将其自己的上下文菜单操作集成到终端中
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,以避免破坏可能尚未采用此更改的扩展。今后,我们建议扩展使用 autoSelectFamily 选项在socket.connectAPI 中适应结果顺序的更改。 -
来自 官方 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 中出现伪影。该问题在 issue #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 后端。更多详细信息可以在 issue #190195 中找到,其中也包含 Chromium 错误报告的链接。
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @starball5 (starball)
- @ArturoDent (ArturoDent)
- @rperez030 (Roberto Perez)
拉取请求
对 vscode 的贡献
- @0o001 (Mustafa Ateş Uzun):修复:本地化字符串拼写错误 PR #191046
- @alphacoma18 (Alpha Romer Coma):修复 markdown 文件中受支持的 markdown-lint 违规 PR #190750
- @andyleejordan (Andy Jordan):保护
$IsWindowsPR #190192 - @bandantonio (Antonio):修复:将缺失的定价参数添加到 manifest 模式 PR #190293
- @ChaseKnowlden (Chase Knowlden):在窗口标题中附加聚焦的视图 PR #190216
- @davedash (Dave Dash):Fish 集成:在字符串中使用 -- 以表示位置参数的开始… PR #189994
- @demccormack (Daniel McCormack):修复在使用 set -u 时 zsh 和 bash shell 集成 PR #185425
- @floge07:修复:允许下划线作为隧道远程地址中的有效字符 PR #190904
- @gjsjohnmurray (John Murray):修复最近损坏的过时(已取代)扩展文件夹清理 PR #189335
- @greenie (Joe Green):修复滚动到顶部按钮颜色一致性 PR #191034
- @hrkw00 (Ryosuke Hirakawa):修复 standaloneLanguages.ts 中的注释拼写错误 PR #189449
- @hsfzxjy (hsfzxjy)
- 添加上下文键 notebookEditorCursorAtLineBoundary PR #187679
- 始终尊重 getMultiSelectedEditorContexts 中的非空选择 PR #187704
- 确保 TestResultsViewContent.reveal 的并发安全性 PR #189756
- 使 CommentThread Ctrl+Arrow 可导航 PR #189913
- 修复设置列表溢出 PR #190721
- 修复 Markdown 预览中嵌套列表样式 PR #190936
- @jeanp413 (Jean Pierre)
- 修复配置的默认 shell 未在重新连接到 Codespace 时使用 PR #181832
- 修复 Windows 上免费端口快速修复不起作用 PR #190900
- @kfrederix (Karel Frederix):将 resize observer 的处理程序包装在 requestAnimationFrame() 中 PR #183325
- @kon72 (Kon):添加折叠/显示所有未更改区域的命令 PR #190451
- @lucasMarioza:确保在 colorizeElement 上将 style 元素添加到 shadowDOM 组件 PR #190505
- @neeleshb (Neelesh Bodas)
- 为扩展添加空的 alt 文本到装饰性图像 PR #190607
- 删除标题栏中的不正确的角色。 PR #190608
- @rehmsen (Ole):增加 web 与 electron 的快捷键一致性。 PR #191061
- @SevenOutman (Doma):将“Peek Call Hierarchy”和“Peek Type Hierarchy”操作添加到命令面板 PR #189607
- @songlinn:修复:防止在组合事件中显示历史记录的上一个/下一个 PR #184014
- @timar07 (Timothy):修复:xterm 快速修复出现在错误的位置 #169162 PR #188693
- @Timmmm (Tim Hutt)
- 更新 dev 容器节点版本 PR #190346
- 支持在终端链接检测器中使用 . 作为行:列分隔符 PR #190351
- @tisilent (YAYA 刘玉婷)
- 修复:终端查找小部件调整 PR #179398
- 在显示 TerminalFind 时使用选定的值 PR #190466
- @troy351:listWidget:删除冗余逻辑 PR #191054
- @weartist (Hans)
- 修复 #185343 PR #185421
- 添加设置以防止在使用中间单击时关闭固定选项卡(修复 #115734) PR #188592
- 修复:#188760 PR #189259
- 修复:#188751 PR #189616
- 支持单击“隐藏行”文本以展开 #186406 PR #189657
- 在按下 Enter 后立即搜索包含/排除文件… PR #190473
- 为快速打开标题栏按钮添加自定义悬停 PR #191416
- @zardoy (Vitaly):typescript 改进移动到现有文件的快速选择路径匹配 PR #181231
对 vscode-css-languageservice 的贡献
- @bentorkington:修复对已弃用方法的引用 PR #359
对 vscode-hexeditor 的贡献
对 vscode-js-debug 的贡献
- @sunilsurana (Sunil Surana):通过检查 .map 文件是否存在来加速 sourcemap 查找 PR #1780
对 vscode-pull-request-github 的贡献
- @tobbbe (Tobbe):清理标题中的斜杠 PR #5149
对 vscode-vsce 的贡献