Встроенная подсветка синтаксиса в Vim - PullRequest
13 голосов
/ 06 февраля 2009

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

Ответы [ 2 ]

23 голосов
/ 06 февраля 2009

Для вашего примера 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. См. : he: syn-include о том, как включать файлы синтаксиса.

1 голос
/ 06 февраля 2009

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

...