Подтвердить что ты не робот

Встроенный синтаксис highligting в Vim

У меня есть пользовательский формат 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, но не смог понять.

4b9b3361

Ответ 1

Для вашего XML с примером python вам нужно будет сделать что-то вроде этого:

runtime! syntax/xml.vim
unlet b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode  start=+<Python>+ keepend end=+/</Python>+  [email protected]

Эти строки будут содержать синтаксис XML и синтаксис python, а также указать область python, где VIM будет использовать синтаксис python вместо синтаксиса XML...

Конечно, все это хорошо документировано в VIM. Смотрите: he: syn-include о том, как включать файлы синтаксиса.

Ответ 2

Этот документ описывает, как написать собственное выделение синтаксиса. Вероятно, вам удастся выяснить, как подсветка HTML-синтаксиса работает с javascript, с этим в качестве ссылки.