Редактор кода, не зависящий от языка, с расширенными функциями форматирования/выделения

Я ищу редактор кода со специфическими функциями. Для Windows, коммерческий или бесплатный.

Список необходимых функций:

  1. Редактор должен быть независимым от языка, а языковые функции должны быть настраиваемыми и импортируемыми/экспортируемыми через внешние определения, по возможности прозрачными для пользователя. Так, например, если я создаю свой собственный язык, я могу создать собственный лексер и схемы выделения и т. д. Очевидно, что возможность использовать или создавать расширенные функции для любого языка (например, средства проверки грамматики, списки переменных/функций и т. д.) была бы замечательной.
  2. Скриптовый/программируемый : должен иметь поддержку скриптов (в идеале с Python) с доступом к тексту, курсору и другим внутренним функциям редактора, чтобы я мог программировать функции редактирования и привязывать их к ярлыкам. В идеале с возможностью использования графического интерфейса редактора (например, показать список в боковой панели и т.д.).
  3. Настраиваемые функции подсветки синтаксиса. Т.е. не только базовые вещи, но и возможность определять стили для отдельных символов и последовательностей (например, сопоставление регулярных выражений), а также чтобы можно было установить другой шрифт , размер и цвет для соответствия. (обратите внимание на ударение). [*]
  4. Линии могут быть разной высоты . Например, если я установлю стилизатор на шрифт 5pt, и он будет соответствовать всей строке, строка будет иметь высоту 50% по сравнению с высотой строк с размером 10pt.
  5. В идеале с поддержкой отступов строк (древовидное редактирование). Уровень отступа (уровень вложенности) должен быть доступен через сценарии (например, для создания исполняемого кода Python). ( Примечание : пожалуйста, не путайте отступы со вставкой пробела или символа табуляции! Отступы здесь = нередактируемый горизонтальный пробел).

[*] Важное примечание к требованию №3: несмотря на то, что некоторые редакторы имеют расширенные возможности форматирования, общая проблема заключается в том, что они применимы только к так называемым «токенам» (например, ключевым словам, функциям). Так что обратите внимание, что этого недостаточно. Чтобы лучше понять, что я имею в виду, вот конкретные примеры того, что мне нужно сделать:

  • установить шрифт/размер только для кириллических букв внутри строк;
  • установить шрифт/размер только для цифр внутри идентификаторов;
  • установить шрифт/размер для символа дефиса внутри слова; так далее...

Дополнительные критерии (менее важные):

  • он должен быть быстрым и отзывчивым, без особых наворотов;
  • было бы здорово, если бы он активно развивался, так что хотя бы есть шанс, что будут добавлены какие-то полезные функции;
  • расширенный API сценариев для интерактивных функций, например, возможность считывать координаты мыши и определять символ или линию под курсором мыши;
  • адекватная поддержка табулирования (с учетом отступов);
  • никаких навязчивых раздражающих функций, таких как мигание, анимация, переключение фокуса, перегрузка процессора и жесткого диска и т. д.

Вопрос:

Пожалуйста, предложите редактор, который поддерживает все вышеперечисленные функции.
Даже если не все поддерживается из коробки, но возможно через скрипты/расширения, пожалуйста, также дайте предложение и некоторые описания.

Другими словами, даже если редактор не совсем редактор кода, но он может выполнить требования, он также может дать полезный ответ.

Не в качестве реального примера, а просто для иллюстрации альтернативного подхода: например, можно использовать, например, Word или Adobe InDesign для редактирования кода, затем генерировать исходники и передавать их другим инструментам. Да, это было бы абсурдно для этой задачи, но просто хочу сказать, что, например, в InDesign все функции выделения и, например, генерация кода возможны с помощью сценариев, так что в теории это жизнеспособный вариант.


Что я тестировал до сих пор со списками по функциям:

Блокнот++

Этот редактор отвечает многим требованиям, но все же многие функции ограничены. Супер быстро, без наворотов. Он основан на движке Scintilla, который имеет множество расширенных функций, опережающих свое время. Кое-что возможно через плагины. Следует отметить, что разработка подключаемого модуля в основном требует разработки приложения на C++, что может быть довольно сложной задачей.

