用途
Terminal Expert 是一个面向 VS Code 扩展开发的终端实现技能,为在 VS Code 扩展中实现终端功能提供统一的专家级指导。它把 xterm.js 的实现细节与 VS Code 的终端架构模式整合在一起,确保实现与官方 VS Code 终端保持一致。
主要能力
技能覆盖以下方面:
- 创建和配置 xterm.js Terminal 实例
- 实现终端插件(fit、webgl、serialize、search 等)
- 与 VS Code WebView 集成
- 实现 PTY(伪终端)进程管理
- 创建终端会话持久化与恢复
- 处理键盘输入、IME 组合输入和鼠标事件
- 使用 OSC 633 序列实现 shell 集成
- 优化终端性能(GPU 加速、缓冲)
- 管理终端生命周期与资源清理
常用插件
技能列出了常用插件及其包名、用途与加载方式:
- FitAddon(@xterm/addon-fit):自动调整大小以适应容器,始终加载
- WebglAddon(@xterm/addon-webgl):GPU 加速(性能提升 30%+),延迟加载
- SerializeAddon(@xterm/addon-serialize):会话持久化,延迟加载
- SearchAddon(@xterm/addon-search):在终端中查找,延迟加载
- Unicode11Addon(@xterm/addon-unicode11):扩展 Unicode,按配置加载
- WebLinksAddon(@xterm/addon-web-links):可点击 URL,按配置加载
- ImageAddon(@xterm/addon-image):内联图片,按配置加载
性能目标
技能给出以下性能目标参考:
- 终端创建:<500ms(含 PTY 启动)
- 会话恢复:<3s(1000 行回滚缓冲)
- 终端销毁:<100ms(完整清理)
- 调整大小处理:100ms 防抖(避免过多调用)
- 输出缓冲:16ms 刷新(约 60fps 渲染)
使用方式
技能以代码示例形式展示实现模式,主要包括:
- 基础终端设置:通过 TerminalManager 类创建 Terminal,配置字体、字号、行高、光标样式、回滚行数、主题等,加载 FitAddon 并用 ResizeObserver 处理容器尺寸变化。
- WebGL 渲染与回退:通过 RenderingManager 启用 WebglAddon,监听上下文丢失事件并回退到 canvas。
- 会话持久化:通过 SerializeAddon 的 serialize 保存回滚内容,再用 terminal.write 恢复。
- 高频输出缓冲:OutputBuffer 类累积输出,按刷新间隔写入终端,在高频输出时缩短刷新间隔。
- PTY 集成:使用 node-pty 的 pty.spawn 启动 shell,处理 onData、onExit,提供 write、resize、shutdown 方法。
- 流控:FlowControlledProcess 通过高水位(100000)与低水位(5000)标记暂停/恢复 PTY,防止性能问题。
- 输入处理:attachCustomKeyEventHandler 处理复制、粘贴、自定义快捷键;IMEHandler 处理 CJK 组合输入。
- Shell 集成:通过 terminal.parser.registerOscHandler(633, ...) 处理 OSC 633 的 A/B/C/D 等序列。
- 生命周期管理:DisposableStore 模式按 LIFO 顺序释放资源。
- VS Code WebView 集成:通过 acquireVsCodeApi 与扩展通信,读取 VS Code 主题变量,处理 input/output/resize/clear/focus 消息。
技能还提供 ANSI 转义序列速查,包括光标移动、擦除、文本格式、颜色(含 256 色与真彩色)、屏幕模式等。
适用场景
- 在 VS Code 扩展中创建和配置终端面板
- 实现终端会话的持久化与恢复
- 处理高吞吐输出(如 AI 代理场景)
- 集成 shell 集成功能(OSC 633)
- 优化终端渲染性能(GPU 加速、缓冲、流控)
- 处理键盘、IME 与鼠标输入
限制
资料未提供该技能的安装方式、收费模式、平台支持范围或具体使用步骤,这些信息暂未提供。技能内容以代码示例和参考文档为主,实际实现需结合 VS Code 与 xterm.js 的官方文档。