Commit: runtime(vim): Update base syntax, improve :syntax group list arg matching

1 view
Skip to first unread message

Christian Brabandt

unread,
Feb 28, 2026, 12:31:50 PM (4 days ago) Feb 28
to vim...@googlegroups.com
runtime(vim): Update base syntax, improve :syntax group list arg matching

Commit: https://github.com/vim/vim/commit/b901fa9a6adbc0b1404b1e6c19f83941820b1d91
Author: Doug Kearns <dougk...@gmail.com>
Date: Sat Feb 28 17:20:42 2026 +0000

runtime(vim): Update base syntax, improve :syntax group list arg matching

Attempt to match all variations of group name and comma separator across
continuation lines.

Fixes issues:
- #18491 (Two ")"s are incorrectly colored 'vimOperError' in
syntax/mail.vim), reported by @lkintact
- #19366 (highlight error for contains elements in a new line), reported
by Maxim Kim

fixes: #18491
fixes: #19366

Signed-off-by: Doug Kearns <dougk...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index dc25ea245..d73688927 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougk...@gmail.com>
-" Last Change: 2026 Jan 30
+" Last Change: 2026 Feb 20
" Former Maintainer: Charles E. Campbell

" DO NOT CHANGE DIRECTLY.
@@ -1784,17 +1784,32 @@ Vim9 syn match vimWincmd "\s\=\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite n

