2010-10-30 1 views
1

Я создаю синтаксический файл vim для нишевого языка, который еще не имеет файла синтаксиса. При настройке простой функции язык имеет следующий синтаксис.Как получить контекстно-зависимую синтаксическую раскраску для одного и того же ключевого слова в Vim?

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

Я хочу конец, который в паре с, если иметь раскраску синтаксиса условными и «конец» в паре с объявлением функции, чтобы иметь функцию раскраску синтаксиса. Как мне это достичь? В настоящее время я заканчиваю ключевое слово. Это гарантирует, что он окрашен, но он соответствует цвету только если, но не имя функции.

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

ответ

1

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

Удачи!

Смежные вопросы