How to syntax highlight fragments of code in one language embedded in the source code in another language in Vim?

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.


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.