在保留选择的摩纳哥编辑器中插入行
Insert line in Monaco editor preserving selection
我想在给定行号处的现有文本之前插入一行文本。我目前正在使用这个:
const insertionRange = new monaco.Range(
lineNo, this.getModel().getLineMinColumn(lineNo),
lineNo, this.getModel().getLineMinColumn(lineNo),
);
this.executeEdits("", [{ range: insertionRange, text: insertMe + "\n" }]);
但是我想我还需要按下插入光标和我插入的文本后面的任何选择。所以如果之前我有:
1 So we beat on,
2 borne back ceaselessly into the past.|
在第 2 行之前插入一行后,我希望插入点在第 3 行的末尾:
1 So we beat on,
2 boats against the current,
3 borne back ceaselessly into the past.|
ICodeEditor.executeEdits
确实采用了可选的第三个 ICursorStateComputer
选项,可用于在编辑发生后修改光标,但我不确定如何使用它。
还有一个 InsertLineBeforeAction
,我可以使用它来代替手动操作。
一个可能的选择是计算新的选择,可能是这样的:
const newSelections = this.getSelections().map((s) => {
if (s.endLineNumber >= lineNo) s.endLineNumber ++;
if (s.positionLineNumber >= lineNo) s.positionLineNumber ++;
if (s.selectionStartLineNumber >= lineNo) s.selectionStartLineNumber ++;
if (s.startLineNumber >= inputLineNum) s.startLineNumber ++;
return s;
});
然后将 newSelections
作为第三个参数传递给 executeEdits
。
我想在给定行号处的现有文本之前插入一行文本。我目前正在使用这个:
const insertionRange = new monaco.Range(
lineNo, this.getModel().getLineMinColumn(lineNo),
lineNo, this.getModel().getLineMinColumn(lineNo),
);
this.executeEdits("", [{ range: insertionRange, text: insertMe + "\n" }]);
但是我想我还需要按下插入光标和我插入的文本后面的任何选择。所以如果之前我有:
1 So we beat on,
2 borne back ceaselessly into the past.|
在第 2 行之前插入一行后,我希望插入点在第 3 行的末尾:
1 So we beat on,
2 boats against the current,
3 borne back ceaselessly into the past.|
ICodeEditor.executeEdits
确实采用了可选的第三个 ICursorStateComputer
选项,可用于在编辑发生后修改光标,但我不确定如何使用它。
还有一个 InsertLineBeforeAction
,我可以使用它来代替手动操作。
一个可能的选择是计算新的选择,可能是这样的:
const newSelections = this.getSelections().map((s) => {
if (s.endLineNumber >= lineNo) s.endLineNumber ++;
if (s.positionLineNumber >= lineNo) s.positionLineNumber ++;
if (s.selectionStartLineNumber >= lineNo) s.selectionStartLineNumber ++;
if (s.startLineNumber >= inputLineNum) s.startLineNumber ++;
return s;
});
然后将 newSelections
作为第三个参数传递给 executeEdits
。