Monaco Editor получает индекс исходного кода каретки - PullRequest
0 голосов
/ 29 апреля 2018

Есть ли способ получить позицию каретки как индекс в строке исходного кода? Я знаю, что могу получить позицию, которая даст мне объект, содержащий строку и столбец, но есть ли способ получить или преобразовать строку + столбец в строковый символ char?

Например, если у меня есть:

using System;
using System.Data;

и я помещаю курсор как раз перед ".Data", я знаю, как получить координату line + col (строка 1, столбец 13), но как получить индекс массива char (должно быть что-то вроде 25)

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать следующий пример кода на Monaco Playground , чтобы попробовать все.

Функция, которую вы ищете: ITextModel 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);
0 голосов
/ 30 апреля 2018

Хорошо, не уверен, что это лучший способ, но кажется, что следующее работает правильно:

  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;
...