1.7 KiB
1.7 KiB
问题闭环记录(Question Solved)
本文档记录已确认问题的现象、根因、修复与回归要点,避免重复踩坑。
目录
2026-03-03:回车后首字母重复显示(aasdf)
现象
- 输入英文命令(如
asdf)后回车,提示符行偶发显示为aasdf。 - 服务端实际收到与执行仍是
asdf(例如返回zsh: command not found: asdf)。
根因
- SSH 回显是分片到达的,典型序列为:
"a"、"\b as"、"df..."。 - 旧逻辑按帧即时渲染,第一帧字符已写入后,下一帧开头的
\b不能回退上一帧字符,造成视觉重复。 - 回显中还可能夹杂
\r\r\n与 ANSI 控制序列,若不按终端语义处理会放大错位和空行问题。
修复
- 文件:
demo/main.js - 策略:
- 在
renderAnsiToHtml中补齐控制字符处理:BS(\x08)、CRLF(\r\n)、裸CR(\r)。 - 增加短窗口流式合帧(
STREAM_BATCH_MS),将连续stdout/stderr分片先合并后渲染,保证跨帧\b/\r能生效。 - 保留本地回显清理(
clearLast()),避免与远端回显叠加。
验证
- 复现
asdf回车,不再出现aasdf。 - 调试日志显示发送仍为
asdf\n,与服务端执行结果一致。
回归检查清单
- 英文输入后回车不出现首字母重复。
stdout/stderr样式渲染正常(ANSI 颜色不回归)。- 回车后不新增多余空行。
- 本地回显与远端回显不叠加。