Monaco Editor:如何通过getValue()索引获取行列位置?
回答
Monaco Editor 原生就提供了从文本索引(偏移量)获取位置信息的能力,不需要自行实现。
你可以使用编辑器模型(ITextModel)的 getPositionAt(offset: number) 方法,传入要查询的索引值,它会返回一个 IPosition 对象,包含 lineNumber 和 column 属性。
注意:Monaco Editor 里的 lineNumber 和 column 都是1-based(从1开始计数)的,和你例子里期望的0-based行号有区别。比如你提到的场景:
- 当
model.getValue() === "line1\nline2"时,传入偏移量6调用model.getPositionAt(6),会返回{ lineNumber: 2, column: 1 }。 - 如果需要转换成0-based的行号,只需要把
lineNumber减1即可,得到你想要的{ column: 1, lineNumber: 0 }。
示例代码:
const model = monaco.editor.getModel(monaco.Uri.parse('file:///test.txt')); const position = model.getPositionAt(6); // 转换成0-based行号 const zeroBasedPosition = { lineNumber: position.lineNumber - 1, column: position.column }; console.log(zeroBasedPosition); // 输出 { lineNumber: 0, column: 1 }
内容的提问来源于stack exchange,提问作者waterstopper
相关产品推荐
相关产品推荐

