ProseMirror
4 节点1 篇4 来源
ProseMirror 作为富文本编辑器框架,其核心架构将文档视为 JSON 树,Markdown 仅作为序列化输出格式。这一设计导致用户在编辑时保留的原始 Markdown 语法(如列表符号、强调标记)在保存时会被“规范化”改写,造成源码信息丢失。开发者指出,这种“树形权威”与“源码优先”的矛盾是许多笔记软件出现格式错乱、Git diff 噪音大以及协同编辑结构冲突的根本原因。虽然部分项目尝试通过自定义序列化器或双模式编辑器缓解问题,但除非改变底层数据模型,否则无法完全避免转换损耗。
事情怎么走到这一步
ProseMirror 创始人 Marijn Haverbeke 在社区论坛确认,当前 Markdown 转换是有损的,会丢失缩进、换行和列表标记等细节,且无损序列化是一个尚未完成的大工程。
discuss.prosemirror.net ↗开发者在 ProseMirror 论坛提问如何解决 Tiptap 中空段落被 Markdown 序列化器剥离的问题,Marijn 回复称 CommonMark 本身不支持表达空段落,建议通过语义化节点而非空白字符控制布局。
discuss.prosemirror.net ↗一位 Electron 应用开发者询问如何将 ProseMirror 事务映射回纯文本偏移量以保留原始 Markdown 语法(如代码块围栏类型),Marijn 指出这需要极其复杂的逻辑或自定义序列化器,因为 Markdown 标记插入位置规则复杂。
discuss.prosemirror.net ↗V2EX 用户发布长文《ProseMirror 产品开发者:树形文档架构下,你的 Markdown 源码第一次保存就丢了》,详细列举了 prosemirror-markdown 和 Tiptap 插件的具体丢失行为,并提出 MSFE 源码优先编辑器方案。
v2ex.com ↗
还没定论的部分
- 是否存在成熟的开源方案能在不修改 ProseMirror 核心模型的前提下实现 Markdown 源码的无损往返?