16

我的应用程序中嵌入了一个摩纳哥代码编辑器。

如何以编程方式在特定行上插入文本?

var editor = monaco.editor.create(document.getElementById("container"), {
    value: "// First line\nfunction hello() {\n\talert('Hello world!');\n}\n// Last line",
    language: "javascript",

    lineNumbers: false,
    roundedSelection: false,
    scrollBeyondLastLine: false,
    readOnly: false,
    theme: "vs-dark",
});
// how do I do this?
editor.insertText("FOO");
4

3 回答 3

23

更强大的解决方案是使用Selection API 而不是 Position

var selection = editor.getSelection();
var id = { major: 1, minor: 1 };             
var text = "XXX";
var op = {identifier: id, range: selection, text: text, forceMoveMarkers: true};
editor.executeEdits("my-source", [op]);

如果编辑器中已经有预先选择的文本,插入将替换它,在我看来,这是正确的行为。

于 2018-02-13T10:15:56.017 回答
15

使用executeEdits API

var line = editor.getPosition();
var range = new monaco.Range(line.lineNumber, 1, line.lineNumber, 1);
var id = { major: 1, minor: 1 };             
var text = "FOO";
var op = {identifier: id, range: range, text: text, forceMoveMarkers: true};
editor.executeEdits("my-source", [op]);
于 2017-01-16T00:17:55.837 回答
4

要在光标处插入文本,有这种非常简单的方法。我经常使用它来制作片段工具栏:

editor.trigger('keyboard', 'type', {text: "test"});

如果选择文本,它将替换文本。

您还可以通过这种方式添加多行文本:

editor.trigger('keyboard', 'type', {text: `text on
multiple
line`});
于 2021-01-19T19:13:19.230 回答