在代码镜像中操作撤销状态

Ina*_*thi 3 undo codemirror

所以我正在使用 CodeMirror,我想要一种方法来省略undo状态中的某些编辑。特别是,我有一种情况,我想要一个按键

  1. 替换部分镜像文本 AND
  2. 自动缩进新鲜区域

天真地这样做意味着使用击键,然后敲击undo会留下包含没有缩进的新文本的镜像。我想要一个单一的undo来恢复初始文本,而不是去替换文本的无缩进版本。

唯一支持 API 的方法似乎是.getHistory在缩进之前调用,然后.setHistory立即调用,但文档暗示这是一个坏主意。具体来说,如果镜像的内容在.getHistory.setHistory调用之间发生变化,则此效果是不确定的,这就是这种情况的重点。

文本标记 API 中也有一个addToHistory标志,但它只能用于标记而不是像缩进这样的任意编辑。

有什么好方法可以做我在这里寻找的东西吗?

Mar*_*ijn 5

在单个操作中进行的更改只会导致单个历史事件。

如果安排单个操作不可行,则更改的原始字段(可设置为replaceRangeand的参数replaceSelection,在其他情况下通过注册beforeChange事件处理程序更笨拙)确定 CodeMirror 的历史事件组合的类型做。如果指定以星号 ( *) 字符开头的原点,则将合并具有相同原点的后续更改。如果源以 a 开头+,则后续的同源更改将在options.historyEventDelay毫秒内发生时合并。