摩纳哥编辑器,添加新行时添加代码的最佳方式?
Monaco Editor, best way to add code when new line added?
对于客户端,我需要提供一个 Web Ide 来编辑 yaml 文件。所以,摩纳哥编辑器似乎是完美的选择。
一个请求的功能是:
add list item ( - ) for a new line if the previous one is a list item
我用 onDidChangeModelContent()
来检测变化和
我想出了如何在添加新行后添加这个“-”,但我的问题是光标停留在“-”之前。
我尝试 setPosition()
或使用 executeEdits()
但在 onDidChangeModelContent()
执行后,一些代码覆盖了光标位置 ...
那么,这可能不是个好方法?有什么想法吗?
我会使用 editor.onDidType
,我相信它不在文档中(这意味着它可能会在 v1.0 发布时消失)。
editor.onDidType(text => {
const bulletText = '- ';
const insertBullet = (pos) => {
const range = new monaco.Range(pos.lineNumber, pos.column, pos.lineNumber, pos.column);
editor.executeEdits('new-bullets', [{identifier: 'new-bullet', range, text: bulletText}])
}
if (text === '\n') {
const model = editor.getModel();
const position = editor.getPosition();
const prevLine = model.getLineContent(position.lineNumber - 1);
prevLine.trim().indexOf(bulletText) === 0 && insertBullet(position);
}
})
我还没有实际测试过这个,但它应该能为您指明正确的方向。
多亏了 Benny,它现在可以正常工作了。只需要在insertBullet
函数末尾添加setPosition
即可。
editor.onDidType(text => {
const bulletText = "- ";
const insertBullet = pos => {
const range = new monaco.Range(
pos.lineNumber,
pos.column,
pos.lineNumber,
pos.column
);
editor.executeEdits("new-bullets", [
{ identifier: "new-bullet", range, text: bulletText }
]);
// Set position after bulletText
editor.setPosition({
lineNumber: pos.lineNumber,
column: pos.column + 2
});
};
if (text === "\n") {
const model = this.editor.getModel();
const position = this.editor.getPosition();
const prevLine = model.getLineContent(position.lineNumber - 1);
prevLine.trim().indexOf(bulletText) === 0 && insertBullet(position);
}
});
对于客户端,我需要提供一个 Web Ide 来编辑 yaml 文件。所以,摩纳哥编辑器似乎是完美的选择。
一个请求的功能是:
add list item ( - ) for a new line if the previous one is a list item
我用 onDidChangeModelContent()
来检测变化和
我想出了如何在添加新行后添加这个“-”,但我的问题是光标停留在“-”之前。
我尝试 setPosition()
或使用 executeEdits()
但在 onDidChangeModelContent()
执行后,一些代码覆盖了光标位置 ...
那么,这可能不是个好方法?有什么想法吗?
我会使用 editor.onDidType
,我相信它不在文档中(这意味着它可能会在 v1.0 发布时消失)。
editor.onDidType(text => {
const bulletText = '- ';
const insertBullet = (pos) => {
const range = new monaco.Range(pos.lineNumber, pos.column, pos.lineNumber, pos.column);
editor.executeEdits('new-bullets', [{identifier: 'new-bullet', range, text: bulletText}])
}
if (text === '\n') {
const model = editor.getModel();
const position = editor.getPosition();
const prevLine = model.getLineContent(position.lineNumber - 1);
prevLine.trim().indexOf(bulletText) === 0 && insertBullet(position);
}
})
我还没有实际测试过这个,但它应该能为您指明正确的方向。
多亏了 Benny,它现在可以正常工作了。只需要在insertBullet
函数末尾添加setPosition
即可。
editor.onDidType(text => {
const bulletText = "- ";
const insertBullet = pos => {
const range = new monaco.Range(
pos.lineNumber,
pos.column,
pos.lineNumber,
pos.column
);
editor.executeEdits("new-bullets", [
{ identifier: "new-bullet", range, text: bulletText }
]);
// Set position after bulletText
editor.setPosition({
lineNumber: pos.lineNumber,
column: pos.column + 2
});
};
if (text === "\n") {
const model = this.editor.getModel();
const position = this.editor.getPosition();
const prevLine = model.getLineContent(position.lineNumber - 1);
prevLine.trim().indexOf(bulletText) === 0 && insertBullet(position);
}
});