所以我正在使用 CodeMirror,我想要一种方法来从 undo
状态中省略某些编辑。特别是,我遇到了一种情况,我想要一次击键
- 替换部分镜像文本并
- 自动缩进新区域
天真地这样做意味着使用击键,然后点击 undo
将留下包含没有缩进的新文本的镜像。我想要一个撤消
来恢复初始文本,而不是转到替换文本的未缩进版本。
唯一支持 API 的方法似乎是在缩进之前执行 .getHistory
调用,紧接着是 .setHistory
调用,但是 the docs暗示这是个坏主意。具体来说,如果镜像的内容在 .getHistory
和 .setHistory
调用之间发生变化,则其效果是不确定的,这就是这种情况下的重点。
text marking API 中还有一个 addToHistory
标志, 但它只是可用的标记,而不是像缩进这样的任意编辑。
有什么好的方法可以完成我在这里寻找的事情吗?
最佳答案
在单个 operation 内进行的更改将只产生一个历史事件。
如果安排单个操作不可行,更改的原始字段(可设置为 replaceRange
和 replaceSelection
的参数,在其他情况下稍微通过注册 beforeChange
事件处理程序更笨拙)确定 CodeMirror 执行的历史事件组合的类型。如果您分配以星号 (*
) 字符开头的原点,则将合并具有相同原点的后续更改。如果原点以 +
开头,则在 options.historyEventDelay
毫秒内发生的后续同源更改将被合并。
关于undo - 在 codemirror 中操作撤销状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560258/