Ace 编辑器暂停/禁用 UndoManager

Posted

技术标签:

【中文标题】Ace 编辑器暂停/禁用 UndoManager【英文标题】:Ace Editor Pause/Disable UndoManager 【发布时间】:2016-04-30 06:35:43 【问题描述】: 有什么方法可以从 UndoManager 中删除特定的堆栈值

pause/disablestart/enable UndoManager 的任何函数。

我希望不推送特定数据到UndoManager's stack

【问题讨论】:

不可能不将增量推送到堆栈,因为在这种情况下无法撤消以前的增量,您还需要转换增量 一位用户说“不幸的是,实施起来相当复杂。看看现有的解决方案,如 sharejs、firebase 或 c9.ide.collab。最后一个使用 ignoreChanges 标志来忽略自己所做的更改 github .com/c9/c9.ide.collab/blob/master/ot/document.js#L192 并使用修改版本的 undomanger 重新设置撤消堆栈 github.com/c9/c9.ide.collab/blob/master/ot/ document.js#L737,你也可以使用你的变更转换算法——2小时前的用户“ c9.ide.collab 我猜这个代码 var rev = session.$undoManager.startNewGroup(); session.$undoManager.markIgnored(rev);但我想你的 api 没有 markIgnore 和 startNewGroup() 函数,对吧?您能否再解释一下,以便我继续。我什至不明白提示。 看起来 c9.ide.collab 使用了未完全实现的所需 api 的实验版本 github.com/c9/core/blob/master/node_modules/ace/lib/ace/… 【参考方案1】:

不可能简单地不将增量推送到堆栈,因为在这种情况下无法撤消先前的增量,您还需要围绕跳过的增量转换增量。 假设您有一个文档"xyz",应用insert, 2, "a" 以获得"xyaz",然后insert, 1, "b" 获得"xbyaz"。现在要撤消第一个编辑但保留第二个,您需要应用delete, 2+1, "a"。这样做的算法不是很复杂,但它需要处理很多分支,所以会很麻烦。 Ace 没有为此 atm 提供 api。

【讨论】:

以上是关于Ace 编辑器暂停/禁用 UndoManager的主要内容,如果未能解决你的问题,请参考以下文章

在 Ace Editor 中禁用水平分割

在不选择整个编辑器的情况下为 ace 编辑器设置值

有没有办法在 Ace Editor 中隐藏垂直标尺?

从 C++ 禁用控制台的快速编辑模式

腾讯ACE怎么关闭

Windows BATCH:如何禁用单个脚本的快速编辑模式?