lines). Otherwise the end is assumed to be at the end of the
line (or group of continued lines).
- When a match with a sync pattern is found, the rest of the line (or group of
continued lines) is searched for another match. The last match is used.
This is used when a line can contain both the start and the end of a region
(e.g., in a C-comment like `/* this */`, the last "*/" is used).
There are two ways how a match with a sync pattern can be used:
1. Parsing for highlighting starts where redrawing starts (and where the
search for the sync pattern started). The syntax group that is expected
to be valid there must be specified. This works well when the regions
that cross lines cannot contain other regions.
2. Parsing for highlighting continues just after the match. The syntax group
that is expected to be present just after the match must be specified.
This can be used when the previous method doesn't work well. It's much
slower, because more text needs to be parsed.
Both types of sync patterns can be used at the same time.
Besides the sync patterns, other matches and regions can be specified, to
avoid finding unwanted matches.
[The reason that the sync patterns are given separately, is that mostly the
search for the sync point can be much simpler than figuring out the
highlighting. The reduced number of patterns means it will go (much)
faster.]
*syn-sync-grouphere* *E393* *E394*
:syntax sync match {sync-group-name} grouphere {group-name} "pattern" ..
Define a match that is used for syncing. {group-name} is the
name of a syntax group that follows just after the match. Parsing
of the text for highlighting starts just after the match. A region
must exist for this {group-name}. The first one defined will be used.
"NONE" can be used for when there is no syntax group after the match.
*syn-sync-groupthere*
:syntax sync match {sync-group-name} groupthere {group-name} "pattern" ..
Like "grouphere", but {group-name} is the name of a syntax group that
is to be used at the start of the line where searching for the sync
point started. The text between the match and the start of the sync
pattern searching is assumed not to change the syntax highlighting.
For example, in C you could search backwards for "/*" and "*/". If
"/*" is found first, you know that you are inside a comment, so the
"groupthere" is "cComment". If "*/" is found first, you know that you
are not in a comment, so the "groupthere" is "NONE". (in practice
it's a bit more complicated, because the "/*" and "*/" could appear
inside a string. That's left as an exercise to the reader...).
:syntax sync match ..
:syntax sync region ..
Without a "groupthere" argument. Define a region or match that is
skipped while searching for a sync point.
*syn-sync-linecont*
:syntax sync linecont {pattern}
When {pattern} matches in a line, it is considered to continue in
the next line. This means that the search for a sync point will
consider the lines to be concatenated.
If the "maxlines={N}" argument is given too, the number of lines that are
searched for a match is restricted to N. This is useful if you have very
few things to sync on and a slow machine. Example: >
:syntax sync maxlines=100
You can clear all sync settings with: >
:syntax sync clear
You can clear specific sync patterns with: >
:syntax sync clear {sync-group-name} ..
==============================================================================
12. Listing syntax items *:syntax* *:sy* *:syn* *:syn-list*
This command lists all the syntax items: >
:sy[ntax] [list]
To show the syntax items for one syntax group: >
:sy[ntax] list {group-name}
To list the syntax groups in one cluster: *E392* >
:sy[ntax] list @{cluster-name}
See above for other arguments for the ":syntax" command.
Note that the ":syntax" command can be abbreviated to ":sy", although ":syn"
is mostly used, because it looks