Итак, к моему списку функций:

  1. Частично. Например, чтобы определить выделение для пользовательского языка, необходимо использовать UDL, но это ограничено (см. 3.). Встроенные лексеры жестко закодированы, dev-гайдов нет.
  2. Да, например, с помощью плагина PythonScript, и это хорошо.
  3. Частично. Проблема в том, что он не поддерживает совпадения на основе регулярных выражений.
    Таким образом, я могу определить стили с различными шрифтами/размерами, но я могу применить их только к токенам, которые определены лексером (жестко закодированы) или через UDL, но UDL ограничен унифицированным токенизатором грамматики (без пользовательских групп операторов , никаких пользовательских последовательностей совпадений). Таким образом, в основном композитор Scintilla поддерживает это, но редактор не предоставляет это пользователю, поэтому нет возможности использовать его напрямую.
  4. Нет (все линии имеют одинаковую высоту).
  5. Нет.

гВИМ

Отличный редактор, супер быстрый и настраиваемый. Но довольно ограничен в графических возможностях.

  1. Да.
  2. Да.
  3. Нет. (при этом ограничивается только моноширинными шрифтами , но в качестве приятного бонуса имеет подсветку на основе регулярных выражений)
  4. Нет.
  5. Нет.

VSCode

Я тестировал его только некоторое время, поэтому не могу быть уверен в некоторых функциях. Он довольно медленный, поэтому на слабых машинах его вряд ли можно будет использовать.

  1. ???. Кажется, что он имеет тенденцию расширяться для поддержки любого языка через расширение, но общая картина неясна, и его развитие кажется довольно хаотичным.
  2. ???. Возможны расширения, но я не смог найти четких инструкций или руководства для разработчиков. Также кажется, что многие части основного редактора вообще недоступны для настройки/доступа.
  3. Нет.
  4. Нет.
  5. Нет.
Я бы взглянул на Geany - я знаю, что он делает 1, 2 можно сделать с помощью разработки плагинов, 3 в некоторой степени родной, иначе см. 2 и плагины, 4 с помощью плагинов/разработки плагинов, и я думаю, 5, но я не делай питон...
@ivanivan Geany основан на Scintilla, как и Notepad++. Это должно означать, что 4 и 5 — Нет (если только это не станет функцией Scintilla). Или я что-то упускаю?
@ivanivan та же ситуация с # 1/3 - для определения лексера пользовательского языка, скорее всего, вам понадобится поддерживать форк редактора и нужно скомпилировать весь проект, что меня не очень волнует.

Ответы (3)

SynWrite (бесплатное программное обеспечение; CudaText является заменой):

  • язык-агностик: проверьте.
  • Скриптовый/программируемый: отметьте, через плагины Python.
  • настраиваемые функции подсветки синтаксиса: проверка через внутренний диалог редактора Lexer. Диалог также поддерживает различные имена/размеры шрифтов для фрагментов, т.е. "токенов".
  • Строки могут быть разной высоты: проверьте, редактор адаптирует высоту строки к размерам "токенов" в этой строке.
  • поддержка отступов строк: проверьте, Lexer Editor позволяет настроить сворачивание на основе отступов.
  • Важное примечание к требованию №3 - не поддерживается, lexer highlite основан на "токенах".
  • быстрый и отзывчивый: проверить.

Вы можете попробовать Sublime Text, он работает довольно хорошо и действительно настраивается с помощью плагинов Python и тому подобного. Не уверен насчет ваших пунктов 3, 4 и 5, но, возможно, они достижимы с помощью плагинов.

Вероятно, стоит добавить Textadept в этот Q&A. Взгляд на ! символы ниже предполагают, что это не подходит. Но я публикую это, потому что (а) я действительно не уверен в этом; и (б) он настолько быстрый, мощный и расширяемый, что его стоит попробовать. Вот как это соответствует критериям ОП:

  1. Редактор не должен зависеть от языка | ДаДа.
  2. Скриптовый/программируемый | ДаДа, но с Lua , а не с Python.
  3. Настраиваемые функции подсветки синтаксиса | ПримечаниеЯ так думаю , но не уверен. См. руководство по " синтаксису лексера ", чтобы узнать, соответствует ли оно необходимости.
  4. Линии могут быть разной высоты | ПримечаниеНе уверена! Никогда этого не делал, но если другие критерии соблюдены, стоит проверить это.
  5. В идеале с поддержкой отступов строк (древовидное редактирование) | ПримечаниеОпять же, не уверен.

Дополнительные примечания :

  • очень активно поддерживается, с отзывчивым разработчиком (на самом деле действительно впечатляет)
  • на основе сцинтиллы
  • очень хорошо задокументировано
  • учитывая интерес ОП к кириллице, вот запись с Wikipedia.ru .