Подсветка встроенного синтаксиса в Vim
-
21-08-2019 - |
Вопрос
У меня есть собственный формат файла XML, который может содержать блоки кода в определенных тегах.
Например:
<Root>
<Sql> select * from foo </Sql>
<MoreJunk> ... </MoreJunk>
<Python><![CDATA[
def Bar(*args):
return False
]]></Python>
</Root>
Как я могу заставить Vim использовать подсветку синтаксиса SQL для текста внутри <Sql>
теги и использовать подсветку Python для текста внутри <Python>
теги?
Я знаю, что Vim уже может это сделать, потому что он правильно выделяет Javascript внутри файлов HTML.
Я попытался проверить файл синтаксиса HTML, но не смог этого понять.
Решение
Для вашего примера XML с Python вам нужно будет сделать что-то вроде этого:
runtime! syntax/xml.vim
unlet b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode start=+<Python>+ keepend end=+/</Python>+ contains=@Python
Эти строки будут включать синтаксис XML и синтаксис Python, а также указывать регион Python, где VIM будет использовать синтаксис Python вместо синтаксиса XML...
Разумеется, все это хорошо документировано в VIM.Видеть :он :syn-include о том, как включать файлы синтаксиса.
Другие советы
Этот документ описывает, как написать собственную подсветку синтаксиса.Вероятно, вы сможете понять, как подсветка синтаксиса HTML работает с javascript, используя это в качестве справки.