编辑器显示不能脱离真实光标状态

**只要「显示什么」依赖「光标在哪」,一旦 selection 状态同步滞后,画面就和真实编辑状态分叉 —— 症状是标记莫名消失、或看起来正常但输入落到错误位置,而内容本身没丢。** 稳妥做法是让显示少依赖光标,或让落点直接由真实 selection 决定。

案例一:标题的 # 被误隐藏

live preview 把标题 ## 前面的 HeaderMark 节点 Decoration.replace({})(画面上替换为空),本意是「光标在本行显示 ##、离开则隐藏」。这个判断依赖 cursorLine(CodeMirror 当前 selection 同步出的光标行)。偶发情况下 selection / decoration 状态不同步,代码误判「光标不在这一行」,于是 ## 被隐藏,只剩放大的标题正文。

  • 不是 markdown 内容真的丢了,也不是保存层问题 —— 只是显示层把 # 藏了
  • 修法:标题仍按 ## 放大,但不再隐藏 HeaderMark,让 # 一直显示(放弃「隐藏标记」这个特性,换稳定性)

案例二:toolbar 插入的 checkbox 光标落点错位

点 toolbar 的 checkbox 后画面看起来正常(只有一个 checkbox),但真实光标 / selection 仍在 task marker 前面;用户接着输入,文字被插到 - [ ] 前面,变成 看- [ ]。

  • 判定要点:「点击后看起来正常」不代表状态正确 —— 要区分「视觉已更新」与「selection 已更新」
  • 症状形态与案例一同源:显示层与真实编辑状态不同步

相关