Подсветка синтаксиса связывает ключевое слово, сопоставление с шаблоном или регион с синтаксической группой .Соответствующая группа выделения затем (прямо или косвенно через связанные группы) определяет цвет и форматирование текста.
Чтобы иметь разные (фоновые или иные) цвета для каждого имени класса,вам придется определять разные группы синтаксиса и назначать разные группы подсветки.Ваш файл синтаксиса будет иметь не только фиксированный набор команд :syntax match
, но также цикл, который извлекает совпадения из текущего буфера и создает соответствующие команды :syntax match
и :highlight
при загрузке синтаксиса (используя :execute
).
Тогда возникает проблема обновления, если пользователь добавляет или меняет имена классов.Как правило, синтаксис является статическим, поэтому, как только он загружается, все готово.В вашем случае вам придется определить :autocmd
, которые периодически пересматривают буфер, и добавлять новые имена классов (и, возможно, даже перерабатывать неиспользуемые имена групп подсветки, чтобы у вас не заканчивались цвета).Событие CursorHold
будет хорошим кандидатом на это, но будет задержка, пока не появятся цвета.Доступные цвета - еще одна проблема, если вы хотите сделать этот синтаксис доступным для других пользователей.Количество цветов может сильно варьироваться, и трудно придумать цвета фона, которые хорошо работают с различными цветовыми схемами.
Резюме
Это возможно, но это было бы необычно для синтаксиса, иимеют побочные эффекты, такие как задержки в обновлении или низкая производительность.(Я видел, что это используется для выделения имен функций из файла тегов , хотя.) Некоторые пользователи определенно хотели бы отключить это.
Альтернатива
Для маленькихДля файлов с несколькими (или очень разными) именами классов эта дополнительная подсветка, вероятно, не нужна.Для больших файлов с большим количеством классов, когда все загорается, это выглядит как рождественская елка, и все цвета могут быть скорее отвлекающими, чем полезными.Я бы предпочел, чтобы пользователь выделил некоторые интересующие вас классы по требованию.Мой плагин Mark предоставляет для этого общую функциональность, которая не мешает подсветке синтаксиса, и поставляется с цветовой палитрой, которая похожа на подсветку текстовых маркеров.Я часто использую это, чтобы лучше ориентироваться в файлах журналов или унаследованных кодах.(На странице плагина есть ссылки на альтернативные плагины; их несколько.)
Ваш синтаксис
- Имена групп обычно имеют общий префикс, который совпадает с именем вашего синтаксиса.Если это
cel
, используйте celMethodCall
вместо methodCall
и т. Д. - Я бы поставил команды
:hi
все внизу;большинство синтаксических плагинов делают это следующим образом. - Особенно, если вы собираетесь позже поделиться синтаксисом, отдавайте предпочтение
:hi link
по сравнению с существующими синтаксическими группами (:help highlight-groups
) вместо определения ваших собственных цветов.Даже для вашего личного использования, определение ваших цветов в вашем ~/.vimrc
имеет то преимущество, что у вас есть единственное место для его адаптации и повторного использования, вместо того, чтобы искать различные синтаксические сценарии. - Используя
:hi def
, пользователи могутнастроить синтаксис, например, в их ~/.vimrc
.:help 44.12
содержит больше информации о написании синтаксических плагинов.