Skip to content

v1.5.4 - Vim 全屏交互、状态栏保护与粘贴缩进格式错乱缺陷彻底修复版

Choose a tag to compare

@bcblr1993 bcblr1993 released this 30 Sep 06:05
· 31 commits to master since this release

[v1.5.4] - 2026-09-30

🐞 问题修复 (Bug Fixes)

  • 彻底根除 Vim / 全屏交互应用底部显示不全与排版残缺问题:
    • 根因剖析:
      1. SSH 连接建立前(异步握手期间),终端前端视图计算的实际窗口行列数(如 45 行 × 120 列)被发送给未打开的 Darwin PTY(ptyMasterFd == -1),导致尺寸同步被静默丢弃;而 SSH 连接完成后直接采用硬编码默认的 35 行 × 120 列 打开 PTY,导致远程 Linux 终端与 Vim 始终被锁死在 35 行(或 30 行),大窗口下方留有大量未使用黑屏空白;
      2. 终端底层缺少对 DECSTBM(设置顶底滚动区域 \e[top;bottom r)以及 S(向上滚动)、T(向下滚动)、P(删除字符)、@(插入字符)、X(清除字符)等 VT 序列的支持,导致 Vim 编辑和滚动文档时整屏错误滚动,进而冲毁或覆写底部状态栏;
      3. 在 Vim 进入备用屏幕缓冲区(\e[?1049h)时,滚动视口未锁定在顶部(y = 0),滚轮/触控板滑动直接滑动了 AppKit 视口而不是发送光标滚动指令,引发首尾行文字出界裁切。
    • 重构方案:
      1. NativeSSHSession 与 MockSSHSession 实时记录并持久化最新终端尺寸 currentDimensions,连接前尺寸调整即时暂存;在 Darwin PTY 分配(openpty)及连接成功后,双向强制校准并即时同步远程 PTY 尺寸;
      2. RingBuffer 全面落地完整 VT/DEC 序列解析引擎:支持 DECSTBM 滚动区域隔离保护、S 向上滚动、T 向下滚动、P 字符删除、@ 字符插入、X 字符清除及光标保存恢复;严格保证滚屏操作仅作用于滚动区域内部,彻底保全 Vim 底部状态栏与命令行;
      3. TerminalClipView 在备用屏幕模式下强制锁定垂直原点为 0.0,阻断任何视口漂移;
      4. 重写终端滚轮事件 scrollWheel(with:):在备用屏幕(Vim / Less / Htop)模式下将触控板滑动平滑转化为上下方向键输入(\e[A / \e[B),实现如同原生 Mac 终端与 iTerm2 般丝滑的翻页滚屏体验。
  • 修复 Vim / 终端多行文本粘贴格式错乱(楼梯效应与缩进乘倍)缺陷:
    • 支持 DEC 复合私有模式解析(如 \e[?1049;2004h),确保括号化粘贴模式(Bracketed Paste Mode \e[?2004h)100% 正确激活;
    • 优化剪贴板粘贴文本换行标准化处理,在括号化粘贴包裹(\e[200~ ... \e[201~)下原样无损传递缩进结构,彻底杜绝 YAML、代码及脚本粘贴到 Vim 时的缩进自动累加与排版错位。

🧪 质量门禁与性能对比 (Verification & Benchmarks)

  • 新增 9 大 Vim 与备用屏幕专项测试用例 (VimAndScreenModeTests):覆盖备用屏幕进出、复合私有模式解析、DECSTBM 滚动区域状态栏隔离保护、S/T 滚屏、P/@/X 字符增删抹除、括号化粘贴 YAML 缩进完整性、触控板滚轮方向键映射、视口零位锚定及连接前 PTY 尺寸同步;
  • 经由真实 macos27 虚拟机全量验证通过,35 个测试套件(230+ 用例)100% 绿灯(0 failures, 0 warnings);
  • 8 项 Release 生产级性能基准全部大幅超越工程规范要求:
    • RingBuffer 写入吞吐: 1,893,223 行/秒 (191.38 MB/秒) (标准 ≥ 50,000)
    • ANSI / TrueColor 样式解析: 421,540 spans/秒 (标准 ≥ 150,000)
    • 内存水位驻留集 (RSS): 104.05 MB (标准 ≤ 250 MB)
    • 16 线程高并发争用写入: 2,261,652 writes/秒 (标准 ≥ 1,000,000)
    • 64 核 Linux 无代理指标解析: 14,820 次/秒 (标准 ≥ 8,000)
    • OpenSSH 500 主机集群解析: 152,839 hosts/秒 (标准 ≥ 80,000)
    • SFTP 任务中心并发调度: 1,204 tasks/秒 (标准 ≥ 800)
    • 物理按键直通与全链路键入延迟: 5.19 微秒 (μs) (标准 ≤ 15.0 μs)