获取一行的内容其实很简单:IModel.getLineContent()
line = model.getLineContent(3);
请注意,使用时行号以 1 开头getLineContent()
。
替换文本有点复杂,但您可以应用编辑操作:
applyEdits
不会将编辑添加到撤消堆栈,因此不鼓励。但是,这三个都使用相同的接口进行实际更改:IIdentifiedSingleEditOperation
因此实际调用不会有很大不同,所以我将仅显示pushEditOperations()
:
model.pushEditOperations(
[],
[
{
forceMoveMarkers: true,
identifier: "mychange",
range: {
startLineNumber: lineNo,
endLineNumber: lineNo,
startColumn: 1,
endColumn: line.length + 1,
},
text: "this will be the new text there"
},
],
[]
);
如果你想在摩纳哥游乐场测试它,我使用了这段代码(改编自“添加操作”示例):
var editor = monaco.editor.create(document.getElementById("container"), {
value: [
'',
'class Example {',
'\tprivate m:number;',
'',
'\tpublic met(): string {',
'\t\treturn "Hello world!";',
'\t}',
'}'
].join('\n'),
language: "typescript"
});
var model = editor.getModel();
editor.addAction({
id: 'my-unique-id',
label: 'Replace the second line',
keybindings: [ monaco.KeyMod.CtrlCmd | monaco.KeyCode.F10 ],
contextMenuGroupId: 'custom',
contextMenuOrder: 1,
run: function(ed) {
var lineNo = 3;
var line = model.getLineContent(lineNo);
console.log("These were the contents of the second line before I replaced them:", line);
model.pushEditOperations(
[],
[
{
forceMoveMarkers: true,
identifier: "mychange",
range: {
startLineNumber: lineNo,
endLineNumber: lineNo,
startColumn: 1,
endColumn: line.length + 1,
},
text: "this will be the new text there"
},
],
[]
);
}
});
在这种情况下,您可以通过以下方式运行操作:
- 按Ctrl+F10
- 通过右键单击编辑器并选择“替换第二行”(至少如果您没有隐藏编辑器上下文菜单)。