Подсветка синтаксиса Vim: разделите пополам код внутри круглых скобок и нацелитесь на каждую сторону

#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 группу цветом фона.)

Этот ответ, конечно, несколько упрощен, поскольку в реальных случаях использования подсветки синтаксиса у вас часто будут гораздо более сложные ситуации, когда вы сопоставляете одни и те же части текста несколько раз, и у вас будут сложные взаимодействия между совпадениями синтаксиса, причем некоторые из них содержатся в других, или настройка следующей группы для соответствия… Но, надеюсь, это поможет вам начать!