20

I have a custom XML file format which can contain blocks of code within certain tags.

For example:

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

How can I get Vim to use SQL syntax highlighting for the text inside <Sql> tags and use Python higlighting for text inside <Python> tags?

I know Vim can already do this because it correctly highlights Javascript inside HTML files.

I tried inspecting the HTML syntax file but couldn’t figure it out.

1

2 Answers 2

29

For your XML with python example you would have to do something like this:

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

These lines will include the XML syntax and the python syntax, and the specify a python region where VIM will use the python syntax instead of the XML syntax...

Of course, all this is well documented in VIM. See :he :syn-include on how to include syntax files.

Sign up to request clarification or add additional context in comments.

1 Comment

you might want to add containedin=xmlCdata before contains=@Python
2

This document describes how to write your own syntax highlighting. You should probably be able to figure out how the HTML-syntax highlighting works with javascript, with that as a reference.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.