Как заставить мягкую переноску из режима редактора ACE?

Я пишу собственный режим для редактора ACE, чтобы он поддерживал мой шаблонный язык.

В языке есть конструкция для вставки новой строки:

foo{\n}bar

Он будет отображен с новой строкой, как показано ниже:

foo
bar

Я хотел бы подражать этому в редакторе и заставить мягкую обертку после {\n}:

1 | foo{\n}
  | bar

Есть ли способ сделать это в моем режиме?

Обновление: FWIW, вот ссылка на мой файл режима.

1 ответ

Без кода довольно сложно воспроизвести [РЕДАКТИРОВАТЬ: см. Ниже], но в соответствии с диаграммой классов вам нужно взаимодействовать с VirtualRenderer, чтобы изменить способ отображения вещей.

Требуется тема для стиля кода. (Вы можете выбрать их в редакторе на Theme-меню). Темы css (+js) файлов, что открывает возможность использования этого трюка для вставки новой строки после вашего {\n} Элемент класса.

РЕДАКТИРОВАТЬ: код был добавлен

В зависимости от положения \n (несколько частей регулярного выражения могут совпадать), вы можете использовать

{
    token: function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
      return [
        "constant",
        "keyword.operator",
        (arg3 === '\n') ? "newline" : "variable.parameter",
        "keyword.operator",
        "string",
        "keyword.operator",
        "variable"
      ],
    regex: /([%]?)([=]?)([^|>}]*)([|]?)([^>}]*)([>]?)([^}]*)/
}

а затем есть

.ace_newline:after {
  content:"\a";
  white-space: pre;
}

в вашей пользовательской теме.

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