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 月版本。此版本中有很多更新,我们希望您会喜欢,一些主要亮点包括
- 辅助功能改进 - 内联完成的辅助功能视图支持、更新的键盘绑定。
- 内置端口转发 - 从 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.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
启用此功能。
通过键盘导航代码操作和快速修复
差异编辑器
您现在可以通过键入任何与可用菜单选项相对应的关键字或字母,快速浏览快速修复、代码操作或源代码管理菜单(它们使用“操作”控件)。过滤器使用模糊匹配,搜索不限于第一个字母或前缀,还包括整个标签文本。
在此版本中,我们默认启用了新的差异编辑器。我们还改进了一些新的差异编辑器功能并修复了许多错误。
移动的代码检测
在此迭代中,我们完善了移动的代码检测功能。可以通过 "diffEditor.experimental.showMoves": true
或在差异编辑器上下文菜单中启用它。启用后,将检测从同一文件的一个位置移动到另一个位置的代码块,并绘制箭头以指示代码块移动到的位置。
移动的代码在稍微修改后也会被检测到。比较按钮可用于比较移动前后的代码块。
折叠未更改的代码标题
在此版本中,折叠代码块现在带有面包屑,以指示哪些符号已折叠。点击面包屑条目将显示所选条目。
动态布局
如果差异编辑器的宽度太小,编辑器会自动切换到内联视图。如果编辑器再次足够宽,则会恢复先前的布局。设置 "diffEditor.useInlineViewWhenSpaceIsLimited": false
来禁用此行为。
按钮切换状态
我们更新了差异编辑器中按钮的切换样式,使其更显眼。
旧的切换样式(未切换和已切换),带有暗淡的未切换按钮
,
新的切换样式(未切换和已切换),带有阴影的已切换背景
,
终端
控制终端在启动时的恢复方式
新设置 terminal.integrated.hideOnStartup
控制应用程序启动时是否自动创建终端。以下选项可用
never
(默认):启动时从不隐藏终端视图。whenEmpty
:仅在没有持久会话恢复时隐藏终端。always
:始终隐藏终端,即使有持久会话恢复。
禁用方括号粘贴模式
方括号粘贴模式 是终端中的一个功能,它将粘贴的文本包装在特殊序列中,以便 shell 可以使用该信息。打开此功能的 shell 旨在适当地支持此功能,但可能存在导致其失效的原因,在这种情况下,您可能会在粘贴时意外地看到类似 [201~
的文本。现在可以明确地禁用此功能,这将禁用该功能,即使 shell 请求它。
运行后终端焦点设置
终端现在具有 terminal.integrated.focusAfterRun
设置,以便用户可以指定在调用 终端:在活动终端中运行所选文本 时是否应将终端聚焦。其他选项是将终端的可访问缓冲区 (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.column
sourcefile:line1-column1.column2
sourcefile:line1.column1-line2.column2
调试
JavaScript 调试器
WebAssembly 调试
JavaScript 调试器现在将自动将 WebAssembly 模块反编译为 WebAssembly 文本格式,并允许您逐步执行并设置反编译模块中的断点。
VS Code 现在有一个内置的端口转发系统。此功能允许您将本地运行的服务通过互联网共享给其他人和设备。要使用它,请选择端口视图(在面板区域中可用,端口:将焦点置于端口视图上)中的转发端口按钮。
源映射加载改进
在此版本中,我们对源映射加载的方式进行了许多改进
- 一些常见情况下的源映射,例如使用
tsc
命令行编译的应用程序,加载速度提高了 3-5 倍。 - 现在支持来自 Vite 开发服务器的热模块重新加载。
- 现在可以从经过身份验证的端点自动加载源映射。
测试
改进的状态区域
测试视图中过滤器框下方的“状态区域”现在更加简洁,并且还提供了一个可点击的操作以重新运行最近运行的测试。按住 Alt 键的同时单击重新运行按钮将调试这些测试。
支持在测试输出中检测链接
链接检测现在在显示测试输出的终端中运行。文件名、路径和 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
从自然语言描述中创建工作区。
我们还进行了以下改进
- 现在,建议的工作区在聊天回复中以文件树的形式呈现。
- 您可以点击文件以在编辑器中打开只读预览。
- 如果 Copilot 的初始建议不完全正确,您可以提出后续问题以帮助 Copilot 迭代和改进。
在无标题编辑器中使用内联聊天开始编码
当您打开无标题文本编辑器时,现在有关于如何通过 ⌘I (Windows、Linux Ctrl+I) 启动内联聊天会话的提示。屏幕阅读器用户可以听到此提示并选择使用 accessibility.verbosity.untitledHint
设置禁用它。
快速聊天的改进
我们在几个月前推出了快速聊天,并且一直在快速迭代以提供一种感觉上为 VS Code 量身定制的体验。
本次迭代的亮点
- 更紧凑的 UX。
- 快速聊天现在在失去焦点时保持打开状态。
- 调整窗口大小的滑块和“滚动以增长”行为。
- 打开快速聊天现在位于命令中心。
总的来说,UX 更紧凑,以与其他“快速打开”体验(如命令面板)保持一致(所有地方的填充减少,用户和 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 问题 #11039 中分享。
重新创建或使用现有的 .venv 环境
在工作区中使用已包含 .venv
文件夹的情况下,Python:创建环境命令已更新,包含重新创建或使用现有环境的选项。如果您决定重新创建环境,则当前的 .venv
将被删除,以便您可以重新创建名为 .venv
的新环境。然后,您可以通过遵循Python:创建环境流程来选择首选解释器并指定要安装的任何依赖项文件来自定义此新环境。如果环境无法删除,例如,由于它处于活动状态,则系统会提示您手动删除环境。
或者,如果您选择使用现有环境,则该环境将被选择用于您的工作区。
预览功能
快速访问文本搜索
我们正在尝试在快速访问菜单中显示工作区搜索结果。要试用此功能,请运行搜索:快速文本搜索(实验性)。此命令将设置快速打开以接受搜索查询。键入一些文本以查看来自不同工作区文件的匹配项。
使未聚焦的编辑器和终端变暗
有一个新的实验性功能,可以使当前未聚焦的编辑器和终端变暗。此功能的目标是使文本将要放置的位置比典型的闪烁光标更清晰。
上图显示了启用变暗未聚焦功能,不透明度设置为 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 的步骤
- 找到您想试用的提议,并将它的名字添加到
package.json#enabledApiProposals
中。 - 使用最新的 @vscode/dts 并运行
npx @vscode/dts dev
。它会将相应的d.ts
文件下载到您的工作区。 - 现在您可以针对提议进行编程。
您不能发布使用提议 API 的扩展。下一个版本中可能存在重大更改,我们不想破坏现有的扩展。
TestMessage 上的 contextValue 和贡献点
您可以在 TestMessage
上提供 contextValue
,以便在用户对这些消息执行操作时显示。此外,还有两个新的菜单贡献点可用,即 testing/message/context
和 testing/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 贡献者表示衷心的感谢!
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @starball5 (starball)
- @ArturoDent (ArturoDent)
- @rperez030 (Roberto Perez)
拉取请求
对 vscode
的贡献
- @0o001 (Mustafa Ateş Uzun): fix: 本地化字符串拼写错误 PR #191046
- @alphacoma18 (Alpha Romer Coma): 修复 markdown 文件中支持的 markdown-lint 违规 PR #190750
- @andyleejordan (Andy Jordan): 保护
$IsWindows
PR #190192 - @bandantonio (Antonio): fix: 在清单模式中添加缺少的定价参数 PR #190293
- @ChaseKnowlden (Chase Knowlden): 在窗口标题中追加聚焦视图 PR #190216
- @davedash (Dave Dash): Fish 集成:使用 -- 在字符串中表示位置参数的开始…… PR #189994
- @demccormack (Daniel McCormack): 修复使用 set -u 时 zsh 和 bash shell 集成 PR #185425
- @floge07: fix: 允许下划线作为隧道远程地址中的有效字符 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
- 使注释线程 Ctrl+Arrow 可导航 PR #189913
- 修复设置列表溢出 PR #190721
- 修复 Markdown 预览中的嵌套列表样式 PR #190936
- @jeanp413 (Jean Pierre)
- 修复配置的默认 shell 在重新连接到 Codespace 时未使用的延续 PR #181832
- 修复免费端口快速修复在 Windows 上不起作用 PR #190900
- @kfrederix (Karel Frederix): 将 resize 观察者的处理程序包装在 requestAnimationFrame() 中 PR #183325
- @kon72 (Kon): 添加用于折叠/显示所有未更改区域的命令 PR #190451
- @lucasMarioza: 确保在 colorizeElement 上将样式元素添加到 shadowDOM 组件 PR #190505
- @neeleshb (Neelesh Bodas)
- 为扩展添加空 alt 文本到装饰性图像 PR #190607
- 从标题栏中删除不正确的角色。 PR #190608
- @rehmsen (Ole): 提高 web 与 electron 的快捷键一致性。 PR #191061
- @SevenOutman (Doma): 向命令面板添加“查看调用层次结构”和“查看类型层次结构”操作 PR #189607
- @songlinn: fix: 防止历史记录在撰写事件中显示上一个/下一个 PR #184014
- @timar07 (Timothy): fix: xterm 快速修复出现在错误的位置 #169162 PR #188693
- @Timmmm (Tim Hutt)
- 更新开发容器节点版本 PR #190346
- 在终端链接检测器中支持 . 作为行:列分隔符 PR #190351
- @tisilent (YAYA 刘玉婷)
- fix: 终端查找窗口调整 PR #179398
- 在显示终端查找时使用选定值查找 PR #190466
- @troy351: listWidget: 删除冗余逻辑 PR #191054
- @weartist (Hans)
- 修复 #185343 PR #185421
- 添加设置以防止使用鼠标中键时关闭固定选项卡(修复 #115734) PR #188592
- 修复:#188760 PR #189259
- 修复:#188751 PR #189616
- 支持点击“隐藏行”文本以展开 #186406 PR #189657
- 在按下回车键后立即搜索文件以包含/排除… PR #190473
- 为快速打开标题栏按钮添加自定义悬停 PR #191416
- @zardoy (Vitaly): typescript 为移动到现有文件快速选择提供更好的路径匹配 PR #181231
对 vscode-css-languageservice
的贡献
- @bentorkington: 修复对已弃用方法的引用 PR #359
对 vscode-hexeditor
的贡献
对 vscode-js-debug
的贡献
- @sunilsurana (Sunil Surana): 通过检查 .map 文件的存在来加快源映射查找速度 PR #1780
对 vscode-pull-request-github
的贡献
- @tobbbe (Tobbe): 从标题中清理斜杠 PR #5149
对 vscode-vsce
的贡献