#vim #vim-syntax-highlighting
#vim #vim-подсветка синтаксиса
Вопрос:
Новичок в написании сценариев Vim пытается написать файл синтаксиса для ML-подобного языка.
Что я пытаюсь сделать, так это применить правила подсветки синтаксиса типа к аннотациям типов, которые существуют справа от двоеточия и внутри круглых скобок.
let foo (arg1 : Int) (arg2 : Maybe b) (arg3 : a -> b)
^^^ ^^^^^^^ ^^^^^^
Я знаю, что это не столько вопрос, сколько «пожалуйста, помогите» (извинения!), Но я некоторое время бился головой об это, и я действительно понятия не имею, как я должен это решать. Должен ли я выполнять какую-то рекурсию, или для этого требуется какое-то регулярное выражение или какие-то другие хитрые трюки vim, о которых я не знаю.
🙏
Комментарии:
1. Рассмотрите возможность использования стеков Vi и Vim для вопросов по Vim! Там вы найдете много экспертов Vim. (Многие склонны зависать и здесь, но вы, вероятно, получите больше видимости там.) Приветствия!
Ответ №1:
Вы можете использовать :syntax region
команду для сопоставления разделителей ( :
и )
), это был бы самый простой подход.
Это несколько наивная попытка, она работает, но также помещает разделители внутри синтаксической группы:
syntax region Type start=":" end=")"
Вы можете улучшить его, используя привязки в ваших разделителях, чтобы начинать сопоставление только с первого символа после начального шаблона и прекращать сопоставление с последним символом перед конечным. Смотрите :help :syn-pattern
для получения подробной информации о возможных привязках.
syntax region Type start=":s*"ms=e 1 end="s*)"me=s-1
(При этом также пропускается пробел между типом и разделителями, что может иметь значение, если вы оформляете Type
группу цветом фона.)
Этот ответ, конечно, несколько упрощен, поскольку в реальных случаях использования подсветки синтаксиса у вас часто будут гораздо более сложные ситуации, когда вы сопоставляете одни и те же части текста несколько раз, и у вас будут сложные взаимодействия между совпадениями синтаксиса, причем некоторые из них содержатся в других, или настройка следующей группы для соответствия… Но, надеюсь, это поможет вам начать!