Может ли редактор Monaco использовать другую нумерацию строк в зависимости от модели?

Я использую редактор Monaco для отображения некоторых пользовательских типов файлов.
Для этих файлов мне нужно настроить отображаемые номера строк в зависимости от моделей. Это подходит для одной модели, но не тогда, когда я хочу просмотреть определение в другой модели/файле. (Для содержимого отображаемые номера строк не всегда начинаются с одного и того же номера, а некоторые физические строки в файле не считаются строкой, поэтому рядом с ними не должно отображаться номер строки.)

Я устанавливаю собственные номера строк согласно примеру https://microsoft.github.io/monaco-editor/playground.html?source=v0.49.0#example-interacting-with-the-editor-customizing. -цифры-строки

Это lineNumbersFunc всегда одинаково для каждого отображаемого файла/модели, но это не то, что я хочу.

Есть ли другой способ указать номера строк? (по моделям)
или
Есть ли способ получить модель, к которой относится номер строки в lineNumbersFunc?

Я пробовал использовать editor.getModel() внутри функции, но это всегда возвращает исходную модель, а не ту, которая отображается во встроенном или просмотренном представлении.

--- редактировать ---

Посмотрите пример того, что я пытаюсь сделать на детской площадке

Это происходит при нажатии на кодовую линзу.

Я увидел, что ты нашел способ, который кажется мне великим. Я также пытался найти решение, но безуспешно. И у меня мало знаний о редакторе Монако. Я ценю ваше решение @Matt Lacey

Kazi Tajnur Islam 27.06.2024 12:22

Это то, чем стало SO: копировать ответы только для того, чтобы получить репутацию от наград? Я думаю, что единственная репутация, которую можно испортить, — это ваша собственная.

Matt Lacey 28.06.2024 14:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
149
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел способ сделать это с помощью onDidCreateEditor.

Когда это событие запускается, я смотрю на uri новой модели и использую соответствующий метод для установки другого номера строки.

Так:

const customLineNumbersAlpha = (num) => {
    const map = [ '', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
    return (num < map.length) ? map[num] : ' ';
}

const customLineNumbersFrom10 = (num) => {
    const map = [ '', '10', '11', '12', '13', '14', '15', '16'];
    return (num < map.length) ? map[num] : ' ';
}


monaco.editor.onDidCreateEditor(newEditor => {
    newEditor.onDidChangeModel(e => {

        if (e.newModelUrl == model1.uri)
        {
                newEditor.updateOptions({ lineNumbers: customLineNumbersAlpha });
        }
        else if (e.newModelUrl == model2.uri)
        {
                newEditor.updateOptions({ lineNumbers: customLineNumbersFrom10 });
        }
    });
});

Посмотрите, как он работает на детской площадке

который обеспечивает вывод следующим образом:

Другие вопросы по теме