Как я могу получить контекстно-зависимую синтаксическую раскраску для того же ключевого слова в Vim? - PullRequest
1 голос
/ 30 октября 2010

Я создаю файл синтаксиса vim для нишевого языка, у которого еще нет файла синтаксиса.При настройке простой функции язык имеет следующий синтаксис:

foo(parameter)
    if parameter then
       print("yes")
    else
       print("no")
    end
 end

Я хочу, чтобы конец, связанный с if, имел синтаксическую раскраску для условных выражений, а конец, соединенный с объявлением функции:иметь функцию раскраски синтаксиса.Как мне этого добиться?У меня в настоящее время конец установлен в качестве ключевого слова.Это гарантирует, что оно будет цветным, но соответствует цвету if, а не имени функции.

Спасибо за любую помощь.

1 Ответ

1 голос
/ 30 октября 2010

Вам нужно будет определить некоторые синтаксические регионы, начиная с if и заканчивая end, а еще одну, начиная с объявления функции и заканчивая end.Вы можете использовать опции 'contains' / 'containsin', чтобы разрешить вложение регионов и т. Д. Это далеко не тривиально, но в :help syn-region есть много полезных руководств среди других.Внимательно прочитайте весь файл справки и экспериментируйте.Чтобы начать, вы можете попробовать что-то вроде этого:

syn keyword MyLanguageElse else containedin=MyLanguageIfBlock

syn region MyLanguageIfBlock matchgroup=MyLanguageIf start="^\s*if\>" end="^\s*end\>" containedin=MyLanguageFuncBlock contains=MyLanguageIfBlock
syn region MyLanguageFuncBlock matchgroup=MyLanguageFunc start="^\s*\k*\ze(" end="^\s*end\>"

hi link MyLanguageIf Keyword
hi link MyLanguageElse Keyword
hi link MyLanguageFunc Comment

Удачи!

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