2023 年 8 月(版本 1.82)
更新 1.82.1:此更新解决了此安全问题。
更新 1.82.2:此更新解决了这些问题。
更新 1.82.3:此更新解决了此安全问题。
下载:Windows:x64 Arm64 | Mac:通用 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 上的更新。
Insiders: 想要尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用时立即试用。
辅助功能
窗口标题中的焦点视图
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),以便与其他辅助视图对齐。
辅助视图中的操作
辅助视图中的操作允许屏幕阅读器用户转到 下一个/上一个
、禁用辅助功能详细程度以及更多给定功能。这些操作存在于视图上的便捷工具栏中,以便可以保留当前上下文。
转到辅助视图中的符号
辅助功能帮助对话框和某些辅助视图现在具有转到符号(⇧⌘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 进行了多项改进,该 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
以禁用此行为。
按钮切换状态
我们更新了差异编辑器中按钮的切换样式,使其更可见。
旧的切换样式(未切换和切换)带有暗淡的未切换按钮
,
新的切换样式(未切换和切换)带有阴影切换背景
,
终端
控制终端在启动时如何还原
新的设置 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 样式链接格式
源文件:行号.列号
源文件:行 1-列 1.列 2
源文件:行 1.列 1-行 2.列 2
调试
JavaScript 调试器
WebAssembly 调试
JavaScript 调试器现在会自动将 WebAssembly 模块反编译为 WebAssembly 文本格式,并允许您逐步执行和在反编译的模块中设置断点。
主题:Codesong(在 vscode.dev 上预览)
源代码映射加载改进
在此版本中,我们对源代码映射的加载方式进行了许多改进
- 在某些常见情况下,例如使用
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
上运行 内联变量
后
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 或 远程隧道的远程计算机,或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
亮点包括
- 更好的远程 - 隧道连接可靠性。
- 新的 在 WSL 中安装 Docker 命令。
- 预构建开发容器教学指南。
您可以在 远程开发发行说明中了解有关新扩展功能和错误修复的信息。
扩展的贡献
GitHub Copilot
从聊天视图创建工作区
现在,您可以使用 /createWorkspace
从 GitHub Copilot Chat 扩展的稳定版本中的自然语言描述创建工作区。
我们还进行了以下改进
- 建议的工作区现在在聊天响应中呈现为文件树。
- 您可以单击文件以在编辑器中打开只读预览。
- 如果 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 扩展激活后几秒钟)的自然语言搜索结果不会显示在“设置”编辑器中。
主题:Light Pink(在 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
的作用域限定为工作区文件夹
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 集成 实现,并且仅在已启用并正常工作的终端上触发。
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 的贡献者。
问题跟踪
对我们的问题跟踪的贡献
- @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
- 使 CommentThread 可通过 Ctrl+箭头导航 PR #189913
- 修复设置列表溢出 PR #190721
- 修复 Markdown 预览中的嵌套列表样式 PR #190936
- @jeanp413 (Jean Pierre)
- 修复重新连接到 Codespace 时未使用配置的默认 shell 的延续 PR #181832
- 修复空闲端口快速修复在 Windows 上不起作用的问题 PR #190900
- @kfrederix (Karel Frederix): 在 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
- 在显示 TerminalFind 时使用选定值查找 PR #190466
- @troy351: listWidget: 删除冗余逻辑 PR #191054
- @weartist (Hans)
- 修复 #185343 PR #185421
- 添加设置以防止在使用鼠标中键单击时关闭固定的选项卡 (fix #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
的贡献