Home Explore Blog CI



neovim

57th chunk of `runtime/doc/syntax.txt`
39147e4231d41337b0e5023552423aea80e67e61fbfa1ce60000000100000fa0
 the matched pattern
s+{nr}	start of the matched pattern plus {nr} chars to the right
s-{nr}	start of the matched pattern plus {nr} chars to the left
e	end of the matched pattern
e+{nr}	end of the matched pattern plus {nr} chars to the right
e-{nr}	end of the matched pattern plus {nr} chars to the left
{nr}	(for "lc" only): start matching {nr} chars right of the start

Examples: "ms=s+1", "hs=e-2", "lc=3".

Although all offsets are accepted after any pattern, they are not always
meaningful.  This table shows which offsets are actually used:

		    ms	 me   hs   he	rs   re	  lc ~
match item	    yes  yes  yes  yes	-    -	  yes
region item start   yes  -    yes  -	yes  -	  yes
region item skip    -	 yes  -    -	-    -	  yes
region item end     -	 yes  -    yes	-    yes  yes

Offsets can be concatenated, with a ',' in between.  Example: >
  :syn match String  /"[^"]*"/hs=s+1,he=e-1
<
    some "string" text
	  ^^^^^^		highlighted

Notes:
- There must be no white space between the pattern and the character
  offset(s).
- The highlighted area will never be outside of the matched text.
- A negative offset for an end pattern may not always work, because the end
  pattern may be detected when the highlighting should already have stopped.
- Before Vim 7.2 the offsets were counted in bytes instead of characters.
  This didn't work well for multibyte characters, so it was changed with the
  Vim 7.2 release.
- The start of a match cannot be in a line other than where the pattern
  matched.  This doesn't work: "a\nb"ms=e.  You can make the highlighting
  start in another line, this does work: "a\nb"hs=e.

Example (match a comment but don't highlight the `/* and */`): >vim
  :syntax region Comment start="/\*"hs=e+1 end="\*/"he=s-1
< >
	/* this is a comment */
	  ^^^^^^^^^^^^^^^^^^^	  highlighted
<
A more complicated Example: >vim
  :syn region Exa matchgroup=Foo start="foo"hs=s+2,rs=e+2 matchgroup=Bar end="bar"me=e-1,he=e-1,re=s-1
< >
	 abcfoostringbarabc
	    mmmmmmmmmmm	    match
	      sssrrreee	    highlight start/region/end ("Foo", "Exa" and "Bar")
<
Leading context			*:syn-lc* *:syn-leading* *:syn-context*

Note: This is an obsolete feature, only included for backwards compatibility
with previous Vim versions.  It's now recommended to use the |/\@<=| construct
in the pattern.  You can also often use |/\zs|.

The "lc" offset specifies leading context -- a part of the pattern that must
be present, but is not considered part of the match.  An offset of "lc=n" will
cause Vim to step back n columns before attempting the pattern match, allowing
characters which have already been matched in previous patterns to also be
used as leading context for this match.  This can be used, for instance, to
specify that an "escaping" character must not precede the match: >

  :syn match ZNoBackslash "[^\\]z"ms=s+1
  :syn match WNoBackslash "[^\\]w"lc=1
  :syn match Underline "_\+"
<
	  ___zzzz ___wwww
	  ^^^	  ^^^	  matches Underline
	      ^ ^	  matches ZNoBackslash
		     ^^^^ matches WNoBackslash

The "ms" offset is automatically set to the same value as the "lc" offset,
unless you set "ms" explicitly.


Multi-line patterns					*:syn-multi-line*

The patterns can include "\n" to match an end-of-line.	Mostly this works as
expected, but there are a few exceptions.

When using a start pattern with an offset, the start of the match is not
allowed to start in a following line.  The highlighting can start in a
following line though.  Using the "\zs" item also requires that the start of
the match doesn't move to another line.

The skip pattern can include the "\n", but the search for an end pattern will
continue in the first character of the next line, also when that character is
matched by the skip pattern.  This is because redrawing may start in any line
halfway in a region and there is no check if the skip pattern started in a
previous line. For example, if the skip pattern is "a\nb" and an end pattern
is "b", the end pattern does match in the second line of

Title: Vim Syntax Highlighting: Offset Notes, Examples, Leading Context, and Multi-Line Patterns
Summary
This section provides additional notes on using character offsets in Vim syntax highlighting, including rules about whitespace, highlighting boundaries, and backward compatibility. It includes examples of using offsets to highlight specific parts of a comment and a more complex region. It discusses the obsolete "leading context" feature and suggests using \@<= or \zs instead. Finally, it covers the use of multi-line patterns with \n, noting exceptions and considerations for start and skip patterns.