sponsor Vim development Vim logo Vim Book Ad

SyntaxRange : Define a different filetype syntax on regions of a buffer.

 script karma  Rating 18/6, Downloaded by 567    Comments, bugs, improvements  Vim wiki

created by
Ingo Karkat
script type
This plugin provides commands and functions to set up regions in the current
buffer that either use a syntax different from the buffer's 'filetype', or
completely ignore the syntax.

The code to include a different syntax in a region is based on

For quick, ad-hoc manipulation of the syntax withing a range of lines, the
following commands are provided:

:[range]SyntaxIgnore    Ignore the buffer's filetype syntax for the current
                        line / lines in [range]. (Top-level keywords will
                        still be highlighted.)
                        This can be a useful fix when some text fragments
                        confuse the syntax highlighting. (For example, when
                        buffer syntax set to an inlined here-document is
                        negatively affected by the foreign code surrounding
                        the here-document.)

:[range]SyntaxInclude {filetype}
                        Use the {filetype} syntax for the current line / lines
                        in [range].

                        Line numbers in [range] are fixed; i.e. they do not
                        adapt to inserted / deleted lines. But when in a
                        range, the last line ($) is interpreted as "end of

For finer control and use in custom mappings or syntax tweaks, the following
functions can be used. You'll find the details directly in the
.vim/autoload/SyntaxRange.vim implementation file.

SyntaxRange#Include( startPattern, endPattern, filetype, ... )
                        Use the {filetype} syntax for the region defined by
                        {startPattern} and {endPattern}.
SyntaxRange#IncludeEx( regionDefinition, filetype )
                        Use the {filetype} syntax for the region defined by

To highlight the text between the markers
    int i = 42;
with C syntax, and make the markers themselves fade into the background:
    :call SyntaxRange#Include('@begin=c@', '@end=c@', 'c', 'NonText')

To highlight inline patches inside emails:
    :call SyntaxRange#IncludeEx('start="^changeset\|^Index: \|^diff \|^--- .*\%( ----\)\@<!$" skip="^[-+@       ]" end="^$"', 'diff')
To install this automatically for the "mail" filetype, put above line into a
script in ~/.vim/after/syntax/mail/SyntaxInclude.vim
install details
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vmb.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
    vim SyntaxRange*.vmb.gz
    :so %
To uninstall, use the :RmVimball command.

- Requires Vim 7.0 or higher.

To automatically include a syntax in a certain {filetype}, you can put the
command into a script in
If you want to include a syntax in several (or even all) syntaxes, you can put
this into your vimrc:
    :autocmd Syntax * call SyntaxRange#Include(...)

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
SyntaxRange-1.01.vmb.gz 1.01 2013-11-21 7.0 Ingo Karkat Avoid "E108: No such variable: b:current_syntax" when the (misbehaving) included syntax doesn't set it. Reported by o2genum at http://stackoverflow.com/a/16162412/813602.
SyntaxRange.vba.gz 1.00 2012-08-13 7.0 Ingo Karkat Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
SourceForge.net Logo