You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:49:54