编辑器显示不能脱离真实光标状态
案例一:标题的 # 被误隐藏
live preview 把标题 ## 前面的 HeaderMark 节点 Decoration.replace({})(画面上替换为空),本意是「光标在本行显示 ##、离开则隐藏」。这个判断依赖 cursorLine(CodeMirror 当前 selection 同步出的光标行)。偶发情况下 selection / decoration 状态不同步,代码误判「光标不在这一行」,于是 ## 被隐藏,只剩放大的标题正文。
- 不是 markdown 内容真的丢了,也不是保存层问题 —— 只是显示层把
#藏了 - 修法:标题仍按
##放大,但不再隐藏HeaderMark,让#一直显示(放弃「隐藏标记」这个特性,换稳定性)
案例二:toolbar 插入的 checkbox 光标落点错位
点 toolbar 的 checkbox 后画面看起来正常(只有一个 checkbox),但真实光标 / selection 仍在 task marker 前面;用户接着输入,文字被插到 - [ ] 前面,变成 看- [ ]。
- 判定要点:「点击后看起来正常」不代表状态正确 —— 要区分「视觉已更新」与「selection 已更新」
- 症状形态与案例一同源:显示层与真实编辑状态不同步
相关
- 判据要用真值而非代理 —— 本条是该 synthesis 的一处实例:显示要由真实光标位置决定
- 过期响应不能覆盖当前编辑内容 —— 同源:界面状态与真实状态的时序错位
- 更新时序要由本地最新状态决定 —— 本条是该骨架的一处实例
- 条件return前必须调用所有hooks —— 同属「子层/编辑器状态与显示不一致」
- 编辑即时反馈与落盘延迟分离
- 手搓编辑器核心逻辑到深处要评估换社区方案 —— 同属编辑器内核 / 规则层的职责划分