摩纳哥编辑器获取插入符号的源代码索引

Monaco Editor get source code index of caret

有没有办法在源代码字符串中获取插入符号位置作为索引? 我知道我可以获得位置,这将给我一个包含行和列的对象,但是有没有办法获取或将行 + 列转换为字符串字符索引?

例如,如果我有:

using System;
using System.Data;

我将插入符号放在“.Data”之前,我知道如何获取行 + col 坐标(第 1 行,第 13 行),但如何获取 char 数组索引(应该类似于25)?

好的,不确定这是否是最好的方法,但以下方法似乎可以正常工作:

  1. 获取编辑位置(行+列)。
  2. 获取该位置之前的文本。
  3. 获取该文本的长度

这是一个示例代码:

var line = window.editor.getPosition().lineNumber;
var col = window.editor.getPosition().column;
var textUntilPosition = window.editor.model.getValueInRange({ startLineNumber: 1, startColumn: 1, endLineNumber: line, endColumn: col });
var currentPos = textUntilPosition.length;

您可以使用 Monaco Playground 中的以下示例代码进行尝试。

您要找的函数是ITextModel's getOffsetAt(IPosition)函数。

var model = monaco.editor.createModel(
    "using System;\n" +
    "using System.Data;",
    "csharp"
); 

var editor = monaco.editor.create(document.getElementById("container"), {
    model
});

var offset = model.getOffsetAt({ lineNumber: 2, column: 13 });
alert(offset);