" Syntax: {{{2
"=======
-syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
-syn region vimGroupList contained start=/^\s*["#]\ \|^\s*\\|[^[:space:],]\+\s*,/ skip=/\s*
\s*\%(\\|["#]\ \)\|^\s*\%(\\|["#]\ \)/ end=/[^[:space:],]\s*$\|[^[:space:],]\ze\s\+\w/ contains=@vimContinue,vimGroupSpecial
+syn region vimGroupList contained
+ \ start="\S"
+ \ skip=+
\s*\%(\\|["#]\ \)+
+ "\ need to consume the whitespace
+ \ end="\s"he=e-1
+ \ end="$"
+ \ contains=@vimGroupListContinue,vimGroupSpecial,vimGroupListContinueComma
syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
+syn match vimGroupListComma contained ","
+syn match vimGroupListContinueComma contained "\s\+,\s*\|,\s\+" contains=vimGroupListComma
+syn match vimGroupListContinueComma contained "\s*,\s*\%(
\s*\%(\\s\+\|["#]\ .*\)\)\+" contains=@vimGroupListContinue,vimGroupListComma
+
+syn match vimGroupListEquals contained "=" skipwhite skipnl nextgroup=vimGroupListContinueStart,vimGroupList
+" the first continuation line does not terminate the list at whitepace after \
+syn match vimGroupListContinueStart contained "^\%(\s*["#]\ .*
\)*\s*\\s\+" skipwhite nextgroup=vimGroupList contains=@vimGroupListContinue transparent
+
+syn match vimGroupListContinue contained "^\s*\" skipwhite skipnl nextgroup=@vimGroupListContinue,vimGroupListContinueComma contains=vimWhitespace
+syn match vimGroupListContinueComment contained '^\s*["#]\ .*' skipwhite skipnl nextgroup=@vimGroupListContinue contains=vimWhitespace
+syn cluster vimGroupListContinue contains=vimGroupListContinue,vimGroupListContinueComment

if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
- syn match vimSynError contained "\i\+"
- syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
+ syn match vimSynError contained "\i\+"
endif
-syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
+syn match vimSynContains contained "\<contains\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimSynContainedin contained "\<containedin\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimSynNextgroup contained "\<nextgroup\>" skipwhite nextgroup=vimGroupListEquals
if has("conceal")
" no whitespace allowed after '='
syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
@@ -1812,13 +1827,13 @@ endif
syn keyword vimSynCase contained ignore match

" Syntax: clear {{{2
-syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
+syn keyword vimSynType contained clear

" Syntax: cluster {{{2
syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
-syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
+syn match vimGroupAdd contained "\<add\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimGroupRem contained "\<remove\>" skipwhite nextgroup=vimGroupListEquals

" Syntax: conceal {{{2
syn match vimSynType contained "\<conceal\>" skipwhite nextgroup=vimSynConceal,vimSynConcealError
@@ -1841,16 +1856,17 @@ syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep
syn match vimSynIskeywordSep contained ","

" Syntax: include {{{2
-syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
+syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeCluster
+syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"

" Syntax: keyword {{{2
-syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
+syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"

" Syntax: match {{{2
-syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
+syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
@@ -1860,9 +1876,9 @@ syn keyword vimSynType contained enable list manual off on reset

" Syntax: region {{{2
syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
-syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
+syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
-syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\|\\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup
+syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup
syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
@@ -2520,11 +2536,14 @@ if !exists("skip_vim_syntax_inits")
hi def link vimGrep vimCommand
hi def link vimGrepadd vimCommand
hi def link vimGrepBang vimBang
+ hi def link vimGroup Type
hi def link vimGroupAdd vimSynOption
+ hi def link vimGroupListEquals vimSynOption
+ hi def link vimGroupListContinue vimContinue
+ hi def link vimGroupListContinueComment vimContinueComment
hi def link vimGroupName Normal
hi def link vimGroupRem vimSynOption
hi def link vimGroupSpecial Special
- hi def link vimGroup Type
hi def link vimHelp vimCommand
hi def link vimHelpBang vimBang
hi def link vimHelpgrep vimCommand
@@ -2689,7 +2708,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSynFoldlevel Type
hi def link vimSynIskeyword Type
hi def link vimSynIskeywordSep Delimiter
- hi def link vimSynKeyContainedin vimSynContains
+ hi def link vimSynContainedin vimSynContains
hi def link vimSynKeyOpt vimSynOption
hi def link vimSynMtchGrp vimSynOption
hi def link vimSynMtchOpt vimSynOption
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_00.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_00.dump
index 7707bb33e..c350e5fb9 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_00.dump
@@ -1,4 +1,5 @@
>"+0#0000e05#ffffff0| |V|i|m| |:|s|y|n|t|a|x| |c|o|m@1|a|n|d| +0#0000000&@53
+|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|G|r|o|u|p|L|i|s|t| |T|o|d|o| +0#0000000&@32
@75
@75
|"+0#0000e05&| |:|s|y|n|-|c|a|s|e| +0#0000000&@63
@@ -7,14 +8,13 @@
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|a|s|e| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&@57
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|a|s|e| +0#0000000&|i+0#00e0003&|g|n|o|r|e| +0#0000000&@56
@75
-|"+0#0000e05&| |:|s|y|n|-|c|o|n|c|e|a|l| +0#0000000&@60
+|"+0#0000e05&| |:|s|y|n| |c|l|e|a|r| +0#0000000&@62
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&@60
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&|o+0#00e0003&|n| +0#0000000&@57
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&|o+0#00e0003&|f@1| +0#0000000&@56
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|@|t|e|s|t|C|l|u|s|t|e|r| @49
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|t|e|s|t|G|r|o|u|p| @52
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|@|t|e|s|t|C|l|u|s|t|e|r| |t|e|s|t|G|r|o|u|p| @39
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|t|e|s|t|G|r|o|u|p| |@|t|e|s|t|C|l|u|s|t|e|r| @39
@75
-|"+0#0000e05&| |:|s|y|n|-|f|o|l|d|l|e|v|e|l| +0#0000000&@58
+|"+0#0000e05&| |:|s|y|n|-|c|o|n|c|e|a|l| +0#0000000&@60
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&@58
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&|s+0#00e0003&|t|a|r|t| +0#0000000&@52
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
index 0898a8f10..f55f9875a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_01.dump
@@ -1,20 +1,20 @@
-|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&|o+0#00e0003&|f@1| +0#0000000&@56
+|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|t|e|s|t|G|r|o|u|p| @52
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|@|t|e|s|t|C|l|u|s|t|e|r| |t|e|s|t|G|r|o|u|p| @39
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|t|e|s|t|G|r|o|u|p| |@|t|e|s|t|C|l|u|s|t|e|r| @39
+@75
+|"+0#0000e05&| |:|s|y|n|-|c|o|n|c|e|a|l| +0#0000000&@60
+> @74
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&@60
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&|o+0#00e0003&|n| +0#0000000&@57
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|o|n|c|e|a|l| +0#0000000&|o+0#00e0003&|f@1| +0#0000000&@56
@75
|"+0#0000e05&| |:|s|y|n|-|f|o|l|d|l|e|v|e|l| +0#0000000&@58
@75
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&@58
->s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&|s+0#00e0003&|t|a|r|t| +0#0000000&@52
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&|s+0#00e0003&|t|a|r|t| +0#0000000&@52
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|f+0#00e0003&|o|l|d|l|e|v|e|l| +0#0000000&|m+0#00e0003&|i|n|i|m|u|m| +0#0000000&@50
@75
-|"+0#0000e05&| |:|s|y|n|-|i|s|k|e|y|w|o|r|d| +0#0000000&@58
-@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&@58
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&@52
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&|@+0#00e0003&|,+0#e000e06&|4+0#00e0003&|8|-|5|7|,+0#e000e06&|1+0#00e0003&|9|2|-|2|5@1|,+0#e000e06&|$+0#00e0003&|,+0#e000e06&|_+0#00e0003&| +0#0000000&@38
-@75
-|"+0#0000e05&| |:|s|y|n|-|l|i|s|t| +0#0000000&@63
+|"+0#0000e05&| |:|s|y|n|-|i|n|c|l|u|d|e| +0#0000000&@60
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&@63
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&|F|o@1| @59
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&|@|B|a|r| @58
-@57|1|9|,|1| @10|5|%|
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|n|c|l|u|d|e| +0#0000000&|@|F|o@1| |<+0#00e0003&|s+0#0000000&|f|i|l|e|>+0#00e0003&|:+0#0000000&|p+0#af5f00255&|:+0#0000000&|h+0#af5f00255&|/+0#0000000&|f|o@1|.|v|i|m| @35
+@57|1|9|,|0|-|1| @8|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
index e86d0df0f..2253a0258 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_02.dump
@@ -1,20 +1,20 @@
-|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&|@|B|a|r| @58
+|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|i+0#00e0003&|n|c|l|u|d|e| +0#0000000&|@|F|o@1| |<+0#00e0003&|s+0#0000000&|f|i|l|e|>+0#00e0003&|:+0#0000000&|p+0#af5f00255&|:+0#0000000&|h+0#af5f00255&|/+0#0000000&|f|o@1|.|v|i|m| @35
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|n|c|l|u|d|e| +0#0000000&|<+0#00e0003&|s+0#0000000&|f|i|l|e|>+0#00e0003&|:+0#0000000&|p+0#af5f00255&|:+0#0000000&|h+0#af5f00255&|/+0#0000000&|f|o@1|.|v|i|m| @40
@75
-|"+0#0000e05&| |:|s|y|n|-|s|p|e|l@1| +0#0000000&@62
+|"+0#0000e05&| |:|s|y|n|-|i|s|k|e|y|w|o|r|d| +0#0000000&@58
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&@62
->s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|t+0#00e0003&|o|p|l|e|v|e|l| +0#0000000&@53
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|n+0#00e0003&|o|t|o|p|l|e|v|e|l| +0#0000000&@51
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| +0#0000000&@54
+>s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&@58
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&@52
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|i+0#00e0003&|s|k|e|y|w|o|r|d| +0#0000000&|@+0#00e0003&|,+0#e000e06&|4+0#00e0003&|8|-|5|7|,+0#e000e06&|1+0#00e0003&|9|2|-|2|5@1|,+0#e000e06&|$+0#00e0003&|,+0#e000e06&|_+0#00e0003&| +0#0000000&@38
@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|c@1|o|m@1|e|n|t| +0#0000000&@54
+|"+0#0000e05&| |:|s|y|n|-|l|i|s|t| +0#0000000&@63
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&@54
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|F|o@1| @50
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n
-|"| +0#0000000&@73
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|F|o@1| |m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t
-@1|e|r|n|"| +0#0000000&@69
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&@63
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&|F|o@1| @59
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|l+0#00e0003&|i|s|t| +0#0000000&|@|B|a|r| @58
@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|f|r|o|m|s|t|a|r|t| +0#0000000&@53
-@57|3|7|,|1| @9|1|2|%|
+|"+0#0000e05&| |:|s|y|n|-|s|p|e|l@1| +0#0000000&@62
+@75
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&@62
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|t+0#00e0003&|o|p|l|e|v|e|l| +0#0000000&@53
+@57|3|7|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
index 50b0c5073..cef458862 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_03.dump
@@ -1,20 +1,20 @@
-|"+0#0000e05#ffffff0| |:|s|y|n|-|s|y|n|c|-|f|r|o|m|s|t|a|r|t| +0#0000000&@53
+|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|t+0#00e0003&|o|p|l|e|v|e|l| +0#0000000&@53
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|n+0#00e0003&|o|t|o|p|l|e|v|e|l| +0#0000000&@51
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|p|e|l@1| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| +0#0000000&@54
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|f+0#00e0003&|r|o|m|s|t|a|r|t| +0#0000000&@53
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|f+0#00e0003&|r|o|m|s|t|a|r|t| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r
-|n|"| +0#0000000&@72
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|c@1|o|m@1|e|n|t| +0#0000000&@54
> @74
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|l|i|n|e|b|r|e|a|k|s| +0#0000000&@52
-@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&@50
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@7
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&@54
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|F|o@1| @50
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n
+|"| +0#0000000&@73
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&@1|o|m@1|e|n|t| +0#0000000&|F|o@1| |m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t
+@1|e|r|n|"| +0#0000000&@69
@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|l|i|n|e|c|o|n|t| +0#0000000&@54
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|f|r|o|m|s|t|a|r|t| +0#0000000&@53
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@44
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&@7
-@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|(|m|i|n|||m|a|x|)|l|i|n|e|s| +0#0000000&@48
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|f+0#00e0003&|r|o|m|s|t|a|r|t| +0#0000000&@53
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|f+0#00e0003&|r|o|m|s|t|a|r|t| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r
+|n|"| +0#0000000&@72
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&@39
-@57|5|2|,|0|-|1| @7|1|8|%|
+@57|5@1|,|0|-|1| @7|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
index 0b45809b7..0825ee335 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_04.dump
@@ -1,20 +1,20 @@
-|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&@39
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@7
-|"+0#0000e05&| |o|b|s|o|l|e|t|e| +0#0000000&@64
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|s|=|4+0#e000002&|2| +0#0000000&@54
+| +0&#ffffff0@74
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|l|i|n|e|b|r|e|a|k|s| +0#0000000&@52
@75
->"+0#0000e05&| |:|s|y|n|-|s|y|n|c| |s|y|n|c| |p|a|t@1|e|r|n|s| +0#0000000&@49
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&@50
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@7
+> @74
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|l|i|n|e|c|o|n|t| +0#0000000&@54
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|h|e|r|e| +0#0000000&@1|t|e|s|t|F|o@1| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@14
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|t|h|e|r|e| +0#0000000&|t|e|s|t|B|a|r| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@14
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|h|e|r|e| +0#0000000&@1|N|O|N|E| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@17
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|t|h|e|r|e| +0#0000000&|N|O|N|E| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@17
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@44
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&@7
@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c| |s|k|i|p| |g|r|o|u|p|s| +0#0000000&@51
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|(|m|i|n|||m|a|x|)|l|i|n|e|s| +0#0000000&@48
@75
-|s+0#af5f00255&|y|n| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@40
-|s+0#af5f00255&|y|n| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e
-|n|d|-|p|a|t@1|e|r|n|"| +0#0000000&@63
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&@39
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|i|n|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|m+0#00e0003&|a|x|l|i|n|e|s|=|4+0#e000002&|2| +0#0000000&|l+0#00e0003&|i|n|e|b|r|e|a|k|s|=|1+0#e000002&| +0#0000000&|l+0#00e0003&|i|n|e|c|o|n|t| +0#0000000&|"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@7
+|"+0#0000e05&| |o|b|s|o|l|e|t|e| +0#0000000&@64
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|l+0#00e0003&|i|n|e|s|=|4+0#e000002&|2| +0#0000000&@54
@75
-|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|c|l|e|a|r| +0#0000000&@57
-@57|7|0|,|1| @9|2|5|%|
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c| |s|y|n|c| |p|a|t@1|e|r|n|s| +0#0000000&@49
+@57|7|0|,|0|-|1| @7|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
index ee3fe1913..57afb7816 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_05.dump
@@ -1,20 +1,20 @@
-|"+0#0000e05#ffffff0| |:|s|y|n|-|s|y|n|c|-|c|l|e|a|r| +0#0000000&@57
+|"+0#0000e05#ffffff0| |:|s|y|n|-|s|y|n|c| |s|y|n|c| |p|a|t@1|e|r|n|s| +0#0000000&@49
@75
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&@57
-|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|F|o@1| @53
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|h|e|r|e| +0#0000000&@1|t|e|s|t|F|o@1| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@14
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|t|h|e|r|e| +0#0000000&|t|e|s|t|B|a|r| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@14
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|h|e|r|e| +0#0000000&@1|N|O|N|E| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@17
+>s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|S|y|n|c|M|a|t|c|h| |g+0#00e0003&|r|o|u|p|t|h|e|r|e| +0#0000000&|N|O|N|E| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@17
+@75
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c| |s|k|i|p| |g|r|o|u|p|s| +0#0000000&@51
@75
->"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t|s| |a|r|e| |n|o|t| |e|x|p|l|i|c|i|t|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |:|s|y|n|t|a|x|,| |s|e@1| |:|h|e|l|p| |:|c|o|m@1|e|n|t
-|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@20
-|"+0#0000e05&| +0#0000000&|N+0#e000e06&|O|T|E|:| +0#0000e05&|c|o|m@1|e|n|t|s| |n|o|t| |c|u|r@1|e|n|t|l|y| |s|u|p@1|o|r|t|e|d| +0#0000000&@34
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| |k|e|y|w|o|r|d| |c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"| |t|a|i|l| |c|o|m@1|e|n|t| @18
-|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|-|p|a
-|t@1|e|r|n|"| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"| |t|a|i|l| |c|o|m@1|e|n|t| @43
+|s+0#af5f00255&|y|n| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&@40
+|s+0#af5f00255&|y|n| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e
+|n|d|-|p|a|t@1|e|r|n|"| +0#0000000&@63
@75
-|"+0#0000e05&| |M|u|l|t|i|l|i|n|e| |c|o|m@1|a|n|d|s| +0#0000000&@54
+|"+0#0000e05&| |:|s|y|n|-|s|y|n|c|-|c|l|e|a|r| +0#0000000&@57
+@75
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&@57
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|s+0#00e0003&|y|n|c| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|F|o@1| @53
@75
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| @51
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
-@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
-@57|8|7|,|1| @9|3|2|%|
+|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t|s| |a|r|e| |n|o|t| |e|x|p|l|i|c|i|t|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |:|s|y|n|t|a|x|,| |s|e@1| |:|h|e|l|p| |:|c|o|m@1|e|n|t
+| +0#0000000&@56|8@1|,|1| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
index f9e0a5185..67ba95814 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_06.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
+|"+0#0000e05#ffffff0| |t|a|i|l| |c|o|m@1|e|n|t|s| |a|r|e| |n|o|t| |e|x|p|l|i|c|i|t|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |:|s|y|n|t|a|x|,| |s|e@1| |:|h|e|l|p| |:|c|o|m@1|e|n|t
+|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| |"+0#e000002&|p|a|t@1|e|r|n|"| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| +0#0000000&@20
+|"+0#0000e05&| +0#0000000&|N+0#e000e06&|O|T|E|:| +0#0000e05&|c|o|m@1|e|n|t|s| |n|o|t| |c|u|r@1|e|n|t|l|y| |s|u|p@1|o|r|t|e|d| +0#0000000&@34
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| |k|e|y|w|o|r|d| |c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"| |t|a|i|l| |c|o|m@1|e|n|t| @18
+|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|-|p|a
+|t@1|e|r|n|"| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"| |t|a|i|l| |c|o|m@1|e|n|t| @43
+> @74
+|"+0#0000e05&| |M|u|l|t|i|l|i|n|e| |c|o|m@1|a|n|d|s| +0#0000000&@54
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| @51
+@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
+@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
-@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000000&|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| @34
-@6|"+0#0000e05&|\| |t|r|a|n|s|p|a|r|e|n|t| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
-@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
-@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
-@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |1| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
-@57|1|0|4|,|7| @8|3|8|%|
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|r| +0#0000000#ffffff0@41
+@57|1|0|5|,|0|-|1| @6|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
index 648169124..696f88cb0 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_07.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|r| +0#0000000#ffffff0@41
+@6|"+0#0000e05&|\| +0#0000000&|n+0#0000e05&|e|x|t|g|r|o|u|p| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000001#ffff4012|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@34
+@6|"+0#0000e05&|\| +0#0000000&|t+0#0000e05&|r|a|n|s|p|a|r|e|n|t| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
+@6>"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
+@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
+@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |1| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |2| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|2| @58
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |3| +0#0000000&@56
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|3| @58
-> @74
-|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| @55
-@6|"+0#0000e05&|\| |M|A|T|C|H| |P|A|T@1|E|R|N| +0#0000000&@52
-@6|"+0#0000e05&|\| |p|a|t@1|e|r|n| |s|t|a|r|t| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|/+0#e000002&| +0#0000000&@65
-| +0#e000002&@5|"+0#0000e05&|\| |p|a|r|t| |1| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
-| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|1|a| |.|*| |p|a|t|1|b| +0#0000000&@53
-| +0#e000002&@5|"+0#0000e05&|\| |p|a|r|t| |2| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
-| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|2|a| |.|*| |p|a|t|2|b| +0#0000000&@53
-| +0#e000002&@5|"+0#0000e05&|\| |p|a|r|t| |3| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
-| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|3|a| |.|*| |p|a|t|3|b| +0#0000000&@53
-| +0#e000002&@5|"+0#0000e05&|\| |p|a|t@1|e|r|n| |e|n|d| +0#0000000&@54
-| +0#e000002&@5|\+0#e000e06&|/+0#e000002&| +0#0000000&@66
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@57|1|2@1|,|0|-|1| @6|4|6|%|
+@75
+@57|1|2@1|,|7| @8|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
index 0fb66ca32..156ff01e5 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_08.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+| +0&#ffffff0@74
+|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|t|e|s|t|M|a|t|c|h| @55
+@6|"+0#0000e05&|\| |M|A|T|C|H| |P|A|T@1|E|R|N| +0#0000000&@52
+@6|"+0#0000e05&|\| |p|a|t@1|e|r|n| |s|t|a|r|t| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|/+0#e000002&| +0#0000000&@65
+| +0#e000002&@5>"+0#0000e05&|\| |p|a|r|t| |1| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
+| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|1|a| |.|*| |p|a|t|1|b| +0#0000000&@53
+| +0#e000002&@5|"+0#0000e05&|\| |p|a|r|t| |2| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
+| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|2|a| |.|*| |p|a|t|2|b| +0#0000000&@53
+| +0#e000002&@5|"+0#0000e05&|\| |p|a|r|t| |3| |d|e|s|c|r|i|p|t|i|o|n| +0#0000000&@47
+| +0#e000002&@5|\+0#e000e06&|p+0#e000002&|a|t|3|a| |.|*| |p|a|t|3|b| +0#0000000&@53
+| +0#e000002&@5|"+0#0000e05&|\| |p|a|t@1|e|r|n| |e|n|d| +0#0000000&@54
+| +0#e000002&@5|\+0#e000e06&|/+0#e000002&| +0#0000000&@66
+@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
-@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
-@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
-@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000000&|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| @34
-@6|"+0#0000e05&|\| |t|r|a|n|s|p|a|r|e|n|t| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
-@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
-@57|1|4|0|,|7| @8|5|3|%|
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
+@57|1|4|0|,|7| @8|3|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
index dfae08ddf..a7ed5c811 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_09.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
+| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|r| +0#0000000#ffffff0@41
+@6|"+0#0000e05&|\| +0#0000000&|n+0#0000e05&|e|x|t|g|r|o|u|p| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@49
+@6>\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000001#ffff4012|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@34
+@6|"+0#0000e05&|\| +0#0000000&|t+0#0000e05&|r|a|n|s|p|a|r|e|n|t| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
+@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| @28
-@6|"+0#0000e05&|\| |f|o|l|d| |o|p|t|i|o|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| +0#0000000#ffffff0@28
+@6|"+0#0000e05&|\| +0#0000000&|f+0#0000e05&|o|l|d| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@54
@6|\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
-@6>"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
-@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|i|s|p|l|a|y| +0#0000000&@59
-@6|"+0#0000e05&|\| |e|x|t|e|n|d| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|t|e|n|d| +0#0000000&@60
-@6|"+0#0000e05&|\| |e|x|c|l|u|d|e|n|l| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
-@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
-@6|\+0#e000e06&| +0#0000000&|k+0#e000e06&|e@1|p|e|n|d| +0#0000000&@59
-@75
-|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| @53
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@6|"+0#0000e05&|\| |s|t|a|r|t| |o|p|t|i|o|n| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&@45
-@6|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
-@57|1|5|8|,|7| @8|6|0|%|
+@6|"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
+@57|1|5|8|,|7| @8|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump
index 07ea1c2b1..7031132d7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_10.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
+| +0&#ffffff0@5|"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|i|s|p|l|a|y| +0#0000000&@59
+@6|"+0#0000e05&|\| |e|x|t|e|n|d| |o|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|t|e|n|d| +0#0000000&@60
+@6|"+0#0000e05&|\| |e|x|c|l|u|d|e|n|l| |o|p|t|i|o|n| +0#0000000&@49
+@6>\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
+@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|k+0#e000e06&|e@1|p|e|n|d| +0#0000000&@59
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| @53
+@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+@6|"+0#0000e05&|\| |s|t|a|r|t| |o|p|t|i|o|n| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|-|p|a|t@1|e|r|n|"| +0#0000000&@45
+@6|"+0#0000e05&|\| |s|k|i|p| |o|p|t|i|o|n| +0#0000000&@54
@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|k|i|p|=|"+0#e000002&|s|k|i|p|-|p|a|t@1|e|r|n|"| +0#0000000&@47
@6|"+0#0000e05&|\| |e|n|d| |o|p|t|i|o|n| +0#0000000&@55
@6|\+0#e000e06&| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|-|p|a|t@1|e|r|n|"| +0#0000000&@49
@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
-@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
-@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
-@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|r| @41
-@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000000&|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| @34
-@6|"+0#0000e05&|\| |t|r|a|n|s|p|a|r|e|n|t| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
-@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
-@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
-@57|1|7|6|,|7| @8|6|7|%|
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
+@57|1|7|6|,|7| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_11.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_11.dump
index f7dce6fb2..c14f06636 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_11.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
+@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
+@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|r| +0#0000000#ffffff0@41
+@6|"+0#0000e05&|\| +0#0000000&|n+0#0000e05&|e|x|t|g|r|o|u|p| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=|t+0#0000001#ffff4012|e|s|t|N|e|x|t|0|,|@|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@34
+@6|"+0#0000e05&|\| +0#0000000&|t+0#0000e05&|r|a|n|s|p|a|r|e|n|t| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|t+0#e000e06&|r|a|n|s|p|a|r|e|n|t| +0#0000000&@55
+@6|"+0#0000e05&|\| |s|k|i|p|w|h|i|t|e| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@57
+@6|"+0#0000e05&|\| |s|k|i|p|e|m|p|t|y| |o|p|t|i|o|n| +0#0000000&@49
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|e|m|p|t|y| +0#0000000&@57
@6|"+0#0000e05&|\| |s|k|i|p|n|l| |o|p|t|i|o|n| +0#0000000&@52
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
-@6>\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| @28
-@6|"+0#0000e05&|\| |o|n|e|l|i|n|e| |o|p|t|i|o|n| +0#0000000&@51
-@6|\+0#e000e06&| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&@59
-@6|"+0#0000e05&|\| |f|o|l|d| |o|p|t|i|o|n| +0#0000000&@54
-@6|\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
-@6|"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
-@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|i|s|p|l|a|y| +0#0000000&@59
-@6|"+0#0000e05&|\| |e|x|t|e|n|d| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|t|e|n|d| +0#0000000&@60
-@6|"+0#0000e05&|\| |c|o|n|c|e|a|l|e|n|d|s| |o|p|t|i|o|n| +0#0000000&@47
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l|e|n|d|s| +0#0000000&@55
-@6|"+0#0000e05&|\| |e|x|c|l|u|d|e|n|l| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
-@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
-@57|1|9|4|,|7| @8|7|4|%|
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| +0#0000000#ffffff0@28
+@57|1|9|4|,|7| @8|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_12.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_12.dump
index f71771096..28a905a8f 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_12.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_12.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| +0#0000000#ffffff0@28
+@6|"+0#0000e05&|\| +0#0000000&|o+0#0000e05&|n|e|l|i|n|e| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&@59
+@6|"+0#0000e05&|\| |f|o|l|d| |o|p|t|i|o|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
+@6>"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|d+0#e000e06&|i|s|p|l|a|y| +0#0000000&@59
+@6|"+0#0000e05&|\| |e|x|t|e|n|d| |o|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|t|e|n|d| +0#0000000&@60
+@6|"+0#0000e05&|\| |c|o|n|c|e|a|l|e|n|d|s| |o|p|t|i|o|n| +0#0000000&@47
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l|e|n|d|s| +0#0000000&@55
+@6|"+0#0000e05&|\| |e|x|c|l|u|d|e|n|l| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|e+0#e000e06&|x|c|l|u|d|e|n|l| +0#0000000&@57
+@6|"+0#0000e05&|\| |k|e@1|p|e|n|d| |o|p|t|i|o|n| +0#0000000&@51
@6|\+0#e000e06&| +0#0000000&|k+0#e000e06&|e@1|p|e|n|d| +0#0000000&@59
@75
|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|e|s|t|C|l|u|s|t|e|r| @51
@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@6>"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
-@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000000&|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2|,|t|e|s|t|C|o|n|t|a|i|n|e|d|3| @13
-@75
-|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|e|s|t|C|l|u|s|t|e|r| @51
-@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
-@6|"+0#0000e05&|\| |a|d@1| |o|p|t|i|o|n| +0#0000000&@55
-@6|\+0#e000e06&| +0#0000000&|a+0#e000e06&|d@1|=|t+0#0000000&|e|s|t|A|d@1| @55
-@6|"+0#0000e05&|\| |r|e|m|o|v|e| |o|p|t|i|o|n| +0#0000000&@52
-@6|\+0#e000e06&| +0#0000000&|r+0#e000e06&|e|m|o|v|e|=|t+0#0000000&|e|s|t|R|e|m|o|v|e| @49
-@75
-@75
-|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |g|r|o|u|p| |l|i|s|t| +0#0000000&@52
-@75
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|0| |k|e|y|w|o|r|d| @45
-@57|2|1|2|,|7| @8|8|1|%|
+@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
+@57|2|1|2|,|7| @8|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_13.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_13.dump
index ab8d1a8a8..e82833680 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_13.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_13.dump
@@ -1,20 +1,20 @@
-|s+0#af5f00255#ffffff0|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|0| |k|e|y|w|o|r|d| @45
+| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
+@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2|,|t|e|s|t|C|o|n|t|a|i|n|e|d|3| +0#0000000#ffffff0@13
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|e|s|t|C|l|u|s|t|e|r| @51
+@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
+@6>"+0#0000e05&|\| |a|d@1| |o|p|t|i|o|n| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|a+0#e000e06&|d@1|=|t+0#0000001#ffff4012|e|s|t|A|d@1| +0#0000000#ffffff0@55
+@6|"+0#0000e05&|\| +0#0000000&|r+0#0000e05&|e|m|o|v|e| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|r+0#e000e06&|e|m|o|v|e|=|t+0#0000001#ffff4012|e|s|t|R|e|m|o|v|e| +0#0000000#ffffff0@49
+@75
+@75
+|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |g|r|o|u|p| |l|i|s|t| +0#0000000&@52
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|0| |k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|1| |k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|2| |k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|3| |k|e|y|w|o|r|d| @45
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|4| |k|e|y|w|o|r|d| @45
->s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|5| |k|e|y|w|o|r|d| @45
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|6| |k|e|y|w|o|r|d| @45
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|7| |k|e|y|w|o|r|d| @45
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|8| |k|e|y|w|o|r|d| @45
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|9| |k|e|y|w|o|r|d| @45
-@75
-|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| @51
-@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=| +0#0000000&@56
-@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|0| |,| |t|e|s|t|N|e|x|t|1| |,| @43
-@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|[|2|-|8|]|.|*| |,| @49
-@6|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
-@57|2|3|0|,|1| @8|8@1|%|
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|5| |k|e|y|w|o|r|d| @45
+@57|2|3|0|,|7| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_14.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_14.dump
index ee8798c7b..f648fee75 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_14.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_14.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@5|"+0#0000e05&|\| |a| |c|o|m@1|e|n|t| +0#0000000&@56
-@6|\+0#e000e06&| +0#0000000&|t|e|s|t|N|e|x|t|9| |,| |@|t|e|s|t|C|l|u|s|t|e|r| |s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@32
+|s+0#af5f00255#ffffff0|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|5| |k|e|y|w|o|r|d| @45
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|6| |k|e|y|w|o|r|d| @45
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|7| |k|e|y|w|o|r|d| @45
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|8| |k|e|y|w|o|r|d| @45
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|9| |k|e|y|w|o|r|d| @45
+> @74
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| @51
+@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=| +0#0000000&@56
+@6|"+0#0000e05&|\| +0#0000000&|a+0#0000e05&| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|s|t|N|e|x|t|0| +0#0000000#ffffff0|,| |t+0#0000001#ffff4012|e|s|t|N|e|x|t|1| +0#0000000#ffffff0|,| @43
+@6|"+0#0000e05&|\| +0#0000000&|a+0#0000e05&| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|s|t|N|e|x|t|[|2|-|8|]|.|*| +0#0000000#ffffff0|,| @49
+@6|"+0#0000e05&|\| +0#0000000&|a+0#0000e05&| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|s|t|N|e|x|t|9| +0#0000000#ffffff0|,| |@+0#0000001#ffff4012|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&@32
@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|4| @58
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|5| @58
-@6>\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
-@75
-@75
-|"+0#0000e05&| |l|e|a|k|i|n|g| |c|o|n|t|a|i|n|e|d| |g|r|o|u|p|s| +0#0000000&@48
-@75
-|"+0#0000e05&| +0#0000000&|E+0#e000e06&|x|a|m|p|l|e|:| +0#0000e05&|r|u|n|t|i|m|e|/|s|y|n|t|a|x|/|z|s|h|.|v|i|m| +0#0000000&@41
-|"+0#0000e05&| @2|"+0#e000002&|c|l|u|s|t|e|r|"| +0#0000e05&|s|h|o|u|l|d| |n|o|t| |b|e| |h|i|g|h|l|i|g|h|t|e|d| |o|u|t|s|i|d|e| |o|f| |:|s|y|n|t|a|x| |c|o|m@1|a|n|d|s| +0#0000000&@7
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|s+0#e000e06&|:|C+0#0000000&|o|n|t|a|i|n|e|d|G|r|o|u|p|(+0#e000e06&|)| +0#0000000&@46
-@2|"+0#0000e05&| |.@2| +0#0000000&@67
-@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#e000e06&| +0#0000000&@25
-@4|"+0#0000e05&| |.@2| +0#0000000&@65
-@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
-@2|"+0#0000e05&| |.@2| +0#0000000&@67
-@57|2|4|8|,|7| @8|9|6|%|
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
+@57|2|4|8|,|0|-|1| @6|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_15.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_15.dump
index 64a53aabe..6945ec2c6 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_syntax_15.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_15.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@1|"+0#0000e05&| |.@2| +0#0000000&@67
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
@75
-|"+0#0000e05&| |e|a|r|l|y| |t|e|r|m|i|n|a|t|i|o|n| |o|f| |v|i|m|S|y|n|R|e|g|i|o|n| +0#0000000&@39
-@75
->s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| @53
-@6|"+0#0000e05&|\| ||| |d|o|e|s| |n|o|t| |e|n|d| |t|h|e| |a|r|g|s| |r|e|g|i|o|n| +0#0000000&@35
-@6|"+0#0000e05&|\| |s|t|a|r|t|=|"|f|o@1|\|||b|a|r|"| +0#0000000&@49
-@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|"| +0#0000000&@53
-@6|\+0#e000e06&| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|"| +0#0000000&@57
-@75
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|2|6@1|,|1| @8|B|o|t|
+|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|K|e|y|w|o|r|d| @51
+@6|"+0#0000e05&|\| |n|e|x|t|g|r|o|u|p| |o|p|t|i|o|n| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|n+0#e000e06&|e|x|t|g|r|o|u|p|=| +0#0000000&|t+0#0000001#ffff4012|e|s|t|N|e|x|t|0|,+0#0000000#ffffff0| @45
+@6>"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,| |t+0#0000001#ffff4012|e|s|t|N|e|x|t|1| +0#0000000#ffffff0@55
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&|,+0#0000000&| |t+0#0000001#ffff4012|e|s|t|N|e|x|t|2| +0#0000000#ffffff0@56
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|e|x|t|N|e|x|t|3| +0#0000000#ffffff0@56
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&|,+0#0000001#ffff4012|t|e|x|t|N|e|x|t|4| +0#0000000#ffffff0@57
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,| |t+0#0000001#ffff4012|e|x|t|N|e|x|t|5| +0#0000000#ffffff0|,| @53
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|6|,+0#0000000#ffffff0| @56
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|7| +0#0000000#ffffff0|,| @55
+@57|2|6@1|,|7| @8|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_16.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_16.dump
new file mode 100644
index 000000000..3d1a002d6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_16.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|7| +0#0000000#ffffff0|,| @55
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|8|,+0#0000000#ffffff0| @57
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|9| +0#0000000#ffffff0|,| @56
+@6>"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|0| +0#0000000#ffffff0@56
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1@1|,+0#0000000#ffffff0| @54
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|2|,|t|e|x|t|N|e|x|t|1|3|,+0#0000000#ffffff0| @44
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|3|,|t|e|x|t|N|e|x|t|1|4| +0#0000000#ffffff0@45
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|5|,|t|e|x|t|N|e|x|t|1|6| +0#0000000#ffffff0@44
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|,| |t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|7| +0#0000000#ffffff0|,| |t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|8| +0#0000000#ffffff0|,| @39
+@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|9|,+0#0000000#ffffff0| |@+0#0000001#ffff4012|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@42
+@57|2|8|4|,|7| @8|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_17.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_17.dump
new file mode 100644
index 000000000..c923c00d4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_17.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|9|,+0#0000000#ffffff0| |@+0#0000001#ffff4012|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@42
+@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
+@6|"+0#0000e05&|\| |K|E|Y|W|O|R|D|S| |L|I|S|T| +0#0000000&@52
+@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |1| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|1| @58
+@6>"+0#0000e05&|\| |k|e|y|w|o|r|d| |2| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|2| @58
+@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |3| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|3| @58
+@75
+@75
+|"+0#0000e05&| |l|e|a|k|i|n|g| |c|o|n|t|a|i|n|e|d| |g|r|o|u|p|s| +0#0000000&@48
+@75
+|"+0#0000e05&| +0#0000000&|E+0#e000e06&|x|a|m|p|l|e|:| +0#0000e05&|r|u|n|t|i|m|e|/|s|y|n|t|a|x|/|z|s|h|.|v|i|m| +0#0000000&@41
+|"+0#0000e05&| @2|"+0#e000002&|c|l|u|s|t|e|r|"| +0#0000e05&|s|h|o|u|l|d| |n|o|t| |b|e| |h|i|g|h|l|i|g|h|t|e|d| |o|u|t|s|i|d|e| |o|f| |:|s|y|n|t|a|x| |c|o|m@1|a|n|d|s| +0#0000000&@7
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|s+0#e000e06&|:|C+0#0000000&|o|n|t|a|i|n|e|d|G|r|o|u|p|(+0#e000e06&|)| +0#0000000&@46
+@2|"+0#0000e05&| |.@2| +0#0000000&@67
+@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#e000e06&| +0#0000000&@25
+@57|3|0|2|,|7| @8|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_18.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_18.dump
new file mode 100644
index 000000000..605dc0cba
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_18.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#e000e06&| +0#0000000&@25
+@4|"+0#0000e05&| |.@2| +0#0000000&@65
+@2|e+0#af5f00255&|n|d|f|o|r| +0#0000000&@66
+@2|"+0#0000e05&| |.@2| +0#0000000&@67
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+> @74
+@75
+|"+0#0000e05&| |e|a|r|l|y| |t|e|r|m|i|n|a|t|i|o|n| |o|f| |v|i|m|S|y|n|R|e|g|i|o|n| +0#0000000&@39
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|t|e|s|t|R|e|g|i|o|n| @53
+@6|"+0#0000e05&|\| ||| |d|o|e|s| |n|o|t| |e|n|d| |t|h|e| |a|r|g|s| |r|e|g|i|o|n| +0#0000000&@35
+@6|"+0#0000e05&|\| |s|t|a|r|t|=|"|f|o@1|\|||b|a|r|"| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|s+0#00e0003&|t|a|r|t|=|"+0#e000002&|s|t|a|r|t|"| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|"| +0#0000000&@57
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |#|1|8|4|9|1| |(|T|w|o| |"+0#e000002&|)|"|s+0#0000e05&| |a|r|e| |i|n|c|o|r@1|e|c|t|l|y| |c|o|l|o|r|e|d| |'|v|i|m|O|p|e|r|E|r@1|o|r|'| |i|n| |s|y|n|t|a|x|/|m
+|a|i|l|.|v|i|m|)| +0#0000000&@66
+@75
+@57|3|2|0|,|0|-|1| @6|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_19.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_19.dump
new file mode 100644
index 000000000..3dbd5826b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_19.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&@6|m|a|i|l|H|e|a|d|e|r|K|e|y| @2|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|m+0#0000001#ffff4012|a|i|l|H|e|a|d|e|r|E|m|a|i|l|,|m|a|i|l|E|m|a|i
+|l|,|@|N|o|S|p|e|l@1| +0#0000000#ffffff0|"+0#e000002&|\|v|(|^|(|\|>| |?|)|*|)|@|<|=|(|f|r|o|m|||r|e|p|l|y|-|t|o|)|:|.|*|$|"| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@22
+@75
+@75
+>"+0#0000e05&| |I|s@1|u|e| |#|1|9|3|6@1| |(|h|i|g|h|l|i|g|h|t| |e|r@1|o|r| |f|o|r| |c|o|n|t|a|i|n|s| |e|l|e|m|e|n|t|s| |i|n| |a| |n|e|w| |l|i|n|e|)| +0#0000000&@6
+|"+0#0000e05&| |s|y|n|t|a|x|/|t|y|p|s|t|.|v|i|m| +0#0000000&@56
+@75
+|"+0#0000e05&| |C|o|d|e| |{@2|1| +0#0000000&@63
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e| @50
+@4|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|@+0#0000001#ffff4012|t|y|p|s|t|C|o|m@1|o|n| +0#0000000#ffffff0@47
+@12|\+0#e000e06&| +0#0000000&|,|@+0#0000001#ffff4012|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| +0#0000000#ffffff0@41
+@12|\+0#e000e06&| +0#0000000&|,|@+0#0000001#ffff4012|t|y|p|s|t|C|o|d|e|C|o|n|s|t|a|n|t|s| +0#0000000#ffffff0@40
+@12|\+0#e000e06&| +0#0000000&|,|@+0#0000001#ffff4012|t|y|p|s|t|C|o|d|e|I|d|e|n|t|i|f|i|e|r|s| +0#0000000#ffffff0@38
+@12|\+0#e000e06&| +0#0000000&|,|@+0#0000001#ffff4012|t|y|p|s|t|C|o|d|e|F|u|n|c|t|i|o|n|s| +0#0000000#ffffff0@40
+@12|\+0#e000e06&| +0#0000000&|,|@+0#0000001#ffff4012|t|y|p|s|t|C|o|d|e|P|a|r|e|n|s| +0#0000000#ffffff0@43
+@75
+|"+0#0000e05&| |C|o|d|e| |>| |K|e|y|w|o|r|d|s| |{@2|2| +0#0000000&@52
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| @42
+@57|3@1|6|,|1| @8|9|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_20.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_20.dump
new file mode 100644
index 000000000..e05dc9912
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_20.dump
@@ -0,0 +1,20 @@
+|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| @42
+@4|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|C|o|n|d|i|t|i|o|n|a|l| +0#0000000#ffffff0@39
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|R|e|p|e|a|t| +0#0000000#ffffff0@44
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d| +0#0000000#ffffff0@43
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|S|t|a|t|e|m|e|n|t| +0#0000000#ffffff0@41
+> @74
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| @42
+@4|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=| +0#0000000&@59
+@12|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@52
+@12|\+0#e000e06&| +0#0000000&@1|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|C|o|n|d|i|t|i|o|n|a|l| +0#0000000#ffffff0@39
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|R|e|p|e|a|t| +0#0000000#ffffff0@44
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d| +0#0000000#ffffff0@43
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|S|t|a|t|e|m|e|n|t| +0#0000000#ffffff0@41
+@75
+@75
+|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| @42
+@4|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=| +0#0000000&@59
+@12|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@52
+@12|\+0#e000e06&| +0#0000000&@1|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|C|o|n|d|i|t|i|o|n|a|l| +0#0000000#ffffff0@39
+@57|3|5|4|,|0|-|1| @6|9|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_syntax_21.dump b/runtime/syntax/testdir/dumps/vim_ex_syntax_21.dump
new file mode 100644
index 000000000..e0746ea9d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_syntax_21.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|\+0#e000e06&| +0#0000000&@1|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|C|o|n|d|i|t|i|o|n|a|l| +0#0000000#ffffff0@39
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|R|e|p|e|a|t| +0#0000000#ffffff0@44
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d| +0#0000000#ffffff0@43
+@12|\+0#e000e06&| +0#0000000&|,|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|S|t|a|t|e|m|e|n|t| +0#0000000#ffffff0@41
+@75
+> @74
+|"+0#0000e05&| |E|x|a|m|p|l|e|s| |f|r|o|m| |d|i|s|t|r|i|b|u|t|e|d| |s|y|n|t|a|x| |f|i|l|e|s| +0#0000000&@34
+@75
+|s+0#af5f00255&|y|n| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&@2|s|l|r|n|r|c|C|o|l|o|r|I|n|i|t| @4|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&|"+0#e000002&|^|\|s|*|c|o|l|o|r|\|s|\|+|\|S|\|+|"| +0#0000000&|s+0#e000e06&|k|i|p|w|h|i|t|e| +0#0000000&|n+0#e000e06&|e|x
+|t|g|r|o|u|p|=|s+0#0000001#ffff4012|l|r|n|r|c|C|o|l|o|r|V|a|l|\|(|S|t|r|\|)|\|=| +0#0000000#ffffff0|c+0#e000e06&|o|n|t|a|i|n|s|=|s+0#0000001#ffff4012|l|r|n|r|c|C|o|l|o|r|\|(|O|b|j|\|||O|b|j|S|t|r|\|)|\|=| +0#0000000#ffffff0@6
+|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&@1|s|l|r|n|r|c|C|m|d|L|i|n|e| @6|m+0#e000e06&|a|t|c|h|g|r|o|u|p|=|s+0#0000000&|l|r|n|r|c|C|m|d| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|\|<|\+0#e000e06&|(|a+0#e000002&|u|t|o|b|a|u|d|\+0#e000e06&|||.+0#e000002&
+@2|\+0#e000e06&|||v+0#e000002&|i|s|i|b|l|e|_|h|e|a|d|e|r|s|\+0#e000e06&|)|\+0#e000002&|>|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|$|"| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|s+0#0000001#ffff4012|l|r|n|r|c|\|(|S|t|r|i|n|g|\|||C|o|m@1|e|n|t|\|)
+| +0#0000000#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|7|2|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/input/vim_ex_syntax.vim b/runtime/syntax/testdir/input/vim_ex_syntax.vim
index 5dc2cacf3..851931206 100644
--- a/runtime/syntax/testdir/input/vim_ex_syntax.vim
+++ b/runtime/syntax/testdir/input/vim_ex_syntax.vim
@@ -1,4 +1,5 @@
" Vim :syntax command
+" VIM_TEST_SETUP hi link vimGroupList Todo


" :syn-case
@@ -7,6 +8,13 @@ syntax case
syntax case match
syntax case ignore

+" :syn clear
+
+syntax clear @testCluster
+syntax clear testGroup
+syntax clear @testCluster testGroup
+syntax clear testGroup @testCluster
+
" :syn-conceal

syntax conceal
@@ -19,6 +27,11 @@ syntax foldlevel
syntax foldlevel start
syntax foldlevel minimum

+" :syn-include
+
+syntax include @Foo <sfile>:p:h/foo.vim
+syntax include <sfile>:p:h/foo.vim
+
" :syn-iskeyword

syntax iskeyword
@@ -247,6 +260,50 @@ syn keyword testKeyword
\ keyword5
\ keyword6

+syn keyword testKeyword
+ "\ nextgroup option
+ \ nextgroup= testNext0,
+ "\ comment
+ \ , testNext1
+ "\ comment
+ \, testNext2
+ "\ comment
+ \ ,textNext3
+ "\ comment
+ \,textNext4
+ "\ comment
+ \ , textNext5 ,
+ "\ comment
+ \ textNext6,
+ "\ comment
+ \ textNext7 ,
+ "\ comment
+ extNext8,
+ "\ comment
+ extNext9 ,
+ "\ comment
+ \ textNext10
+ "\ comment
+ \ ,textNext11,
+ "\ comment
+ \ textNext12,textNext13,
+ "\ comment
+ \ textNext13,textNext14
+ "\ comment
+ \ ,textNext15,textNext16
+ "\ comment
+ \ , textNext17 , textNext18 ,
+ "\ comment
+ \ textNext19, @testCluster
+ \ skipnl
+ "\ KEYWORDS LIST
+ "\ keyword 1
+ \ keyword1
+ "\ keyword 2
+ \ keyword2
+ "\ keyword 3
+ \ keyword3
+

" leaking contained groups

@@ -261,6 +318,7 @@ function! s:ContainedGroup()
" ...
endfunction

+
" early termination of vimSynRegion

syn region testRegion
@@ -269,3 +327,51 @@ syn region testRegion
\ start="start"
\ end="end"

+
+" Issue #18491 (Two ")"s are incorrectly colored 'vimOperError' in syntax/mail.vim)
+
+syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@NoSpell " (^(\> ?)*)@<=(from|reply-to):.*$" fold
+
+
+" Issue #19366 (highlight error for contains elements in a new line)
+" syntax/typst.vim
+
+" Code {{{1
+syntax cluster typstCode
+ \ contains=@typstCommon
+ \ ,@typstCodeKeywords
+ \ ,@typstCodeConstants
+ \ ,@typstCodeIdentifiers
+ \ ,@typstCodeFunctions
+ \ ,@typstCodeParens
+
+" Code > Keywords {{{2
+syntax cluster typstCodeKeywords
+ \ contains=typstCodeConditional
+ \ ,typstCodeRepeat
+ \ ,typstCodeKeyword
+ \ ,typstCodeStatement
+
+syntax cluster typstCodeKeywords
+ \ contains=
+ "\ comment
+ \ typstCodeConditional
+ \ ,typstCodeRepeat
+ \ ,typstCodeKeyword
+ \ ,typstCodeStatement
+
+
+syntax cluster typstCodeKeywords
+ \ contains=
+ "\ comment
+ \ typstCodeConditional
+ \ ,typstCodeRepeat
+ \ ,typstCodeKeyword
+ \ ,typstCodeStatement
+
+
+" Examples from distributed syntax files
+
+syn match slrnrcColorInit contained "^\s*color\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Obj\|ObjStr\)\=
+syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(autobaud\|...\|visible_headers\)\>" end="$" oneline contains=slrnrc\(String\|Comment\)
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 39f357848..f75436a2a 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougk...@gmail.com>
-" Last Change: 2026 Feb 13
+" Last Change: 2026 Feb 20
" Former Maintainer: Charles E. Campbell

" DO NOT CHANGE DIRECTLY.
@@ -1847,17 +1847,32 @@ Vim9 syn match vimWincmd "\s\=\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite n

" Syntax: {{{2
"=======
-syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
-syn region vimGroupList contained start=/^\s*["#]\ \|^\s*\\|[^[:space:],]\+\s*,/ skip=/\s*
\s*\%(\\|["#]\ \)\|^\s*\%(\\|["#]\ \)/ end=/[^[:space:],]\s*$\|[^[:space:],]\ze\s\+\w/ contains=@vimContinue,vimGroupSpecial
+syn region vimGroupList contained
+ \ start="\S"
+ \ skip=+
\s*\%(\\|["#]\ \)+
+ "\ need to consume the whitespace
+ \ end="\s"he=e-1
+ \ end="$"
+ \ contains=@vimGroupListContinue,vimGroupSpecial,vimGroupListContinueComma
syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
+syn match vimGroupListComma contained ","
+syn match vimGroupListContinueComma contained "\s\+,\s*\|,\s\+" contains=vimGroupListComma
+syn match vimGroupListContinueComma contained "\s*,\s*\%(
\s*\%(\\s\+\|["#]\ .*\)\)\+" contains=@vimGroupListContinue,vimGroupListComma
+
+syn match vimGroupListEquals contained "=" skipwhite skipnl nextgroup=vimGroupListContinueStart,vimGroupList
+" the first continuation line does not terminate the list at whitepace after \
+syn match vimGroupListContinueStart contained "^\%(\s*["#]\ .*
\)*\s*\\s\+" skipwhite nextgroup=vimGroupList contains=@vimGroupListContinue transparent
+
+syn match vimGroupListContinue contained "^\s*\" skipwhite skipnl nextgroup=@vimGroupListContinue,vimGroupListContinueComma contains=vimWhitespace
+syn match vimGroupListContinueComment contained '^\s*["#]\ .*' skipwhite skipnl nextgroup=@vimGroupListContinue contains=vimWhitespace
+syn cluster vimGroupListContinue contains=vimGroupListContinue,vimGroupListContinueComment

if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
- syn match vimSynError contained "\i\+"
- syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
+ syn match vimSynError contained "\i\+"
endif
-syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
+syn match vimSynContains contained "\<contains\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimSynContainedin contained "\<containedin\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimSynNextgroup contained "\<nextgroup\>" skipwhite nextgroup=vimGroupListEquals
if has("conceal")
" no whitespace allowed after '='
syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
@@ -1875,13 +1890,13 @@ endif
syn keyword vimSynCase contained ignore match

" Syntax: clear {{{2
-syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
+syn keyword vimSynType contained clear

" Syntax: cluster {{{2
syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
-syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
-syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
+syn match vimGroupAdd contained "\<add\>" skipwhite nextgroup=vimGroupListEquals
+syn match vimGroupRem contained "\<remove\>" skipwhite nextgroup=vimGroupListEquals

" Syntax: conceal {{{2
syn match vimSynType contained "\<conceal\>" skipwhite nextgroup=vimSynConceal,vimSynConcealError
@@ -1904,16 +1919,17 @@ syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep
syn match vimSynIskeywordSep contained ","

" Syntax: include {{{2
-syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
+syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeCluster
+syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"

" Syntax: keyword {{{2
-syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
+syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"

" Syntax: match {{{2
-syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
+syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
@@ -1923,9 +1939,9 @@ syn keyword vimSynType contained enable list manual off on reset

" Syntax: region {{{2
syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
-syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
+syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
-syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\|\\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup
+syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\|\|\|
\s*\%(\\|"\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup
syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
@@ -2583,11 +2599,14 @@ if !exists("skip_vim_syntax_inits")
hi def link vimGrep vimCommand
hi def link vimGrepadd vimCommand
hi def link vimGrepBang vimBang
+ hi def link vimGroup Type
hi def link vimGroupAdd vimSynOption
+ hi def link vimGroupListEquals vimSynOption
+ hi def link vimGroupListContinue vimContinue
+ hi def link vimGroupListContinueComment vimContinueComment
hi def link vimGroupName Normal
hi def link vimGroupRem vimSynOption
hi def link vimGroupSpecial Special
- hi def link vimGroup Type
hi def link vimHelp vimCommand
hi def link vimHelpBang vimBang
hi def link vimHelpgrep vimCommand
@@ -2752,7 +2771,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSynFoldlevel Type
hi def link vimSynIskeyword Type
hi def link vimSynIskeywordSep Delimiter
- hi def link vimSynKeyContainedin vimSynContains
+ hi def link vimSynContainedin vimSynContains
hi def link vimSynKeyOpt vimSynOption
hi def link vimSynMtchGrp vimSynOption
hi def link vimSynMtchOpt vimSynOption
Reply all
Reply to author
Forward
0 new messages