编辑操作、位置映射与历史
解释操作如何改变文档和选择,并处理撤销、批量变更及外部建议。
将动作表达为变换
插入字符、删除范围、切换格式和移动块,会产生文档变换。操作需要说明目标、输入和前提,例如在某个版本的范围内替换内容,或者把一个允许移动的节点放到新位置。
将变化表达为操作或事务,可以集中维护合法性、选择位置和插件状态。直接修改界面 DOM 后再希望模型自动理解,可能让视图与文档分离;具体框架需要通过其状态更新入口接回模型。
操作序列中的位置映射
在位置 5 插入三个字符后,原来位置 8 的目标通常移动到位置 11。删除范围还可能使原目标消失,需要决定映射到边界还是标记无效。多个操作组成序列时,后续目标必须解释为原始位置还是已经映射的位置。
这是批量替换、注释定位、搜索结果高亮和外部编辑建议的共同问题。文档在后台变化后,旧目标应重新验证;文本相同并不能证明还是同一项结构对象。
事务的原子含义
编辑事务可以把多步文档变化及选择更新作为一个状态转换。这里的事务保证依赖编辑器的应用规则;它不自动涵盖服务器持久化或其他窗口同步。一次按钮操作在界面上完成,可能仍等待后续保存。
ProseMirror 的状态、事务和映射提供一套具体模型,参见原项目 State guide与 Transform guide。其他编辑器可以采用不同表示,仍需要解决目标与变化的对应。
撤销需要定义范围
撤销可以保存前后快照,也可以保存逆操作。连续输入是否合成一次撤销、格式与输入是否一起撤回、远端操作是否进入本地历史,需要明确分组和来源规则。协同撤销通常希望撤回自己的操作,同时保留其他人的变化,这需要相应操作与位置模型。
保存历史快照和保持当前协同状态也有不同用途。历史恢复可能把一个过去版本重新作为新变更写入,影响当前其他参与者;本地浏览历史不应悄悄覆盖共享文档。
外部建议作为可验证编辑
模型或自动化服务提出修改时,建议应保留所针对的文档版本、目标结构和新内容。应用前核对目标仍存在、内容符合 schema、权限允许,并明确用户接受、拒绝和部分接受后的状态。
用标记展示差异与真正应用变更是两个阶段。生成完成不能代替保存成功,显示建议不能代替用户接受。流式建议还可能只有部分内容,取消时应决定丢弃、保留提案还是完成已有合法部分。
本页建立操作规则与判断条件,没有声称某个产品已经实现全部撤销、协同或 AI 建议能力。
最后更新于