我想创建一个系统来存储Monaco编辑器的Undo&Redo stack
。
为什么?:我有一个Monaco实例,我做了几处更改。然后我必须处理该实例并打开一个新实例。在这里,我想恢复与前一个实例相同的堆栈状态。
问题:如何获取和恢复Undo&Redo stack
?
更新
当我处理Monaco编辑器实例时,JavaScript环境可以完全被破坏。它集成在C#
环境中,能够与JS
进行通信。我的目标是将Monaco Editor model
存储在C#
中或序列化。
答案 0 :(得分:2)
这一切都与模型有关。
如果您恢复相同的模型,您将拥有撤消和重做堆栈
参见示例
var model = editorInstance.getModel();
var viewState = editorInstance.saveViewState();
//Destroy your instance for whatever reason
editorInstance.dispose();
//When you create the new instance load the model that you saved
var newInstance = monaco.editor.create(elem, options);
newInstance.setModel(model);
newInstance.restoreViewState(viewState);
可能有帮助的东西是与摩纳哥事件挂钩
monaco.editor.onWillDisposeModel(saveModel)
viewState
可用于恢复编辑器的光标位置。
答案 1 :(得分:0)
这是非官方方式:
const {past, future} = editor.getModel()._commandManager;
您可以根据需要在JSON.stringify
和past
上运行future
。然后,当您重新创建编辑器时,您只需
const cm = editor.getModel()._commandManager;
cm.past = JSON.parse(past);
cm.future = JSON.parse(future);