пользовательский синтаксис vim, выделять вхождения класса разными цветами - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в настройках подсветки синтаксиса vim.Попытка создать текстовый файл описания пути вызова:

// Entry point
Class1#mainMethod
    Class1#privateMethod2
    Class2#method3
        Class3#method4
    Class4#method5

В plantUML эквивалент будет:

ExternalActor -> Class1 : mainMethod
Class1 -> Class1 : privateMethod2()
Class1 -> Class2 : method3()
Class2 -> Class3 : method4()
Class1 -> Class4 : method5()

uml

У меня уже есть приличный файл синтаксиса, который выглядит так:

enter image description here

текущий файл синтаксиса выглядит так:

syn keyword celTodo contained TODO FIXME XXX NOTE
syn match celComment "//.*$" oneline contains=celTodo
hi celComment ctermfg=yellow
hi celTodo ctermfg=green

syn match methodCall /\(#\)\@<=\w*/ contained oneline
hi methodCall ctermfg=blue

syn match className /\w*\(#\)\@=/ contained oneline
hi className ctermfg=red


syn region line start='\(\.\)\@<=\w' end='.\($\)\@=' oneline fold transparent contains=celComment,className,methodCall

Задача

Я думаю, что разные цвета фона для каждого экземпляра одного и того же класса помогут лучше понять последовательность. Есть ли способ достичь этого? Так что у Class1 будет другой цвет фона, чем у Class2, 3 и 4. Но у каждого класса всегда один и тот же, непротиворечивый цвет.

1 Ответ

0 голосов
/ 24 октября 2018

Подсветка синтаксиса связывает ключевое слово, сопоставление с шаблоном или регион с синтаксической группой .Соответствующая группа выделения затем (прямо или косвенно через связанные группы) определяет цвет и форматирование текста.

Чтобы иметь разные (фоновые или иные) цвета для каждого имени класса,вам придется определять разные группы синтаксиса и назначать разные группы подсветки.Ваш файл синтаксиса будет иметь не только фиксированный набор команд :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 содержит больше информации о написании синтаксических плагинов.
...