undo - 在 codemirror 中操作撤销状态

标签 undo codemirror

所以我正在使用 CodeMirror,我想要一种方法来从 undo 状态中省略某些编辑。特别是,我遇到了一种情况,我想要一次击键

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

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

唯一支持 API 的方法似乎是在缩进之前执行 .getHistory 调用,紧接着是 .setHistory 调用,但是 the docs暗示这是个坏主意。具体来说,如果镜像的内容在 .getHistory.setHistory 调用之间发生变化,则其效果是不确定的,这就是这种情况下的重点。

text marking API 中还有一个 addToHistory 标志, 但它只是可用的标记,而不是像缩进这样的任意编辑。

有什么好的方法可以完成我在这里寻找的事情吗?

最佳答案

在单个 operation 内进行的更改将只产生一个历史事件。

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

关于undo - 在 codemirror 中操作撤销状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560258/

相关文章:

java - 绘画应用程序中撤消/重做的命令模式

mongodb - 在 Meteor/React 中实现可撤销的 MongoDB 事务

java - 使用撤消按钮在 Java ArrayList 中移动

git - 撤消尚未推送的 Git merge

javascript - CodeMirror foldCode 方法不起作用

javascript - 如何默认激活CodeMirror中的代码颜色(突出显示)

javascript - 如何在iframe中输出codemirror的结果?

macos - NSUndoManager 操作名称中的 & 符号有什么特别之处?

angular - ngx-Codemirror 游标无法正常工作-Angular 8

php - CodeMirror - PHP 模式不起作用?