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.

ib.
  • 27,830
  • 11
  • 80
  • 100
HS.
  • 15,442
  • 8
  • 42
  • 48

2 Answers2

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.

f3lix
  • 29,500
  • 10
  • 66
  • 86
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.

Brian M. Hunt
  • 81,008
  • 74
  • 230
  • 343
Simon B. Jensen
  • 978
  • 5
  • 12