Встроенное выделение синтаксиса в Vim

у меня есть пользовательский формат XML-файла, который может содержать блоки кода в определенных тегах.

например:

<Root>
    <Sql> select * from foo </Sql>
    <MoreJunk> ... </MoreJunk>
    <Python><![CDATA[
    def Bar(*args):
        return False
    ]]></Python>
</Root>

как я могу заставить Vim использовать подсветку синтаксиса SQL для текста внутри <Sql> теги и использовать Python higlighting для текста внутри <Python> теги?

Я знаю, что Vim уже может это сделать, потому что он правильно выделяет Javascript внутри HTML-файлов.

Я попытался проверить файл синтаксиса HTML, но не смог понять его из.

2 ответов


для вашего 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, с этим в качестве ссылки.