在 ACE 编辑器中重置撤消堆栈

Reset the undo stack in ACE editor

我想在 ACE editor 中重置撤消堆栈。行为应该是:

  1. 我在编辑器中做了一些修改。
  2. 调用一些魔法函数来重置撤消堆栈
  3. 尝试撤消时,这是不可能的,因为撤消堆栈已重置。

我想这与 ACE 的 UndoManager 有关,但我不知道如何在下面的示例中使用它。

var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/markdown");

setTimeout(function() { 
  editor.setValue("And now how can I reset the\nundo stack,so pressing\nCTRL+Z (or Command + Z) will *NOT*\ngo back to previous value?", -1);
}, 3000);
#editor {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  font-size: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.9/ace.js"></script>
<div id="editor">This value will be changed in 3 seconds.</div>

我研究了 editoreditor.session 原型以找到一些辅助函数,但没有成功。

使用 editor.session.setValue() 或调用 editor.session.getUndoManager().reset(); 参见 https://github.com/ajaxorg/ace/blob/v1.1.9/lib/ace/edit_session.js#L279

是的,UndoManager就是维护所有历史记录的class。 解决方案是使用 blank/newly 创建的 class.

初始化会话

查看代码段。

var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/markdown");

setTimeout(function() {
  editor.setValue("And now how can I reset the\nundo stack,so pressing\nCTRL+Z (or Command + Z) will *NOT*\ngo back to previous value?", -1);
  editor.getSession().setUndoManager(new ace.UndoManager())
}, 3000);
#editor {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  font-size: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.9/ace.js"></script>
<div id="editor">This value will be changed in 3 seconds.</div>