开发者问题收集

获取/恢复 Monaco 编辑器撤消和重做堆栈

2018-01-11
2255

我想创建一个系统来存储 Monaco 编辑器的 Undo&Redo 堆栈

为什么? :我有一个 Monaco 实例,我在其中做了一些更改。然后我必须释放该实例并打开一个新实例。在这里,我想恢复与上一个实例相同的堆栈状态。

问题 :如何获取和恢复 Undo&Redo 堆栈


更新: 当我释放 Monaco 编辑器实例时,JavaScript 环境可能会被完全破坏。它集成在能够与 JS 通信的 C# 环境中。我的目标是将 Monaco 编辑器模型 存储在 C# 中或对其进行序列化。

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 事件挂钩联系起来

monaco.editor.onWillDisposeModel(saveModel)

viewState 可用于恢复编辑器的光标位置。

joverall22
2018-03-09

以下是非官方方法:

const {past, future} = editor.getModel()._commandManager;

对于您的情况,您可以在 pastfuture 上运行 JSON.stringify 。然后,当您重新创建编辑器时,您只需执行

const cm = editor.getModel()._commandManager;
cm.past = JSON.parse(past);
cm.future = JSON.parse(future);
Benny Hinrichs
2019-09-04