Commit: runtime(vim): Update base syntax, contain more ex commands

1 view
Skip to first unread message

Christian Brabandt

unread,
Aug 10, 2026, 3:30:15 PM (20 hours ago) Aug 10
to vim...@googlegroups.com
runtime(vim): Update base syntax, contain more ex commands

Commit: https://github.com/vim/vim/commit/8b77af5bb72915bbf9cc284b9b7e244b41305098
Author: Doug Kearns <dougk...@gmail.com>
Date: Mon Aug 10 19:26:02 2026 +0000

runtime(vim): Update base syntax, contain more ex commands

- Contain some straggler ex commands
- Fix some typos vimSep -> vimCmdSep

closes: #20995

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 3a60b31ee..aae2864a7 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 Aug 02
+" Last Change: 2026 Aug 08
" Former Maintainer: Charles E. Campbell

" DO NOT CHANGE DIRECTLY.
@@ -487,7 +487,7 @@ syn match vimAugroupBang contained " \@1<=!" skipwhite nextgroup=vimAugroupName
syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAugroupName,vimAugroupEnd

" remove
-syn match vimAugroup "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang
+syn match vimAugroup contained "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang

" list
VimL syn match vimAugroup contained "\<aug\%[roup]\>\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey
@@ -550,22 +550,22 @@ syn keyword vimBehaveModel contained mswin xterm
" ================================
syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction
syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename
-syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList

-syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep
-syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
+syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep

syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr

-syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
-syn match vimBreakpointFilename contained "\<\%(\*\| \)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
+syn match vimBreakpointFilename contained "\<\%(\*\| \)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction
syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename

syn keyword vimBreakadd contained breaka[dd] skipwhite nextgroup=@vimBreakpointArg
syn keyword vimBreakdel contained breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob
-syn keyword vimBreaklist contained breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn keyword vimBreaklist contained breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep

" :buffer {{{3
" =======
@@ -773,7 +773,8 @@ syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,
" :export {{{3
" =======
if s:vim9script
- syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vimDef,vimDefFold,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
+ syn keyword vim9Export export contained
+ \ skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vimDef,vimDefFold,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
endif

" :filetype {{{3
@@ -997,12 +998,12 @@ syn keyword vimImport contained imp[ort] skipwhite nextgroup=vimImportAutoload,

" :language {{{3
" =========
-syn keyword vimLanguage contained lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment
+syn keyword vimLanguage contained lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimCmdSep,vimComment,vim9Comment
syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName

" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX"
-syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment
-syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment
+syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimCmdSep,vimComment,vim9Comment
+syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimCmdSep,vimComment,vim9Comment
syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved

" :loadkeymap {{{3
@@ -1788,14 +1789,14 @@ syn keyword vimEndfunction contained endf[unction] skipwhite nextgroup=vimCmdSep
syn keyword vimEnddef contained enddef skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError

if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
- syn region vimFunctionFold
+ syn region vimFunctionFold contained
\ start="\<fu\%[nction]!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*("
\ end="^\s*:\=\s*endf\%[unction]\>"
\ contains=vimFunction
\ extend fold keepend transparent
- syn region vimDefFold
+ syn region vimDefFold contained
\ start="\<def!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+[<(]"
@@ -1926,7 +1927,7 @@ if s:vim9script
syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
- syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
+ syn keyword vim9Abstract contained abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
@@ -1937,7 +1938,12 @@ if s:vim9script
" super must be followed by '.'
syn match vim9Super contained "\.\@1<!\<super\.\@="

- VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
+ VimFoldc syn region vim9ClassBody contained
+ \ start="\<class\>"
+ \ matchgroup=vimCommand
+ \ end="\<endclass\>"
+ \ contains=@vim9ClassBodyList
+ \ transparent

" Enums {{{3
syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,@vimExprList,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Var
@@ -1990,7 +1996,12 @@ if s:vim9script
\ skipwhite skipempty nextgroup=vim9EnumImplementedInterfaceComment,vim9EnumValue
\ contains=@vimCommentGroup,vimCommentString

- VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
+ VimFolde syn region vim9EnumBody contained
+ \ start="\<enum\>"
+ \ matchgroup=vimCommand
+ \ end="\<endenum\>"
+ \ contains=@vim9EnumBodyList
+ \ transparent

" Interfaces {{{3
" TODO: limit to decl only - no init values
@@ -2017,10 +2028,15 @@ if s:vim9script
\ nextgroup=vim9AbstractDefParams
\ contains=vim9DefTypeParam

- VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
+ VimFoldi syn region vim9InterfaceBody contained
+ \ start="\<interface\>"
+ \ matchgroup=vimCommand
+ \ end="\<endinterface\>"
+ \ contains=@vim9InterfaceBodyList
+ \ transparent

" Type Aliases {{{3
- syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
+ syn keyword vim9Type contained ty[pe] skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
@@ -2289,25 +2305,23 @@ syn match vimBracket contained "[\<>]"
syn case match

" User Command Highlighting: {{{2
-" syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
-" syn match vimUsrCmd contained '\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!' nextgroup=vimBang
syn match vimUsrCmd contained '\%#=1\<\u[[:alnum:]]*\%([![:space:]]\|$\)\@=' nextgroup=vimBang

" Vim user commands

" Compiler plugins
-syn match vimCompilerSet "\<CompilerSet\>" skipwhite nextgroup=vimSetArgs
+syn keyword vimCompilerSet contained CompilerSet skipwhite nextgroup=vimSetArgs

" runtime/makemenu.vim
-syn match vimSynMenu "\<SynMenu\>" skipwhite nextgroup=vimSynMenuPath
+syn keyword vimSynMenu contained SynMenu skipwhite nextgroup=vimSynMenuPath
syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation
syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName
syn match vimSynMenuName contained "\w\+"

" runtime/syntax/syncolor.vim
-syn match vimSynColor "\<SynColor\>" skipwhite nextgroup=vimSynColorGroup
+syn keyword vimSynColor contained SynColor skipwhite nextgroup=vimSynColorGroup
syn match vimSynColorGroup contained "\<\h\w*\>" skipwhite nextgroup=vimHiKeyList contains=vimGroup
-syn match vimSynLink "\<SynLink\>" skipwhite nextgroup=vimSynLinkGroup
+syn keyword vimSynLink contained SynLink skipwhite nextgroup=vimSynLinkGroup
syn match vimSynLinkGroup contained "\<\h\w*\>" skipwhite nextgroup=vimGroup contains=vimGroup

syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynColor,vimSynLink,vimSynMenu
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_00.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_00.dump
new file mode 100644
index 000000000..56895455b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_00.dump
@@ -0,0 +1,20 @@
+>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
+|#+0#0000e05&| |V|i|m|9| |E|x| |c|o|m@1|a|n|d| |c|o|n|t|a|i|n|m|e|n|t| +0#0000000&@45
+@75
+@75
+|f|a|k|e| |&+0#00e0e07&| +0#0000000&@68
+|f|a|k|e| |~| @68
+|f|a|k|e| |@| @68
+|#+0#0000e05&| |:|*| +0#0000000&@70
+|f|a|k|e| |>+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |<+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |#+0#0000e05&| +0#0000000&@68
+|f|a|k|e| |=+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |!+0#af5f00255&| +0#0000000&@68
+@75
+|f|a|k|e| |N|e|x|t| @65
+|f|a|k|e| |X| @68
+@75
+|f|a|k|e| |a|b@1|r|e|v|i|a|t|e| @59
+|f|a|k|e| |a|b|c|l|e|a|r| @62
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_01.dump
new file mode 100644
index 000000000..c8159c8c5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f|a|k|e| |N|e|x|t| @65
+|f|a|k|e| |X| @68
+@75
+|f|a|k|e| |a|b@1|r|e|v|i|a|t|e| @59
+>f|a|k|e| |a|b|c|l|e|a|r| @62
+|f|a|k|e| |a|b|o|v|e|l|e|f|t| @60
+|f|a|k|e| |a|b|s|t|r|a|c|t| @61
+|f|a|k|e| |a|l@1| @66
+|f|a|k|e| |a|m|e|n|u| @64
+|f|a|k|e| |a|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |a|r|g|a|d@1| @63
+|f|a|k|e| |a|r|g|d|e|d|u|p|e| @60
+|f|a|k|e| |a|r|g|d|e|l|e|t|e| @60
+|f|a|k|e| |a|r|g|d|o| @64
+|f|a|k|e| |a|r|g|e|d|i|t| @62
+|f|a|k|e| |a|r|g@1|l|o|b|a|l| @60
+|f|a|k|e| |a|r|g|l|o|c|a|l| @61
+|f|a|k|e| |a|r|g|s| @65
+@57|1|9|,|1| @10|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_02.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_02.dump
new file mode 100644
index 000000000..597a75231
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_02.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |a|r|g|s| @65
+|f|a|k|e| |a|r|g|u|m|e|n|t| @61
+|f|a|k|e| |a|s|c|i@1| @64
+|f|a|k|e| |a|u|g|r|o|u|p| |F|o@1| @58
+|f|a|k|e| |a+0#ffffff16#ff404010|u|g|r|o|u|p| |E|N|D| +0#0000000#ffffff0@58
+>f|a|k|e| |a|u|n|m|e|n|u| @62
+|f|a|k|e| |a|u|t|o|c|m|d| @62
+|f|a|k|e| |b|a|d@1| @65
+|f|a|k|e| |b|a|l@1| @65
+|f|a|k|e| |b|a|l|t| @65
+|f|a|k|e| |b|d|e|l|e|t|e| @62
+|f|a|k|e| |b|e|h|a|v|e| |m|s|w|i|n| @57
+|f|a|k|e| |b|e|h|a|v|e| |x|t|e|r|m| @57
+|f|a|k|e| |b|e|l|o|w|r|i|g|h|t| @59
+|f|a|k|e| |b|f|i|r|s|t| @63
+|f|a|k|e| |b|l|a|s|t| @64
+|f|a|k|e| |b|m|o|d|i|f|i|e|d| @60
+|f|a|k|e| |b|n|e|x|t| @64
+|f|a|k|e| |b|N|e|x|t| @64
+@57|3|7|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_03.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_03.dump
new file mode 100644
index 000000000..68626e1e0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_03.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |b|N|e|x|t| @64
+|f|a|k|e| |b|o|t|r|i|g|h|t| @61
+|f|a|k|e| |b|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |b|r|e|a|k| @64
+|f|a|k|e| |b|r|e|a|k|a|d@1| @61
+>f|a|k|e| |b|r|e|a|k|d|e|l| @61
+|f|a|k|e| |b|r|e|a|k|l|i|s|t| @60
+|f|a|k|e| |b|r|e|w|i|n|d| @62
+|f|a|k|e| |b|r|o|w|s|e| @63
+|f|a|k|e| |b|u|f|d|o| @64
+|f|a|k|e| |b|u|f@1|e|r| @63
+|f|a|k|e| |b|u|f@1|e|r|s| @62
+|f|a|k|e| |b|u|n|l|o|a|d| @62
+|f|a|k|e| |b|w|i|p|e|o|u|t| @61
+|f|a|k|e| |c|a|b@1|r|e|v| @62
+|f|a|k|e| |c|a|b|c|l|e|a|r| @61
+|f|a|k|e| |c|a|b|o|v|e| @63
+|f|a|k|e| |c|a|d@1|b|u|f@1|e|r| @59
+|f|a|k|e| |c|a|d@1|e|x|p|r| @61
+@57|5@1|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_04.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_04.dump
new file mode 100644
index 000000000..eb614f0ed
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_04.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|a|d@1|e|x|p|r| @61
+|f|a|k|e| |c|a|d@1|f|i|l|e| @61
+|f|a|k|e| |c|a|f|t|e|r| @63
+|f|a|k|e| |c|a|l@1| @65
+|f|a|k|e| |c|a|t|c|h| @64
+>f|a|k|e| |c|b|e|f|o|r|e| @62
+|f|a|k|e| |c|b|e|l|o|w| @63
+|f|a|k|e| |c|b|o|t@1|o|m| @62
+|f|a|k|e| |c|b|u|f@1|e|r| @62
+|f|a|k|e| |c@1| @67
+|f|a|k|e| |c@1|l|o|s|e| @63
+|f|a|k|e| |c|d| @67
+|f|a|k|e| |c|d|o| @66
+|f|a|k|e| |c|e|n|t|e|r| @63
+|f|a|k|e| |c|e|x|p|r| @64
+|f|a|k|e| |c|f|d|o| @65
+|f|a|k|e| |c|f|i|l|e| @64
+|f|a|k|e| |c|f|i|r|s|t| @63
+|f|a|k|e| |c|g|e|t|b|u|f@1|e|r| @59
+@57|7|3|,|1| @9|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_05.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_05.dump
new file mode 100644
index 000000000..9c74dd545
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_05.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|g|e|t|b|u|f@1|e|r| @59
+|f|a|k|e| |c|g|e|t|e|x|p|r| @61
+|f|a|k|e| |c|g|e|t|f|i|l|e| @61
+|f|a|k|e| |c|h|a|n|g|e|s| @62
+|f|a|k|e| |c|h|d|i|r| @64
+>f|a|k|e| |c|h|e|c|k|p|a|t|h| @60
+|f|a|k|e| |c|h|e|c|k|t|i|m|e| @60
+|f|a|k|e| |c|h|i|s|t|o|r|y| @61
+|f|a|k|e| |c|l|a|s@1| @64
+|f|a|k|e| |c|l|a|s|t| @64
+|f|a|k|e| |c|l|e|a|r|j|u|m|p|s| @59
+|f|a|k|e| |c|l|i|s|t| @64
+|f|a|k|e| |c|l|o|s|e| @64
+|f|a|k|e| |c|m|a|p| @65
+|f|a|k|e| |c|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |c|m|e|n|u| @64
+|f|a|k|e| |c|n|e|w|e|r| @63
+|f|a|k|e| |c|n|e|x|t| @64
+|f|a|k|e| |c|N|e|x|t| @64
+@57|9|1|,|1| @9|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_06.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_06.dump
new file mode 100644
index 000000000..658d48978
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_06.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|N|e|x|t| @64
+|f|a|k|e| |c|n|f|i|l|e| @63
+|f|a|k|e| |c|N|f|i|l|e| @63
+|f|a|k|e| |c|n|o|r|e|a|b@1|r|e|v| @58
+|f|a|k|e| |c|n|o|r|e|m|a|p| @61
+>f|a|k|e| |c|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |c|o|l|d|e|r| @63
+|f|a|k|e| |c|o|l|o|r|s|c|h|e|m|e| @58
+|f|a|k|e| |c|o|m|c|l|e|a|r| @61
+|f|a|k|e| |c|o|m@1|a|n|d| @62
+|f|a|k|e| |c|o|m|p|i|l|e|r| @61
+|f|a|k|e| |c|o|n|f|i|r|m| @62
+|f|a|k|e| |c|o|n|s|t| @64
+|f|a|k|e| |c|o|n|t|i|n|u|e| @61
+|f|a|k|e| |c|o|p|e|n| @64
+|f|a|k|e| |c|o|p|y| @65
+|f|a|k|e| |c|p|f|i|l|e| @63
+|f|a|k|e| |c|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |c|q|u|i|t| @64
+@57|1|0|9|,|1| @8|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_07.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_07.dump
new file mode 100644
index 000000000..ceb57e2a5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_07.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|q|u|i|t| @64
+|f|a|k|e| |c|r|e|w|i|n|d| @62
+|f|a|k|e| |c|s|c|o|p|e| @63
+|f|a|k|e| |c|s|t|a|g| @64
+|f|a|k|e| |c|u|n|a|b@1|r|e|v| @60
+>f|a|k|e| |c|u|n|m|a|p| @63
+|f|a|k|e| |c|u|n|m|e|n|u| @62
+|f|a|k|e| |c|w|i|n|d|o|w| @62
+|f|a|k|e| |d|e|b|u|g| @64
+|f|a|k|e| |d|e|b|u|g@1|r|e@1|d|y| @58
+|f|a|k|e| |d|e|f| @66
+|f|a|k|e| |d|e|f|c|o|m|p|i|l|e| @59
+|f|a|k|e| |d|e|f|e|r| @64
+|f|a|k|e| |d|e|l|c|o|m@1|a|n|d| @59
+|f|a|k|e| |d|e|l|e|t|e| @63
+|f|a|k|e| |d|e|l|f|u|n|c|t|i|o|n| @58
+|f|a|k|e| |d|e|l|m|a|r|k|s| @61
+|f|a|k|e| |d|i|f@1|g|e|t| @62
+|f|a|k|e| |d|i|f@1|o|f@1| @62
+@57|1|2|7|,|1| @8|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_08.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_08.dump
new file mode 100644
index 000000000..bca5e7325
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_08.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |d|i|f@1|o|f@1| @62
+|f|a|k|e| |d|i|f@1|p|a|t|c|h| @60
+|f|a|k|e| |d|i|f@1|p|u|t| @62
+|f|a|k|e| |d|i|f@1|s|p|l|i|t| @60
+|f|a|k|e| |d|i|f@1|t|h|i|s| @61
+>f|a|k|e| |d|i|f@1|u|p|d|a|t|e| @59
+|f|a|k|e| |d|i|g|r|a|p|h|s| @61
+|f|a|k|e| |d|i|s|a|s@1|e|m|b|l|e| @58
+|f|a|k|e| |d|i|s|p|l|a|y| @62
+|f|a|k|e| |d|j|u|m|p| @64
+|f|a|k|e| |d|l|i|s|t| @64
+|f|a|k|e| |d|o|a|u|t|o|a|l@1| @60
+|f|a|k|e| |d|o|a|u|t|o|c|m|d| @60
+|f|a|k|e| |d|r|o|p| @65
+|f|a|k|e| |d|s|e|a|r|c|h| @62
+|f|a|k|e| |d|s|p|l|i|t| @63
+|f|a|k|e| |e|a|r|l|i|e|r| @62
+|f|a|k|e| |e|c|h|o| @65
+|f|a|k|e| |e|c|h|o|c|o|n|s|o|l|e| @58
+@57|1|4|5|,|1| @8|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_09.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_09.dump
new file mode 100644
index 000000000..45aa63a40
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_09.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |e|c|h|o|c|o|n|s|o|l|e| @58
+|f|a|k|e| |e|c|h|o|e|r@1| @62
+|f|a|k|e| |e|c|h|o|h|l| @63
+|f|a|k|e| |e|c|h|o|m|s|g| @62
+|f|a|k|e| |e|c|h|o|n| @64
+>f|a|k|e| |e|c|h|o|w|i|n|d|o|w| @59
+|f|a|k|e| |e|d|i|t| @65
+|f|a|k|e| |e|l|s|e| @65
+|f|a|k|e| |e|l|s|e|i|f| @63
+|f|a|k|e| |e|m|e|n|u| @64
+|f|a|k|e| |e|n|d|c|l|a|s@1| @61
+|f|a|k|e| |e|n|d@1|e|f| @63
+|f|a|k|e| |e|n|d|e|n|u|m| @62
+|f|a|k|e| |e|n|d|f|o|r| @63
+|f|a|k|e| |e|n|d|f|u|n|c|t|i|o|n| @58
+|f|a|k|e| |e|n|d|i|f| @64
+|f|a|k|e| |e|n|d|i|n|t|e|r|f|a|c|e| @57
+|f|a|k|e| |e|n|d|t|r|y| @63
+|f|a|k|e| |e|n|d|w|h|i|l|e| @61
+@57|1|6|3|,|1| @8|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_10.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_10.dump
new file mode 100644
index 000000000..76347243f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_10.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |e|n|d|w|h|i|l|e| @61
+|f|a|k|e| |e|n|e|w| @65
+|f|a|k|e| |e|n|u|m| @65
+|f|a|k|e| |e|v|a|l| @65
+|f|a|k|e| |e|x| @67
+>f|a|k|e| |e|x|e|c|u|t|e| @62
+|f|a|k|e| |e|x|i|t| @65
+|f|a|k|e| |e|x|p|o|r|t| @63
+|f|a|k|e| |e|x|u|s|a|g|e| @62
+|f|a|k|e| |f|i|l|e| @65
+|f|a|k|e| |f|i|l|e|s| @64
+|f|a|k|e| |f|i|l|e|t|y|p|e| @61
+|f|a|k|e| |f|i|l|t|e|r| @63
+|f|a|k|e| |f|i|n|a|l| @64
+|f|a|k|e| |f|i|n|a|l@1|y| @62
+|f|a|k|e| |f|i|n|d| @65
+|f|a|k|e| |f|i|n|i|s|h| @63
+|f|a|k|e| |f|i|r|s|t| @64
+|f|a|k|e| |f|i|x|d|e|l| @63
+@57|1|8|1|,|1| @8|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_11.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_11.dump
new file mode 100644
index 000000000..e381b04bb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_11.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |f|i|x|d|e|l| @63
+|f|a|k|e| |f|o|l|d| @65
+|f|a|k|e| |f|o|l|d|c|l|o|s|e| @60
+|f|a|k|e| |f|o|l|d@1|o|c|l|o|s|e|d| @57
+|f|a|k|e| |f|o|l|d@1|o@1|p|e|n| @59
+>f|a|k|e| |f|o|l|d|o|p|e|n| @61
+|f|a|k|e| |f|o|r| @66
+|f|a|k|e| |f|u|n|c|t|i|o|n| @61
+|f|a|k|e| |g|l|o|b|a|l| @63
+|f|a|k|e| |g|o|t|o| @65
+|f|a|k|e| |g|r|e|p| @65
+|f|a|k|e| |g|r|e|p|a|d@1| @62
+|f|a|k|e| |g|u|i| @66
+|f|a|k|e| |g|v|i|m| @65
+|f|a|k|e| |h|a|r|d|c|o|p|y| @61
+|f|a|k|e| |h|e|l|p| @65
+|f|a|k|e| |h|e|l|p|c|l|o|s|e| @60
+|f|a|k|e| |h|e|l|p|f|i|n|d| @61
+|f|a|k|e| |h|e|l|p|g|r|e|p| @61
+@57|1|9@1|,|1| @8|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_12.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_12.dump
new file mode 100644
index 000000000..a802621f1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_12.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |h|e|l|p|g|r|e|p| @61
+|f|a|k|e| |h|e|l|p|t|a|g|s| @61
+|f|a|k|e| |h|i|d|e| @65
+|f|a|k|e| |h|i|g|h|l|i|g|h|t| @60
+|f|a|k|e| |h|i|s|t|o|r|y| @62
+>f|a|k|e| |h|o|r|i|z|o|n|t|a|l| @59
+|f|a|k|e| |i|a|b@1|r|e|v| @62
+|f|a|k|e| |i|a|b|c|l|e|a|r| @61
+|f|a|k|e| |i|f| @67
+|f|a|k|e| |i|j|u|m|p| @64
+|f|a|k|e| |i|l|i|s|t| @64
+|f|a|k|e| |i|m|a|p| @65
+|f|a|k|e| |i|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |i|m|e|n|u| @64
+|f|a|k|e| |i|m|p|o|r|t| @63
+|f|a|k|e| |i|n|o|r|e|a|b@1|r|e|v| @58
+|f|a|k|e| |i|n|o|r|e|m|a|p| @61
+|f|a|k|e| |i|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |i|n|t|e|r|f|a|c|e| @60
+@57|2|1|7|,|1| @8|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_13.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_13.dump
new file mode 100644
index 000000000..414bfc994
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_13.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |i|n|t|e|r|f|a|c|e| @60
+|f|a|k|e| |i|n|t|r|o| @64
+|f|a|k|e| |i|s|e|a|r|c|h| @62
+|f|a|k|e| |i|s|p|l|i|t| @63
+|f|a|k|e| |i|u|n|a|b@1|r|e|v| @60
+>f|a|k|e| |i|u|n|m|a|p| @63
+|f|a|k|e| |i|u|n|m|e|n|u| @62
+|f|a|k|e| |j|o|i|n| @65
+|f|a|k|e| |j|u|m|p|s| @64
+|f|a|k|e| |k|e@1|p|a|l|t| @62
+|f|a|k|e| |k|e@1|p|j|u|m|p|s| @60
+|f|a|k|e| |k|e@1|p|m|a|r|k|s| @60
+|f|a|k|e| |k|e@1|p@1|a|t@1|e|r|n|s| @57
+|f|a|k|e| |l|a|b|o|v|e| @63
+|f|a|k|e| |l|a|d@1|b|u|f@1|e|r| @59
+|f|a|k|e| |l|a|d@1|e|x|p|r| @61
+|f|a|k|e| |l|a|d@1|f|i|l|e| @61
+|f|a|k|e| |l|a|f|t|e|r| @63
+|f|a|k|e| |l|a|n|g|u|a|g|e| @61
+@57|2|3|5|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_14.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_14.dump
new file mode 100644
index 000000000..d8f013d88
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_14.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|a|n|g|u|a|g|e| @61
+|f|a|k|e| |l|a|s|t| @65
+|f|a|k|e| |l|a|t|e|r| @64
+|f|a|k|e| |l|b|e|f|o|r|e| @62
+|f|a|k|e| |l|b|e|l|o|w| @63
+>f|a|k|e| |l|b|o|t@1|o|m| @62
+|f|a|k|e| |l|b|u|f@1|e|r| @62
+|f|a|k|e| |l|c|d| @66
+|f|a|k|e| |l|c|h|d|i|r| @63
+|f|a|k|e| |l|c|l|o|s|e| @63
+|f|a|k|e| |l|c|s|c|o|p|e| @62
+|f|a|k|e| |l|d|o| @66
+|f|a|k|e| |l|e|f|t| @65
+|f|a|k|e| |l|e|f|t|a|b|o|v|e| @60
+|f|a|k|e| |l|e|g|a|c|y| @63
+|f|a|k|e| |l|e|x|p|r| @64
+|f|a|k|e| |l|f|d|o| @65
+|f|a|k|e| |l|f|i|l|e| @64
+|f|a|k|e| |l|f|i|r|s|t| @63
+@57|2|5|3|,|1| @8|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_15.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_15.dump
new file mode 100644
index 000000000..b8652266d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_15.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|f|i|r|s|t| @63
+|f|a|k|e| |l|g|e|t|b|u|f@1|e|r| @59
+|f|a|k|e| |l|g|e|t|e|x|p|r| @61
+|f|a|k|e| |l|g|e|t|f|i|l|e| @61
+|f|a|k|e| |l|g|r|e|p| @64
+>f|a|k|e| |l|g|r|e|p|a|d@1| @61
+|f|a|k|e| |l|h|e|l|p|g|r|e|p| @60
+|f|a|k|e| |l|h|i|s|t|o|r|y| @61
+|f|a|k|e| |l|i|s|t| @65
+|f|a|k|e| |l@1| @67
+|f|a|k|e| |l@1|a|s|t| @64
+|f|a|k|e| |l@1|i|s|t| @64
+|f|a|k|e| |l|m|a|k|e| @64
+|f|a|k|e| |l|m|a|p| @65
+|f|a|k|e| |l|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |l|n|e|w|e|r| @63
+|f|a|k|e| |l|n|e|x|t| @64
+|f|a|k|e| |l|N|e|x|t| @64
+|f|a|k|e| |l|n|f|i|l|e| @63
+@57|2|7|1|,|1| @8|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_16.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_16.dump
new file mode 100644
index 000000000..1e005f31f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_16.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|n|f|i|l|e| @63
+|f|a|k|e| |l|N|f|i|l|e| @63
+|f|a|k|e| |l|n|o|r|e|m|a|p| @61
+|f|a|k|e| |l|o|a|d|k|e|y|m|a|p| @59
+|f|a|k|e| |l|o|a|d|v|i|e|w| @61
+>f|a|k|e| |l|o|c|k|m|a|r|k|s| @60
+|f|a|k|e| |l|o|c|k|v|a|r| @62
+|f|a|k|e| |l|o|l|d|e|r| @63
+|f|a|k|e| |l|o|p|e|n| @64
+|f|a|k|e| |l|p|f|i|l|e| @63
+|f|a|k|e| |l|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |l|r|e|w|i|n|d| @62
+|f|a|k|e| |l|s| @67
+|f|a|k|e| |l|t|a|g| @65
+|f|a|k|e| |l|u|a| @66
+|f|a|k|e| |l|u|a|d|o| @64
+|f|a|k|e| |l|u|a|f|i|l|e| @62
+|f|a|k|e| |l|u|n|m|a|p| @63
+|f|a|k|e| |l|v|i|m|g|r|e|p| @61
+@57|2|8|9|,|1| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_17.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_17.dump
new file mode 100644
index 000000000..9e62915b8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_17.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|v|i|m|g|r|e|p| @61
+|f|a|k|e| |l|v|i|m|g|r|e|p|a|d@1| @58
+|f|a|k|e| |l|w|i|n|d|o|w| @62
+|f|a|k|e| |m|a|k|e| @65
+|f|a|k|e| |m|a|p| @66
+>f|a|k|e| |m|a|p|c|l|e|a|r| @61
+|f|a|k|e| |m|a|r|k| @65
+|f|a|k|e| |m|a|r|k|s| @64
+|f|a|k|e| |m|a|t|c|h| @64
+|f|a|k|e| |m|e|n|u| @65
+|f|a|k|e| |m|e|n|u|t|r|a|n|s|l|a|t|e| @56
+|f|a|k|e| |m|e|s@1|a|g|e|s| @61
+|f|a|k|e| |m|k|e|x|r|c| @63
+|f|a|k|e| |m|k|s|e|s@1|i|o|n| @60
+|f|a|k|e| |m|k|s|p|e|l@1| @62
+|f|a|k|e| |m|k|v|i|e|w| @63
+|f|a|k|e| |m|k|v|i|m|r|c| @62
+|f|a|k|e| |m|o|v|e| @65
+|f|a|k|e| |m|z|f|i|l|e| @63
+@57|3|0|7|,|1| @8|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_18.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_18.dump
new file mode 100644
index 000000000..0f7966c8e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_18.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |m|z|f|i|l|e| @63
+|f|a|k|e| |m|z|s|c|h|e|m|e| @61
+|f|a|k|e| |n|b|c|l|o|s|e| @62
+|f|a|k|e| |n|b|k|e|y| @64
+|f|a|k|e| |n|b|s|t|a|r|t| @62
+>f|a|k|e| |n|e|w| @66
+|f|a|k|e| |n|e|x|t| @65
+|f|a|k|e| |n|m|a|p| @65
+|f|a|k|e| |n|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |n|m|e|n|u| @64
+|f|a|k|e| |n@1|o|r|e|m|a|p| @61
+|f|a|k|e| |n@1|o|r|e|m|e|n|u| @60
+|f|a|k|e| |n|o|a|u|t|o|c|m|d| @60
+|f|a|k|e| |n|o|h|l|s|e|a|r|c|h| @59
+|f|a|k|e| |n|o|r|e|a|b@1|r|e|v| @59
+|f|a|k|e| |n|o|r|e|m|a|p| @62
+|f|a|k|e| |n|o|r|e|m|e|n|u| @61
+|f|a|k|e| |n|o|r|m|a|l| @63
+|f|a|k|e| |n|o|s|w|a|p|f|i|l|e| @59
+@57|3|2|5|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_19.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_19.dump
new file mode 100644
index 000000000..8c2ed226e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_19.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |n|o|s|w|a|p|f|i|l|e| @59
+|f|a|k|e| |n|u|m|b|e|r| @63
+|f|a|k|e| |n|u|n|m|a|p| @63
+|f|a|k|e| |n|u|n|m|e|n|u| @62
+|f|a|k|e| |o|l|d|f|i|l|e|s| @61
+>f|a|k|e| |o|m|a|p| @65
+|f|a|k|e| |o|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |o|m|e|n|u| @64
+|f|a|k|e| |o|n|l|y| @65
+|f|a|k|e| |o|n|o|r|e|m|a|p| @61
+|f|a|k|e| |o|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |o|p|t|i|o|n|s| @62
+|f|a|k|e| |o|u|n|m|a|p| @63
+|f|a|k|e| |o|u|n|m|e|n|u| @62
+|f|a|k|e| |o|w|n|s|y|n|t|a|x| @60
+|f|a|k|e| |p|a|c|k|a|d@1| @62
+|f|a|k|e| |p|a|c|k|l|o|a|d|a|l@1| @58
+|f|a|k|e| |p|c|l|o|s|e| @63
+|f|a|k|e| |p|e|d|i|t| @64
+@57|3|4|3|,|1| @8|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_20.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_20.dump
new file mode 100644
index 000000000..12757b3c1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_20.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |p|e|d|i|t| @64
+|f|a|k|e| |p|e|r|l| @65
+|f|a|k|e| |p|e|r|l|d|o| @63
+|f|a|k|e| |p|o|p| @66
+|f|a|k|e| |p|o|p|u|p| @64
+>f|a|k|e| |p@1|o|p| @65
+|f|a|k|e| |p|r|e|s|e|r|v|e| @61
+|f|a|k|e| |p|r|e|v|i|o|u|s| @61
+|f|a|k|e| |p|r|i|n|t| @64
+|f|a|k|e| |p|r|o|f|d|e|l| @62
+|f|a|k|e| |p|r|o|f|i|l|e| @62
+|f|a|k|e| |p|r|o|m|p|t|f|i|n|d| @59
+|f|a|k|e| |p|r|o|m|p|t|r|e|p|l| @59
+|f|a|k|e| |p|s|e|a|r|c|h| @62
+|f|a|k|e| |p|t|a|g| @65
+|f|a|k|e| |p|t|f|i|r|s|t| @62
+|f|a|k|e| |p|t|j|u|m|p| @63
+|f|a|k|e| |p|t|l|a|s|t| @63
+|f|a|k|e| |p|t|n|e|x|t| @63
+@57|3|6|1|,|1| @8|5|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_21.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_21.dump
new file mode 100644
index 000000000..86d8aabe2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_21.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |p|t|n|e|x|t| @63
+|f|a|k|e| |p|t|N|e|x|t| @63
+|f|a|k|e| |p|t|p|r|e|v|i|o|u|s| @59
+|f|a|k|e| |p|t|r|e|w|i|n|d| @61
+|f|a|k|e| |p|t|s|e|l|e|c|t| @61
+>f|a|k|e| |p|u|t| @66
+|f|a|k|e| |p|w|d| @66
+|f|a|k|e| |p|y|3| @66
+|f|a|k|e| |p|y|3|d|o| @64
+|f|a|k|e| |p|y|3|f|i|l|e| @62
+|f|a|k|e| |p|y|d|o| @65
+|f|a|k|e| |p|y|f|i|l|e| @63
+|f|a|k|e| |p|y|t|h|o|n| @63
+|f|a|k|e| |p|y|t|h|o|n|3| @62
+|f|a|k|e| |p|y|t|h|o|n|x| @62
+|f|a|k|e| |p|y|x| @66
+|f|a|k|e| |p|y|x|d|o| @64
+|f|a|k|e| |p|y|x|f|i|l|e| @62
+|f|a|k|e| |q|a|l@1| @65
+@57|3|7|9|,|1| @8|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_22.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_22.dump
new file mode 100644
index 000000000..06b96db77
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_22.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |q|a|l@1| @65
+|f|a|k|e| |q|u|i|t| @65
+|f|a|k|e| |q|u|i|t|a|l@1| @62
+|f|a|k|e| |r|e|a|d| @65
+|f|a|k|e| |r|e|c|o|v|e|r| @62
+>f|a|k|e| |r|e|d|i|r| @64
+|f|a|k|e| |r|e|d|o| @65
+|f|a|k|e| |r|e|d|r|a|w| @63
+|f|a|k|e| |r|e|d|r|a|w|s|t|a|t|u|s| @57
+|f|a|k|e| |r|e|d|r|a|w|t|a|b|l|i|n|e| @56
+|f|a|k|e| |r|e|g|i|s|t|e|r|s| @60
+|f|a|k|e| |r|e|s|i|z|e| @63
+|f|a|k|e| |r|e|t|a|b| @64
+|f|a|k|e| |r|e|t|u|r|n| @63
+|f|a|k|e| |r|e|w|i|n|d| @63
+|f|a|k|e| |r|i|g|h|t| @64
+|f|a|k|e| |r|i|g|h|t|b|e|l|o|w| @59
+|f|a|k|e| |r|u|b|y| @65
+|f|a|k|e| |r|u|b|y|d|o| @63
+@57|3|9|7|,|1| @8|6@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_23.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_23.dump
new file mode 100644
index 000000000..36f1801eb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_23.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |r|u|b|y|d|o| @63
+|f|a|k|e| |r|u|b|y|f|i|l|e| @61
+|f|a|k|e| |r|u|n|d|o| @64
+|f|a|k|e| |r|u|n|t|i|m|e| @62
+|f|a|k|e| |r|v|i|m|i|n|f|o| @61
+>f|a|k|e| |s|a|l@1| @65
+|f|a|k|e| |s|a|n|d|b|o|x| @62
+|f|a|k|e| |s|a|r|g|u|m|e|n|t| @60
+|f|a|k|e| |s|a|v|e|a|s| @63
+|f|a|k|e| |s|b|a|l@1| @64
+|f|a|k|e| |s|b|f|i|r|s|t| @62
+|f|a|k|e| |s|b|l|a|s|t| @63
+|f|a|k|e| |s|b|m|o|d|i|f|i|e|d| @59
+|f|a|k|e| |s|b|n|e|x|t| @63
+|f|a|k|e| |s|b|N|e|x|t| @63
+|f|a|k|e| |s|b|p|r|e|v|i|o|u|s| @59
+|f|a|k|e| |s|b|r|e|w|i|n|d| @61
+|f|a|k|e| |s|b|u|f@1|e|r| @62
+|f|a|k|e| |s|c|r|i|p|t|e|n|c|o|d|i|n|g| @55
+@57|4|1|5|,|1| @8|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_24.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_24.dump
new file mode 100644
index 000000000..ba19ac161
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_24.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|c|r|i|p|t|e|n|c|o|d|i|n|g| @55
+|f|a|k|e| |s|c|r|i|p|t|n|a|m|e|s| @58
+|f|a|k|e| |s|c|r|i|p|t|v|e|r|s|i|o|n| @56
+|f|a|k|e| |s|c|s|c|o|p|e| @62
+|f|a|k|e| |s|e|t| @66
+>f|a|k|e| |s|e|t|f|i|l|e|t|y|p|e| @58
+|f|a|k|e| |s|e|t|g|l|o|b|a|l| @60
+|f|a|k|e| |s|e|t|l|o|c|a|l| @61
+|f|a|k|e| |s|f|i|n|d| @64
+|f|a|k|e| |s|f|i|r|s|t| @63
+|f|a|k|e| |s|h|e|l@1| @64
+|f|a|k|e| |s|i|g|n| @65
+|f|a|k|e| |s|i|l|e|n|t| @63
+|f|a|k|e| |s|i|m|a|l|t| @63
+|f|a|k|e| |s|l|a|s|t| @64
+|f|a|k|e| |s|l|e@1|p| @64
+|f|a|k|e| |s|m|a|g|i|c| @63
+|f|a|k|e| |s|m|a|p| @65
+|f|a|k|e| |s|m|a|p|c|l|e|a|r| @60
+@57|4|3@1|,|1| @8|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_25.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_25.dump
new file mode 100644
index 000000000..0d4ed75af
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_25.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |s|m|e|n|u| @64
+|f|a|k|e| |s|m|i|l|e| @64
+|f|a|k|e| |s|n|e|x|t| @64
+|f|a|k|e| |s|N|e|x|t| @64
+>f|a|k|e| |s|n|o|m|a|g|i|c| @61
+|f|a|k|e| |s|n|o|r|e|m|a|p| @61
+|f|a|k|e| |s|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |s|o|r|t| @65
+|f|a|k|e| |s|o|u|r|c|e| @63
+|f|a|k|e| |s|p|e|l@1|d|u|m|p| @60
+|f|a|k|e| |s|p|e|l@1|g|o@1|d| @60
+|f|a|k|e| |s|p|e|l@1|i|n|f|o| @60
+|f|a|k|e| |s|p|e|l@1|r|a|r|e| @60
+|f|a|k|e| |s|p|e|l@1|r|e|p|a|l@1| @58
+|f|a|k|e| |s|p|e|l@1|u|n|d|o| @60
+|f|a|k|e| |s|p|e|l@1|w|r|o|n|g| @59
+|f|a|k|e| |s|p|l|i|t| @64
+|f|a|k|e| |s|p|r|e|v|i|o|u|s| @60
+@57|4|5|1|,|1| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_26.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_26.dump
new file mode 100644
index 000000000..89cf3c6bd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_26.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |s|r|e|w|i|n|d| @62
+|f|a|k|e| |s|t|a|g| @65
+|f|a|k|e| |s|t|a|r|t|g|r|e|p|l|a|c|e| @56
+|f|a|k|e| |s|t|a|r|t|i|n|s|e|r|t| @58
+>f|a|k|e| |s|t|a|r|t|r|e|p|l|a|c|e| @57
+|f|a|k|e| |s|t|j|u|m|p| @63
+|f|a|k|e| |s|t|o|p| @65
+|f|a|k|e| |s|t|o|p|i|n|s|e|r|t| @59
+|f|a|k|e| |s|t|s|e|l|e|c|t| @61
+|f|a|k|e| |s|u|b|s|t|i|t|u|t|e| @59
+|f|a|k|e| |s|u|n|h|i|d|e| @62
+|f|a|k|e| |s|u|n|m|a|p| @63
+|f|a|k|e| |s|u|n|m|e|n|u| @62
+|f|a|k|e| |s|u|s|p|e|n|d| @62
+|f|a|k|e| |s|v|i|e|w| @64
+|f|a|k|e| |s|w|a|p|n|a|m|e| @61
+|f|a|k|e| |s|y|n|c|b|i|n|d| @61
+|f|a|k|e| |s|y|n|t|a|x| @63
+@57|4|6|9|,|1| @8|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_27.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_27.dump
new file mode 100644
index 000000000..6e286d896
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_27.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|y|n|t|a|x| @63
+|f|a|k|e| |s|y|n|t|i|m|e| @62
+|f|a|k|e| |t|a|b| @66
+|f|a|k|e| |t|a|b|c|l|o|s|e| @61
+|f|a|k|e| |t|a|b|d|o| @64
+>f|a|k|e| |t|a|b|e|d|i|t| @62
+|f|a|k|e| |t|a|b|f|i|n|d| @62
+|f|a|k|e| |t|a|b|f|i|r|s|t| @61
+|f|a|k|e| |t|a|b|l|a|s|t| @62
+|f|a|k|e| |t|a|b|m|o|v|e| @62
+|f|a|k|e| |t|a|b|n|e|w| @63
+|f|a|k|e| |t|a|b|n|e|x|t| @62
+|f|a|k|e| |t|a|b|N|e|x|t| @62
+|f|a|k|e| |t|a|b|o|n|l|y| @62
+|f|a|k|e| |t|a|b|p|r|e|v|i|o|u|s| @58
+|f|a|k|e| |t|a|b|r|e|w|i|n|d| @60
+|f|a|k|e| |t|a|b|s| @65
+|f|a|k|e| |t|a|g| @66
+|f|a|k|e| |t|a|g|s| @65
+@57|4|8|7|,|1| @8|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_28.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_28.dump
new file mode 100644
index 000000000..c54f76ed9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_28.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |t|a|g|s| @65
+|f|a|k|e| |t|c|d| @66
+|f|a|k|e| |t|c|h|d|i|r| @63
+|f|a|k|e| |t|c|l| @66
+|f|a|k|e| |t|c|l|d|o| @64
+>f|a|k|e| |t|c|l|f|i|l|e| @62
+|f|a|k|e| |t|e|a|r|o|f@1| @62
+|f|a|k|e| |t|e|r|m|i|n|a|l| @61
+|f|a|k|e| |t|f|i|r|s|t| @63
+|f|a|k|e| |t|h|r|o|w| @64
+|f|a|k|e| |t|j|u|m|p| @64
+|f|a|k|e| |t|l|a|s|t| @64
+|f|a|k|e| |t|l|m|e|n|u| @63
+|f|a|k|e| |t|l|n|o|r|e|m|e|n|u| @59
+|f|a|k|e| |t|l|u|n|m|e|n|u| @61
+|f|a|k|e| |t|m|a|p| @65
+|f|a|k|e| |t|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |t|m|e|n|u| @64
+|f|a|k|e| |t|n|e|x|t| @64
+@57|5|0|5|,|1| @8|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_29.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_29.dump
new file mode 100644
index 000000000..ab70cd109
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_29.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |t|n|e|x|t| @64
+|f|a|k|e| |t|N|e|x|t| @64
+|f|a|k|e| |t|n|o|r|e|m|a|p| @61
+|f|a|k|e| |t|o|p|l|e|f|t| @62
+|f|a|k|e| |t|p|r|e|v|i|o|u|s| @60
+>f|a|k|e| |t|r|e|w|i|n|d| @62
+|f|a|k|e| |t|r|y| @66
+|f|a|k|e| |t|s|e|l|e|c|t| @62
+|f|a|k|e| |t|u|n|m|a|p| @63
+|f|a|k|e| |t|u|n|m|e|n|u| @62
+|f|a|k|e| |t|y|p|e| @65
+|f|a|k|e| |u|n|a|b@1|r|e|v|i|a|t|e| @57
+|f|a|k|e| |u|n|d|o| @65
+|f|a|k|e| |u|n|d|o|j|o|i|n| @61
+|f|a|k|e| |u|n|d|o|l|i|s|t| @61
+|f|a|k|e| |u|n|h|i|d|e| @63
+|f|a|k|e| |u|n|i|q| @65
+|f|a|k|e| |u|n|l|e|t| @64
+|f|a|k|e| |u|n|l|o|c|k|v|a|r| @60
+@57|5|2|3|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_30.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_30.dump
new file mode 100644
index 000000000..57f88a5b5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_30.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |u|n|l|o|c|k|v|a|r| @60
+|f|a|k|e| |u|n|m|a|p| @64
+|f|a|k|e| |u|n|m|e|n|u| @63
+|f|a|k|e| |u|n|s|i|l|e|n|t| @61
+|f|a|k|e| |u|p|d|a|t|e| @63
+>f|a|k|e| |v|a|r| @66
+|f|a|k|e| |v|e|r|b|o|s|e| @62
+|f|a|k|e| |v|e|r|s|i|o|n| @62
+|f|a|k|e| |v|e|r|t|i|c|a|l| @61
+|f|a|k|e| |v|g|l|o|b|a|l| @62
+|f|a|k|e| |v|i|e|w| @65
+|f|a|k|e| |v|i|m|9|c|m|d| @62
+|#+0#0000e05&| |:|v|i|m|9|s|c|r|i|p|t| +0#0000000&@61
+|f|a|k|e| |v|i|m|g|r|e|p| @62
+|f|a|k|e| |v|i|m|g|r|e|p|a|d@1| @59
+|f|a|k|e| |v|i|s|u|a|l| @63
+|f|a|k|e| |v|i|u|s|a|g|e| @62
+|f|a|k|e| |v|m|a|p| @65
+|f|a|k|e| |v|m|a|p|c|l|e|a|r| @60
+@57|5|4|1|,|1| @8|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_31.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_31.dump
new file mode 100644
index 000000000..9883ff713
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_31.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |v|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |v|m|e|n|u| @64
+|f|a|k|e| |v|n|e|w| @65
+|f|a|k|e| |v|n|o|r|e|m|a|p| @61
+|f|a|k|e| |v|n|o|r|e|m|e|n|u| @60
+>f|a|k|e| |v|s|p|l|i|t| @63
+|f|a|k|e| |v|u|n|m|a|p| @63
+|f|a|k|e| |v|u|n|m|e|n|u| @62
+|f|a|k|e| |w|a|l@1| @65
+|f|a|k|e| |w|h|i|l|e| @64
+|f|a|k|e| |w|i|n|c|m|d| @63
+|f|a|k|e| |w|i|n|d|o| @64
+|f|a|k|e| |w|i|n|p|o|s| @63
+|f|a|k|e| |w|i|n|s|i|z|e| @62
+|f|a|k|e| |w|n|e|x|t| @64
+|f|a|k|e| |w|N|e|x|t| @64
+|f|a|k|e| |w|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |w|q| @67
+|f|a|k|e| |w|q|a|l@1| @64
+@57|5@1|9|,|1| @8|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_32.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_32.dump
new file mode 100644
index 000000000..68c96f063
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_32.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |w|q|a|l@1| @64
+|f|a|k|e| |w|r|i|t|e| @64
+|f|a|k|e| |w|u|n|d|o| @64
+|f|a|k|e| |w|v|i|m|i|n|f|o| @61
+|f|a|k|e| |x|a|l@1| @65
+>f|a|k|e| |x|m|a|p| @65
+|f|a|k|e| |x|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |x|m|e|n|u| @64
+|f|a|k|e| |x|n|o|r|e|m|a|p| @61
+|f|a|k|e| |x|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |x|r|e|s|t|o|r|e| @61
+|f|a|k|e| |x|u|n|m|a|p| @63
+|f|a|k|e| |x|u|n|m|e|n|u| @62
+|f|a|k|e| |y|a|n|k| @65
+|f|a|k|e| |z| @68
+@75
+@75
+|#+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |o|n|l|y| +0#0000000&@54
+@75
+@57|5|7@1|,|1| @8|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_33.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_33.dump
new file mode 100644
index 000000000..ec1eb76a8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_33.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|f|a|k|e| |P|r|i|n|t| @64
+|f|a|k|e| |a|p@1|e|n|d| @63
+|f|a|k|e| |c|h|a|n|g|e| @63
+|f|a|k|e| |i|n|s|e|r|t| @63
+>f|a|k|e| |k| @68
+|f|a|k|e| |l|e|t| @66
+|f|a|k|e| |m|o|d|e| @65
+|f|a|k|e| |o|p|e|n| @65
+|f|a|k|e| |t| @68
+|f|a|k|e| |x|i|t| @66
+@75
+@75
+|#+0#0000e05&| |U|s|e|r| |c|o|m@1|a|n|d|s| +0#0000000&@59
+@75
+|f|a|k|e| |F|o@1|b|a|r| @63
+|f|a|k|e| |F|o@1|b|a|r|!| @62
+|f|a|k|e| |F|o@1|b|a|r|1|2|3| @60
+|f|a|k|e| |F|o@1|b|a|r|1|2|3|!+0#af5f00255&| +0#0000000&@59
+@57|5|9|5|,|1| @8|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_34.dump b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_34.dump
new file mode 100644
index 000000000..7aa56f3b7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_commands_contained_34.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |F|o@1|b|a|r|1|2|3|!+0#af5f00255&| +0#0000000&@59
+|f|a|k|e| |F|o@1|1|2|3|b|a|r| @60
+|f|a|k|e| |F|o@1|1|2|3|b|a|r|!| @59
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6|1@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_00.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_00.dump
new file mode 100644
index 000000000..d9b0e06c4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_00.dump
@@ -0,0 +1,20 @@
+>#+0#af5f00255#ffffff0| +0#0000000&|E|x| |c|o|m@1|a|n|d| |c|o|n|t|a|i|n|m|e|n|t| @50
+@75
+@75
+|f|a|k|e| |&+0#00e0e07&| +0#0000000&@68
+|f|a|k|e| |~| @68
+|f|a|k|e| |@| @68
+|"+0#0000e05&| |:|*| +0#0000000&@70
+|f|a|k|e| |>+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |<+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |#| @68
+|f|a|k|e| |=+0#af5f00255&| +0#0000000&@68
+|f|a|k|e| |!+0#af5f00255&| +0#0000000&@68
+@75
+|f|a|k|e| |N|e|x|t| @65
+|f|a|k|e| |P|r|i|n|t| @64
+|f|a|k|e| |X| @68
+@75
+|f|a|k|e| |a|p@1|e|n|d| @63
+|f|a|k|e| |a|b@1|r|e|v|i|a|t|e| @59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_01.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_01.dump
new file mode 100644
index 000000000..2f78633da
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_01.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |N|e|x|t| @65
+|f|a|k|e| |P|r|i|n|t| @64
+|f|a|k|e| |X| @68
+@75
+|f|a|k|e| |a|p@1|e|n|d| @63
+>f|a|k|e| |a|b@1|r|e|v|i|a|t|e| @59
+|f|a|k|e| |a|b|c|l|e|a|r| @62
+|f|a|k|e| |a|b|o|v|e|l|e|f|t| @60
+|f|a|k|e| |a|l@1| @66
+|f|a|k|e| |a|m|e|n|u| @64
+|f|a|k|e| |a|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |a|r|g|a|d@1| @63
+|f|a|k|e| |a|r|g|d|e|d|u|p|e| @60
+|f|a|k|e| |a|r|g|d|e|l|e|t|e| @60
+|f|a|k|e| |a|r|g|d|o| @64
+|f|a|k|e| |a|r|g|e|d|i|t| @62
+|f|a|k|e| |a|r|g@1|l|o|b|a|l| @60
+|f|a|k|e| |a|r|g|l|o|c|a|l| @61
+|f|a|k|e| |a|r|g|s| @65
+@57|1|9|,|1| @10|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_02.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_02.dump
new file mode 100644
index 000000000..597a75231
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_02.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |a|r|g|s| @65
+|f|a|k|e| |a|r|g|u|m|e|n|t| @61
+|f|a|k|e| |a|s|c|i@1| @64
+|f|a|k|e| |a|u|g|r|o|u|p| |F|o@1| @58
+|f|a|k|e| |a+0#ffffff16#ff404010|u|g|r|o|u|p| |E|N|D| +0#0000000#ffffff0@58
+>f|a|k|e| |a|u|n|m|e|n|u| @62
+|f|a|k|e| |a|u|t|o|c|m|d| @62
+|f|a|k|e| |b|a|d@1| @65
+|f|a|k|e| |b|a|l@1| @65
+|f|a|k|e| |b|a|l|t| @65
+|f|a|k|e| |b|d|e|l|e|t|e| @62
+|f|a|k|e| |b|e|h|a|v|e| |m|s|w|i|n| @57
+|f|a|k|e| |b|e|h|a|v|e| |x|t|e|r|m| @57
+|f|a|k|e| |b|e|l|o|w|r|i|g|h|t| @59
+|f|a|k|e| |b|f|i|r|s|t| @63
+|f|a|k|e| |b|l|a|s|t| @64
+|f|a|k|e| |b|m|o|d|i|f|i|e|d| @60
+|f|a|k|e| |b|n|e|x|t| @64
+|f|a|k|e| |b|N|e|x|t| @64
+@57|3|7|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_03.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_03.dump
new file mode 100644
index 000000000..ae95c39a9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_03.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |b|N|e|x|t| @64
+|f|a|k|e| |b|o|t|r|i|g|h|t| @61
+|f|a|k|e| |b|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |b|r|e|a|k| @64
+|f|a|k|e| |b|r|e|a|k|a|d@1| @61
+>f|a|k|e| |b|r|e|a|k|d|e|l| @61
+|f|a|k|e| |b|r|e|a|k|l|i|s|t| @60
+|f|a|k|e| |b|r|e|w|i|n|d| @62
+|f|a|k|e| |b|r|o|w|s|e| @63
+|f|a|k|e| |b|u|f|d|o| @64
+|f|a|k|e| |b|u|f@1|e|r| @63
+|f|a|k|e| |b|u|f@1|e|r|s| @62
+|f|a|k|e| |b|u|n|l|o|a|d| @62
+|f|a|k|e| |b|w|i|p|e|o|u|t| @61
+|f|a|k|e| |c|h|a|n|g|e| @63
+|f|a|k|e| |c|a|b@1|r|e|v| @62
+|f|a|k|e| |c|a|b|c|l|e|a|r| @61
+|f|a|k|e| |c|a|b|o|v|e| @63
+|f|a|k|e| |c|a|d@1|b|u|f@1|e|r| @59
+@57|5@1|,|1| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_04.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_04.dump
new file mode 100644
index 000000000..45ae9dbc0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_04.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|a|d@1|b|u|f@1|e|r| @59
+|f|a|k|e| |c|a|d@1|e|x|p|r| @61
+|f|a|k|e| |c|a|d@1|f|i|l|e| @61
+|f|a|k|e| |c|a|f|t|e|r| @63
+|f|a|k|e| |c|a|l@1| @65
+>f|a|k|e| |c|a|t|c|h| @64
+|f|a|k|e| |c|b|e|f|o|r|e| @62
+|f|a|k|e| |c|b|e|l|o|w| @63
+|f|a|k|e| |c|b|o|t@1|o|m| @62
+|f|a|k|e| |c|b|u|f@1|e|r| @62
+|f|a|k|e| |c@1| @67
+|f|a|k|e| |c@1|l|o|s|e| @63
+|f|a|k|e| |c|d| @67
+|f|a|k|e| |c|d|o| @66
+|f|a|k|e| |c|e|n|t|e|r| @63
+|f|a|k|e| |c|e|x|p|r| @64
+|f|a|k|e| |c|f|d|o| @65
+|f|a|k|e| |c|f|i|l|e| @64
+|f|a|k|e| |c|f|i|r|s|t| @63
+@57|7|3|,|1| @9|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_05.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_05.dump
new file mode 100644
index 000000000..5037beaf3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_05.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|f|i|r|s|t| @63
+|f|a|k|e| |c|g|e|t|b|u|f@1|e|r| @59
+|f|a|k|e| |c|g|e|t|e|x|p|r| @61
+|f|a|k|e| |c|g|e|t|f|i|l|e| @61
+|f|a|k|e| |c|h|a|n|g|e|s| @62
+>f|a|k|e| |c|h|d|i|r| @64
+|f|a|k|e| |c|h|e|c|k|p|a|t|h| @60
+|f|a|k|e| |c|h|e|c|k|t|i|m|e| @60
+|f|a|k|e| |c|h|i|s|t|o|r|y| @61
+|f|a|k|e| |c|l|a|s|t| @64
+|f|a|k|e| |c|l|e|a|r|j|u|m|p|s| @59
+|f|a|k|e| |c|l|i|s|t| @64
+|f|a|k|e| |c|l|o|s|e| @64
+|f|a|k|e| |c|m|a|p| @65
+|f|a|k|e| |c|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |c|m|e|n|u| @64
+|f|a|k|e| |c|n|e|w|e|r| @63
+|f|a|k|e| |c|n|e|x|t| @64
+|f|a|k|e| |c|N|e|x|t| @64
+@57|9|1|,|1| @9|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_06.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_06.dump
new file mode 100644
index 000000000..658d48978
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_06.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|N|e|x|t| @64
+|f|a|k|e| |c|n|f|i|l|e| @63
+|f|a|k|e| |c|N|f|i|l|e| @63
+|f|a|k|e| |c|n|o|r|e|a|b@1|r|e|v| @58
+|f|a|k|e| |c|n|o|r|e|m|a|p| @61
+>f|a|k|e| |c|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |c|o|l|d|e|r| @63
+|f|a|k|e| |c|o|l|o|r|s|c|h|e|m|e| @58
+|f|a|k|e| |c|o|m|c|l|e|a|r| @61
+|f|a|k|e| |c|o|m@1|a|n|d| @62
+|f|a|k|e| |c|o|m|p|i|l|e|r| @61
+|f|a|k|e| |c|o|n|f|i|r|m| @62
+|f|a|k|e| |c|o|n|s|t| @64
+|f|a|k|e| |c|o|n|t|i|n|u|e| @61
+|f|a|k|e| |c|o|p|e|n| @64
+|f|a|k|e| |c|o|p|y| @65
+|f|a|k|e| |c|p|f|i|l|e| @63
+|f|a|k|e| |c|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |c|q|u|i|t| @64
+@57|1|0|9|,|1| @8|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_07.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_07.dump
new file mode 100644
index 000000000..ceb57e2a5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_07.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|q|u|i|t| @64
+|f|a|k|e| |c|r|e|w|i|n|d| @62
+|f|a|k|e| |c|s|c|o|p|e| @63
+|f|a|k|e| |c|s|t|a|g| @64
+|f|a|k|e| |c|u|n|a|b@1|r|e|v| @60
+>f|a|k|e| |c|u|n|m|a|p| @63
+|f|a|k|e| |c|u|n|m|e|n|u| @62
+|f|a|k|e| |c|w|i|n|d|o|w| @62
+|f|a|k|e| |d|e|b|u|g| @64
+|f|a|k|e| |d|e|b|u|g@1|r|e@1|d|y| @58
+|f|a|k|e| |d|e|f| @66
+|f|a|k|e| |d|e|f|c|o|m|p|i|l|e| @59
+|f|a|k|e| |d|e|f|e|r| @64
+|f|a|k|e| |d|e|l|c|o|m@1|a|n|d| @59
+|f|a|k|e| |d|e|l|e|t|e| @63
+|f|a|k|e| |d|e|l|f|u|n|c|t|i|o|n| @58
+|f|a|k|e| |d|e|l|m|a|r|k|s| @61
+|f|a|k|e| |d|i|f@1|g|e|t| @62
+|f|a|k|e| |d|i|f@1|o|f@1| @62
+@57|1|2|7|,|1| @8|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_08.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_08.dump
new file mode 100644
index 000000000..bca5e7325
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_08.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |d|i|f@1|o|f@1| @62
+|f|a|k|e| |d|i|f@1|p|a|t|c|h| @60
+|f|a|k|e| |d|i|f@1|p|u|t| @62
+|f|a|k|e| |d|i|f@1|s|p|l|i|t| @60
+|f|a|k|e| |d|i|f@1|t|h|i|s| @61
+>f|a|k|e| |d|i|f@1|u|p|d|a|t|e| @59
+|f|a|k|e| |d|i|g|r|a|p|h|s| @61
+|f|a|k|e| |d|i|s|a|s@1|e|m|b|l|e| @58
+|f|a|k|e| |d|i|s|p|l|a|y| @62
+|f|a|k|e| |d|j|u|m|p| @64
+|f|a|k|e| |d|l|i|s|t| @64
+|f|a|k|e| |d|o|a|u|t|o|a|l@1| @60
+|f|a|k|e| |d|o|a|u|t|o|c|m|d| @60
+|f|a|k|e| |d|r|o|p| @65
+|f|a|k|e| |d|s|e|a|r|c|h| @62
+|f|a|k|e| |d|s|p|l|i|t| @63
+|f|a|k|e| |e|a|r|l|i|e|r| @62
+|f|a|k|e| |e|c|h|o| @65
+|f|a|k|e| |e|c|h|o|c|o|n|s|o|l|e| @58
+@57|1|4|5|,|1| @8|2|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_09.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_09.dump
new file mode 100644
index 000000000..7fd1dae51
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_09.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |e|c|h|o|c|o|n|s|o|l|e| @58
+|f|a|k|e| |e|c|h|o|e|r@1| @62
+|f|a|k|e| |e|c|h|o|h|l| @63
+|f|a|k|e| |e|c|h|o|m|s|g| @62
+|f|a|k|e| |e|c|h|o|n| @64
+>f|a|k|e| |e|c|h|o|w|i|n|d|o|w| @59
+|f|a|k|e| |e|d|i|t| @65
+|f|a|k|e| |e|l|s|e| @65
+|f|a|k|e| |e|l|s|e|i|f| @63
+|f|a|k|e| |e|m|e|n|u| @64
+|f|a|k|e| |e|n|d@1|e|f| @63
+|f|a|k|e| |e|n|d|f|o|r| @63
+|f|a|k|e| |e|n|d|f|u|n|c|t|i|o|n| @58
+|f|a|k|e| |e|n|d|i|f| @64
+|f|a|k|e| |e|n|d|t|r|y| @63
+|f|a|k|e| |e|n|d|w|h|i|l|e| @61
+|f|a|k|e| |e|n|e|w| @65
+|f|a|k|e| |e|v|a|l| @65
+|f|a|k|e| |e|x| @67
+@57|1|6|3|,|1| @8|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_10.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_10.dump
new file mode 100644
index 000000000..4a8e7514f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_10.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |e|x| @67
+|f|a|k|e| |e|x|e|c|u|t|e| @62
+|f|a|k|e| |e|x|i|t| @65
+|f|a|k|e| |e|x|u|s|a|g|e| @62
+|f|a|k|e| |f|i|l|e| @65
+>f|a|k|e| |f|i|l|e|s| @64
+|f|a|k|e| |f|i|l|e|t|y|p|e| @61
+|f|a|k|e| |f|i|l|t|e|r| @63
+|f|a|k|e| |f|i|n|a|l| @64
+|f|a|k|e| |f|i|n|a|l@1|y| @62
+|f|a|k|e| |f|i|n|d| @65
+|f|a|k|e| |f|i|n|i|s|h| @63
+|f|a|k|e| |f|i|r|s|t| @64
+|f|a|k|e| |f|i|x|d|e|l| @63
+|f|a|k|e| |f|o|l|d| @65
+|f|a|k|e| |f|o|l|d|c|l|o|s|e| @60
+|f|a|k|e| |f|o|l|d@1|o|c|l|o|s|e|d| @57
+|f|a|k|e| |f|o|l|d@1|o@1|p|e|n| @59
+|f|a|k|e| |f|o|l|d|o|p|e|n| @61
+@57|1|8|1|,|1| @8|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_11.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_11.dump
new file mode 100644
index 000000000..dec937c0b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_11.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |f|o|l|d|o|p|e|n| @61
+|f|a|k|e| |f|o|r| @66
+|f|a|k|e| |f|u|n|c|t|i|o|n| @61
+|f|a|k|e| |g|l|o|b|a|l| @63
+|f|a|k|e| |g|o|t|o| @65
+>f|a|k|e| |g|r|e|p| @65
+|f|a|k|e| |g|r|e|p|a|d@1| @62
+|f|a|k|e| |g|u|i| @66
+|f|a|k|e| |g|v|i|m| @65
+|f|a|k|e| |h|a|r|d|c|o|p|y| @61
+|f|a|k|e| |h|e|l|p| @65
+|f|a|k|e| |h|e|l|p|c|l|o|s|e| @60
+|f|a|k|e| |h|e|l|p|f|i|n|d| @61
+|f|a|k|e| |h|e|l|p|g|r|e|p| @61
+|f|a|k|e| |h|e|l|p|t|a|g|s| @61
+|f|a|k|e| |h|i|d|e| @65
+|f|a|k|e| |h|i|g|h|l|i|g|h|t| @60
+|f|a|k|e| |h|i|s|t|o|r|y| @62
+|f|a|k|e| |h|o|r|i|z|o|n|t|a|l| @59
+@57|1|9@1|,|1| @8|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_12.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_12.dump
new file mode 100644
index 000000000..95d072cf5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_12.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |h|o|r|i|z|o|n|t|a|l| @59
+|f|a|k|e| |i|n|s|e|r|t| @63
+|f|a|k|e| |i|a|b@1|r|e|v| @62
+|f|a|k|e| |i|a|b|c|l|e|a|r| @61
+|f|a|k|e| |i|f| @67
+>f|a|k|e| |i|j|u|m|p| @64
+|f|a|k|e| |i|l|i|s|t| @64
+|f|a|k|e| |i|m|a|p| @65
+|f|a|k|e| |i|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |i|m|e|n|u| @64
+|f|a|k|e| |i|m|p|o|r|t| @63
+|f|a|k|e| |i|n|o|r|e|a|b@1|r|e|v| @58
+|f|a|k|e| |i|n|o|r|e|m|a|p| @61
+|f|a|k|e| |i|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |i|n|t|r|o| @64
+|f|a|k|e| |i|s|e|a|r|c|h| @62
+|f|a|k|e| |i|s|p|l|i|t| @63
+|f|a|k|e| |i|u|n|a|b@1|r|e|v| @60
+|f|a|k|e| |i|u|n|m|a|p| @63
+@57|2|1|7|,|1| @8|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_13.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_13.dump
new file mode 100644
index 000000000..e7929c891
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_13.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |i|u|n|m|a|p| @63
+|f|a|k|e| |i|u|n|m|e|n|u| @62
+|f|a|k|e| |j|o|i|n| @65
+|f|a|k|e| |j|u|m|p|s| @64
+|f|a|k|e| |k| @68
+>f|a|k|e| |k|e@1|p|a|l|t| @62
+|f|a|k|e| |k|e@1|p|j|u|m|p|s| @60
+|f|a|k|e| |k|e@1|p|m|a|r|k|s| @60
+|f|a|k|e| |k|e@1|p@1|a|t@1|e|r|n|s| @57
+|f|a|k|e| |l|a|b|o|v|e| @63
+|f|a|k|e| |l|a|d@1|b|u|f@1|e|r| @59
+|f|a|k|e| |l|a|d@1|e|x|p|r| @61
+|f|a|k|e| |l|a|d@1|f|i|l|e| @61
+|f|a|k|e| |l|a|f|t|e|r| @63
+|f|a|k|e| |l|a|n|g|u|a|g|e| @61
+|f|a|k|e| |l|a|s|t| @65
+|f|a|k|e| |l|a|t|e|r| @64
+|f|a|k|e| |l|b|e|f|o|r|e| @62
+|f|a|k|e| |l|b|e|l|o|w| @63
+@57|2|3|5|,|1| @8|3|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_14.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_14.dump
new file mode 100644
index 000000000..bd8df848e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_14.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|b|e|l|o|w| @63
+|f|a|k|e| |l|b|o|t@1|o|m| @62
+|f|a|k|e| |l|b|u|f@1|e|r| @62
+|f|a|k|e| |l|c|d| @66
+|f|a|k|e| |l|c|h|d|i|r| @63
+>f|a|k|e| |l|c|l|o|s|e| @63
+|f|a|k|e| |l|c|s|c|o|p|e| @62
+|f|a|k|e| |l|d|o| @66
+|f|a|k|e| |l|e|f|t| @65
+|f|a|k|e| |l|e|f|t|a|b|o|v|e| @60
+|f|a|k|e| |l|e|g|a|c|y| @63
+|f|a|k|e| |l|e|t| @66
+|f|a|k|e| |l|e|x|p|r| @64
+|f|a|k|e| |l|f|d|o| @65
+|f|a|k|e| |l|f|i|l|e| @64
+|f|a|k|e| |l|f|i|r|s|t| @63
+|f|a|k|e| |l|g|e|t|b|u|f@1|e|r| @59
+|f|a|k|e| |l|g|e|t|e|x|p|r| @61
+|f|a|k|e| |l|g|e|t|f|i|l|e| @61
+@57|2|5|3|,|1| @8|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_15.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_15.dump
new file mode 100644
index 000000000..4c3e50cdb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_15.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|g|e|t|f|i|l|e| @61
+|f|a|k|e| |l|g|r|e|p| @64
+|f|a|k|e| |l|g|r|e|p|a|d@1| @61
+|f|a|k|e| |l|h|e|l|p|g|r|e|p| @60
+|f|a|k|e| |l|h|i|s|t|o|r|y| @61
+>f|a|k|e| |l|i|s|t| @65
+|f|a|k|e| |l@1| @67
+|f|a|k|e| |l@1|a|s|t| @64
+|f|a|k|e| |l@1|i|s|t| @64
+|f|a|k|e| |l|m|a|k|e| @64
+|f|a|k|e| |l|m|a|p| @65
+|f|a|k|e| |l|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |l|n|e|w|e|r| @63
+|f|a|k|e| |l|n|e|x|t| @64
+|f|a|k|e| |l|N|e|x|t| @64
+|f|a|k|e| |l|n|f|i|l|e| @63
+|f|a|k|e| |l|N|f|i|l|e| @63
+|f|a|k|e| |l|n|o|r|e|m|a|p| @61
+|f|a|k|e| |l|o|a|d|k|e|y|m|a|p| @59
+@57|2|7|1|,|1| @8|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_16.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_16.dump
new file mode 100644
index 000000000..67b5e79dc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_16.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |l|o|a|d|k|e|y|m|a|p| @59
+|f|a|k|e| |l|o|a|d|v|i|e|w| @61
+|f|a|k|e| |l|o|c|k|m|a|r|k|s| @60
+|f|a|k|e| |l|o|c|k|v|a|r| @62
+|f|a|k|e| |l|o|l|d|e|r| @63
+>f|a|k|e| |l|o|p|e|n| @64
+|f|a|k|e| |l|p|f|i|l|e| @63
+|f|a|k|e| |l|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |l|r|e|w|i|n|d| @62
+|f|a|k|e| |l|s| @67
+|f|a|k|e| |l|t|a|g| @65
+|f|a|k|e| |l|u|a| @66
+|f|a|k|e| |l|u|a|d|o| @64
+|f|a|k|e| |l|u|a|f|i|l|e| @62
+|f|a|k|e| |l|u|n|m|a|p| @63
+|f|a|k|e| |l|v|i|m|g|r|e|p| @61
+|f|a|k|e| |l|v|i|m|g|r|e|p|a|d@1| @58
+|f|a|k|e| |l|w|i|n|d|o|w| @62
+|f|a|k|e| |m|a|k|e| @65
+@57|2|8|9|,|1| @8|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_17.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_17.dump
new file mode 100644
index 000000000..34978cfb8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_17.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |m|a|k|e| @65
+|f|a|k|e| |m|a|p| @66
+|f|a|k|e| |m|a|p|c|l|e|a|r| @61
+|f|a|k|e| |m|a|r|k| @65
+|f|a|k|e| |m|a|r|k|s| @64
+>f|a|k|e| |m|a|t|c|h| @64
+|f|a|k|e| |m|e|n|u| @65
+|f|a|k|e| |m|e|n|u|t|r|a|n|s|l|a|t|e| @56
+|f|a|k|e| |m|e|s@1|a|g|e|s| @61
+|f|a|k|e| |m|k|e|x|r|c| @63
+|f|a|k|e| |m|k|s|e|s@1|i|o|n| @60
+|f|a|k|e| |m|k|s|p|e|l@1| @62
+|f|a|k|e| |m|k|v|i|e|w| @63
+|f|a|k|e| |m|k|v|i|m|r|c| @62
+|f|a|k|e| |m|o|d|e| @65
+|f|a|k|e| |m|o|v|e| @65
+|f|a|k|e| |m|z|f|i|l|e| @63
+|f|a|k|e| |m|z|s|c|h|e|m|e| @61
+|f|a|k|e| |n|b|c|l|o|s|e| @62
+@57|3|0|7|,|1| @8|5|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_18.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_18.dump
new file mode 100644
index 000000000..6dc9ba5a8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_18.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |n|b|c|l|o|s|e| @62
+|f|a|k|e| |n|b|k|e|y| @64
+|f|a|k|e| |n|b|s|t|a|r|t| @62
+|f|a|k|e| |n|e|w| @66
+|f|a|k|e| |n|e|x|t| @65
+>f|a|k|e| |n|m|a|p| @65
+|f|a|k|e| |n|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |n|m|e|n|u| @64
+|f|a|k|e| |n@1|o|r|e|m|a|p| @61
+|f|a|k|e| |n@1|o|r|e|m|e|n|u| @60
+|f|a|k|e| |n|o|a|u|t|o|c|m|d| @60
+|f|a|k|e| |n|o|h|l|s|e|a|r|c|h| @59
+|f|a|k|e| |n|o|r|e|a|b@1|r|e|v| @59
+|f|a|k|e| |n|o|r|e|m|a|p| @62
+|f|a|k|e| |n|o|r|e|m|e|n|u| @61
+|f|a|k|e| |n|o|r|m|a|l| @63
+|f|a|k|e| |n|o|s|w|a|p|f|i|l|e| @59
+|f|a|k|e| |n|u|m|b|e|r| @63
+|f|a|k|e| |n|u|n|m|a|p| @63
+@57|3|2|5|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_19.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_19.dump
new file mode 100644
index 000000000..16bd3c957
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_19.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |n|u|n|m|a|p| @63
+|f|a|k|e| |n|u|n|m|e|n|u| @62
+|f|a|k|e| |o|l|d|f|i|l|e|s| @61
+|f|a|k|e| |o|m|a|p| @65
+|f|a|k|e| |o|m|a|p|c|l|e|a|r| @60
+>f|a|k|e| |o|m|e|n|u| @64
+|f|a|k|e| |o|n|l|y| @65
+|f|a|k|e| |o|n|o|r|e|m|a|p| @61
+|f|a|k|e| |o|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |o|p|e|n| @65
+|f|a|k|e| |o|p|t|i|o|n|s| @62
+|f|a|k|e| |o|u|n|m|a|p| @63
+|f|a|k|e| |o|u|n|m|e|n|u| @62
+|f|a|k|e| |o|w|n|s|y|n|t|a|x| @60
+|f|a|k|e| |p|a|c|k|a|d@1| @62
+|f|a|k|e| |p|a|c|k|l|o|a|d|a|l@1| @58
+|f|a|k|e| |p|c|l|o|s|e| @63
+|f|a|k|e| |p|e|d|i|t| @64
+|f|a|k|e| |p|e|r|l| @65
+@57|3|4|3|,|1| @8|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_20.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_20.dump
new file mode 100644
index 000000000..7b012d928
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_20.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |p|e|r|l| @65
+|f|a|k|e| |p|e|r|l|d|o| @63
+|f|a|k|e| |p|o|p| @66
+|f|a|k|e| |p|o|p|u|p| @64
+|f|a|k|e| |p@1|o|p| @65
+>f|a|k|e| |p|r|e|s|e|r|v|e| @61
+|f|a|k|e| |p|r|e|v|i|o|u|s| @61
+|f|a|k|e| |p|r|i|n|t| @64
+|f|a|k|e| |p|r|o|f|d|e|l| @62
+|f|a|k|e| |p|r|o|f|i|l|e| @62
+|f|a|k|e| |p|r|o|m|p|t|f|i|n|d| @59
+|f|a|k|e| |p|r|o|m|p|t|r|e|p|l| @59
+|f|a|k|e| |p|s|e|a|r|c|h| @62
+|f|a|k|e| |p|t|a|g| @65
+|f|a|k|e| |p|t|f|i|r|s|t| @62
+|f|a|k|e| |p|t|j|u|m|p| @63
+|f|a|k|e| |p|t|l|a|s|t| @63
+|f|a|k|e| |p|t|n|e|x|t| @63
+|f|a|k|e| |p|t|N|e|x|t| @63
+@57|3|6|1|,|1| @8|5|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_21.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_21.dump
new file mode 100644
index 000000000..420f49380
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_21.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |p|t|N|e|x|t| @63
+|f|a|k|e| |p|t|p|r|e|v|i|o|u|s| @59
+|f|a|k|e| |p|t|r|e|w|i|n|d| @61
+|f|a|k|e| |p|t|s|e|l|e|c|t| @61
+|f|a|k|e| |p|u|t| @66
+>f|a|k|e| |p|w|d| @66
+|f|a|k|e| |p|y|3| @66
+|f|a|k|e| |p|y|3|d|o| @64
+|f|a|k|e| |p|y|3|f|i|l|e| @62
+|f|a|k|e| |p|y|d|o| @65
+|f|a|k|e| |p|y|f|i|l|e| @63
+|f|a|k|e| |p|y|t|h|o|n| @63
+|f|a|k|e| |p|y|t|h|o|n|3| @62
+|f|a|k|e| |p|y|t|h|o|n|x| @62
+|f|a|k|e| |p|y|x| @66
+|f|a|k|e| |p|y|x|d|o| @64
+|f|a|k|e| |p|y|x|f|i|l|e| @62
+|f|a|k|e| |q|a|l@1| @65
+|f|a|k|e| |q|u|i|t| @65
+@57|3|7|9|,|1| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_22.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_22.dump
new file mode 100644
index 000000000..28e7e50c1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_22.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |q|u|i|t| @65
+|f|a|k|e| |q|u|i|t|a|l@1| @62
+|f|a|k|e| |r|e|a|d| @65
+|f|a|k|e| |r|e|c|o|v|e|r| @62
+|f|a|k|e| |r|e|d|i|r| @64
+>f|a|k|e| |r|e|d|o| @65
+|f|a|k|e| |r|e|d|r|a|w| @63
+|f|a|k|e| |r|e|d|r|a|w|s|t|a|t|u|s| @57
+|f|a|k|e| |r|e|d|r|a|w|t|a|b|l|i|n|e| @56
+|f|a|k|e| |r|e|g|i|s|t|e|r|s| @60
+|f|a|k|e| |r|e|s|i|z|e| @63
+|f|a|k|e| |r|e|t|a|b| @64
+|f|a|k|e| |r|e|t|u|r|n| @63
+|f|a|k|e| |r|e|w|i|n|d| @63
+|f|a|k|e| |r|i|g|h|t| @64
+|f|a|k|e| |r|i|g|h|t|b|e|l|o|w| @59
+|f|a|k|e| |r|u|b|y| @65
+|f|a|k|e| |r|u|b|y|d|o| @63
+|f|a|k|e| |r|u|b|y|f|i|l|e| @61
+@57|3|9|7|,|1| @8|6|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_23.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_23.dump
new file mode 100644
index 000000000..36763c762
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_23.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |r|u|b|y|f|i|l|e| @61
+|f|a|k|e| |r|u|n|d|o| @64
+|f|a|k|e| |r|u|n|t|i|m|e| @62
+|f|a|k|e| |r|v|i|m|i|n|f|o| @61
+|f|a|k|e| |s|a|l@1| @65
+>f|a|k|e| |s|a|n|d|b|o|x| @62
+|f|a|k|e| |s|a|r|g|u|m|e|n|t| @60
+|f|a|k|e| |s|a|v|e|a|s| @63
+|f|a|k|e| |s|b|a|l@1| @64
+|f|a|k|e| |s|b|f|i|r|s|t| @62
+|f|a|k|e| |s|b|l|a|s|t| @63
+|f|a|k|e| |s|b|m|o|d|i|f|i|e|d| @59
+|f|a|k|e| |s|b|n|e|x|t| @63
+|f|a|k|e| |s|b|N|e|x|t| @63
+|f|a|k|e| |s|b|p|r|e|v|i|o|u|s| @59
+|f|a|k|e| |s|b|r|e|w|i|n|d| @61
+|f|a|k|e| |s|b|u|f@1|e|r| @62
+|f|a|k|e| |s|c|r|i|p|t|e|n|c|o|d|i|n|g| @55
+|f|a|k|e| |s|c|r|i|p|t|n|a|m|e|s| @58
+@57|4|1|5|,|1| @8|6|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_24.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_24.dump
new file mode 100644
index 000000000..75045d4e9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_24.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|c|r|i|p|t|n|a|m|e|s| @58
+|f|a|k|e| |s|c|r|i|p|t|v|e|r|s|i|o|n| @56
+|f|a|k|e| |s|c|s|c|o|p|e| @62
+|f|a|k|e| |s|e|t| @66
+|f|a|k|e| |s|e|t|f|i|l|e|t|y|p|e| @58
+>f|a|k|e| |s|e|t|g|l|o|b|a|l| @60
+|f|a|k|e| |s|e|t|l|o|c|a|l| @61
+|f|a|k|e| |s|f|i|n|d| @64
+|f|a|k|e| |s|f|i|r|s|t| @63
+|f|a|k|e| |s|h|e|l@1| @64
+|f|a|k|e| |s|i|g|n| @65
+|f|a|k|e| |s|i|l|e|n|t| @63
+|f|a|k|e| |s|i|m|a|l|t| @63
+|f|a|k|e| |s|l|a|s|t| @64
+|f|a|k|e| |s|l|e@1|p| @64
+|f|a|k|e| |s|m|a|g|i|c| @63
+|f|a|k|e| |s|m|a|p| @65
+|f|a|k|e| |s|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |s|m|e|n|u| @64
+@57|4|3@1|,|1| @8|7|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_25.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_25.dump
new file mode 100644
index 000000000..6ec506349
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_25.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|m|e|n|u| @64
+|f|a|k|e| |s|m|i|l|e| @64
+|f|a|k|e| |s|n|e|x|t| @64
+|f|a|k|e| |s|N|e|x|t| @64
+|f|a|k|e| |s|n|o|m|a|g|i|c| @61
+>f|a|k|e| |s|n|o|r|e|m|a|p| @61
+|f|a|k|e| |s|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |s|o|r|t| @65
+|f|a|k|e| |s|o|u|r|c|e| @63
+|f|a|k|e| |s|p|e|l@1|d|u|m|p| @60
+|f|a|k|e| |s|p|e|l@1|g|o@1|d| @60
+|f|a|k|e| |s|p|e|l@1|i|n|f|o| @60
+|f|a|k|e| |s|p|e|l@1|r|a|r|e| @60
+|f|a|k|e| |s|p|e|l@1|r|e|p|a|l@1| @58
+|f|a|k|e| |s|p|e|l@1|u|n|d|o| @60
+|f|a|k|e| |s|p|e|l@1|w|r|o|n|g| @59
+|f|a|k|e| |s|p|l|i|t| @64
+|f|a|k|e| |s|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |s|r|e|w|i|n|d| @62
+@57|4|5|1|,|1| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_26.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_26.dump
new file mode 100644
index 000000000..e95ea1fa8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_26.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|r|e|w|i|n|d| @62
+|f|a|k|e| |s|t|a|g| @65
+|f|a|k|e| |s|t|a|r|t|g|r|e|p|l|a|c|e| @56
+|f|a|k|e| |s|t|a|r|t|i|n|s|e|r|t| @58
+|f|a|k|e| |s|t|a|r|t|r|e|p|l|a|c|e| @57
+>f|a|k|e| |s|t|j|u|m|p| @63
+|f|a|k|e| |s|t|o|p| @65
+|f|a|k|e| |s|t|o|p|i|n|s|e|r|t| @59
+|f|a|k|e| |s|t|s|e|l|e|c|t| @61
+|f|a|k|e| |s|u|b|s|t|i|t|u|t|e| @59
+|f|a|k|e| |s|u|n|h|i|d|e| @62
+|f|a|k|e| |s|u|n|m|a|p| @63
+|f|a|k|e| |s|u|n|m|e|n|u| @62
+|f|a|k|e| |s|u|s|p|e|n|d| @62
+|f|a|k|e| |s|v|i|e|w| @64
+|f|a|k|e| |s|w|a|p|n|a|m|e| @61
+|f|a|k|e| |s|y|n|c|b|i|n|d| @61
+|f|a|k|e| |s|y|n|t|a|x| @63
+|f|a|k|e| |s|y|n|t|i|m|e| @62
+@57|4|6|9|,|1| @8|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_27.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_27.dump
new file mode 100644
index 000000000..d527ca9a9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_27.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |s|y|n|t|i|m|e| @62
+|f|a|k|e| |t| @68
+|f|a|k|e| |t|a|b| @66
+|f|a|k|e| |t|a|b|c|l|o|s|e| @61
+|f|a|k|e| |t|a|b|d|o| @64
+>f|a|k|e| |t|a|b|e|d|i|t| @62
+|f|a|k|e| |t|a|b|f|i|n|d| @62
+|f|a|k|e| |t|a|b|f|i|r|s|t| @61
+|f|a|k|e| |t|a|b|l|a|s|t| @62
+|f|a|k|e| |t|a|b|m|o|v|e| @62
+|f|a|k|e| |t|a|b|n|e|w| @63
+|f|a|k|e| |t|a|b|n|e|x|t| @62
+|f|a|k|e| |t|a|b|N|e|x|t| @62
+|f|a|k|e| |t|a|b|o|n|l|y| @62
+|f|a|k|e| |t|a|b|p|r|e|v|i|o|u|s| @58
+|f|a|k|e| |t|a|b|r|e|w|i|n|d| @60
+|f|a|k|e| |t|a|b|s| @65
+|f|a|k|e| |t|a|g| @66
+|f|a|k|e| |t|a|g|s| @65
+@57|4|8|7|,|1| @8|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_28.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_28.dump
new file mode 100644
index 000000000..c54f76ed9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_28.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |t|a|g|s| @65
+|f|a|k|e| |t|c|d| @66
+|f|a|k|e| |t|c|h|d|i|r| @63
+|f|a|k|e| |t|c|l| @66
+|f|a|k|e| |t|c|l|d|o| @64
+>f|a|k|e| |t|c|l|f|i|l|e| @62
+|f|a|k|e| |t|e|a|r|o|f@1| @62
+|f|a|k|e| |t|e|r|m|i|n|a|l| @61
+|f|a|k|e| |t|f|i|r|s|t| @63
+|f|a|k|e| |t|h|r|o|w| @64
+|f|a|k|e| |t|j|u|m|p| @64
+|f|a|k|e| |t|l|a|s|t| @64
+|f|a|k|e| |t|l|m|e|n|u| @63
+|f|a|k|e| |t|l|n|o|r|e|m|e|n|u| @59
+|f|a|k|e| |t|l|u|n|m|e|n|u| @61
+|f|a|k|e| |t|m|a|p| @65
+|f|a|k|e| |t|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |t|m|e|n|u| @64
+|f|a|k|e| |t|n|e|x|t| @64
+@57|5|0|5|,|1| @8|8|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_29.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_29.dump
new file mode 100644
index 000000000..2d68e4ca2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_29.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |t|n|e|x|t| @64
+|f|a|k|e| |t|N|e|x|t| @64
+|f|a|k|e| |t|n|o|r|e|m|a|p| @61
+|f|a|k|e| |t|o|p|l|e|f|t| @62
+|f|a|k|e| |t|p|r|e|v|i|o|u|s| @60
+>f|a|k|e| |t|r|e|w|i|n|d| @62
+|f|a|k|e| |t|r|y| @66
+|f|a|k|e| |t|s|e|l|e|c|t| @62
+|f|a|k|e| |t|u|n|m|a|p| @63
+|f|a|k|e| |t|u|n|m|e|n|u| @62
+|f|a|k|e| |u|n|a|b@1|r|e|v|i|a|t|e| @57
+|f|a|k|e| |u|n|d|o| @65
+|f|a|k|e| |u|n|d|o|j|o|i|n| @61
+|f|a|k|e| |u|n|d|o|l|i|s|t| @61
+|f|a|k|e| |u|n|h|i|d|e| @63
+|f|a|k|e| |u|n|i|q| @65
+|f|a|k|e| |u|n|l|e|t| @64
+|f|a|k|e| |u|n|l|o|c|k|v|a|r| @60
+|f|a|k|e| |u|n|m|a|p| @64
+@57|5|2|3|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_30.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_30.dump
new file mode 100644
index 000000000..d6d3b19aa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_30.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |u|n|m|a|p| @64
+|f|a|k|e| |u|n|m|e|n|u| @63
+|f|a|k|e| |u|n|s|i|l|e|n|t| @61
+|f|a|k|e| |u|p|d|a|t|e| @63
+|f|a|k|e| |v|e|r|b|o|s|e| @62
+>f|a|k|e| |v|e|r|s|i|o|n| @62
+|f|a|k|e| |v|e|r|t|i|c|a|l| @61
+|f|a|k|e| |v|g|l|o|b|a|l| @62
+|f|a|k|e| |v|i|e|w| @65
+|f|a|k|e| |v|i|m|9|c|m|d| @62
+|f|a|k|e| |v|i|m|g|r|e|p| @62
+|f|a|k|e| |v|i|m|g|r|e|p|a|d@1| @59
+|f|a|k|e| |v|i|s|u|a|l| @63
+|f|a|k|e| |v|i|u|s|a|g|e| @62
+|f|a|k|e| |v|m|a|p| @65
+|f|a|k|e| |v|m|a|p|c|l|e|a|r| @60
+|f|a|k|e| |v|m|e|n|u| @64
+|f|a|k|e| |v|n|e|w| @65
+|f|a|k|e| |v|n|o|r|e|m|a|p| @61
+@57|5|4|1|,|1| @8|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_31.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_31.dump
new file mode 100644
index 000000000..35eecaa44
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_31.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |v|n|o|r|e|m|a|p| @61
+|f|a|k|e| |v|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |v|s|p|l|i|t| @63
+|f|a|k|e| |v|u|n|m|a|p| @63
+|f|a|k|e| |v|u|n|m|e|n|u| @62
+>f|a|k|e| |w|a|l@1| @65
+|f|a|k|e| |w|h|i|l|e| @64
+|f|a|k|e| |w|i|n|c|m|d| @63
+|f|a|k|e| |w|i|n|d|o| @64
+|f|a|k|e| |w|i|n|p|o|s| @63
+|f|a|k|e| |w|i|n|s|i|z|e| @62
+|f|a|k|e| |w|n|e|x|t| @64
+|f|a|k|e| |w|N|e|x|t| @64
+|f|a|k|e| |w|p|r|e|v|i|o|u|s| @60
+|f|a|k|e| |w|q| @67
+|f|a|k|e| |w|q|a|l@1| @64
+|f|a|k|e| |w|r|i|t|e| @64
+|f|a|k|e| |w|u|n|d|o| @64
+|f|a|k|e| |w|v|i|m|i|n|f|o| @61
+@57|5@1|9|,|1| @8|9|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_32.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_32.dump
new file mode 100644
index 000000000..6aca4879e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_32.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |w|v|i|m|i|n|f|o| @61
+|f|a|k|e| |x|a|l@1| @65
+|f|a|k|e| |x|i|t| @66
+|f|a|k|e| |x|m|a|p| @65
+|f|a|k|e| |x|m|a|p|c|l|e|a|r| @60
+>f|a|k|e| |x|m|e|n|u| @64
+|f|a|k|e| |x|n|o|r|e|m|a|p| @61
+|f|a|k|e| |x|n|o|r|e|m|e|n|u| @60
+|f|a|k|e| |x|r|e|s|t|o|r|e| @61
+|f|a|k|e| |x|u|n|m|a|p| @63
+|f|a|k|e| |x|u|n|m|e|n|u| @62
+|f|a|k|e| |y|a|n|k| @65
+|f|a|k|e| |z| @68
+@75
+@75
+|"+0#0000e05&| |V|i|m|9|-|s|c|r|i|p|t| |o|n|l|y| +0#0000000&@56
+@75
+|f|a|k|e| |a|b|s|t|r|a|c|t| @61
+|f|a|k|e| |c|l|a|s@1| @64
+@57|5|7@1|,|1| @8|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_33.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_33.dump
new file mode 100644
index 000000000..ee7120fa7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_33.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |c|l|a|s@1| @64
+|f|a|k|e| |e|n|d|c|l|a|s@1| @61
+|f|a|k|e| |e|n|d|i|n|t|e|r|f|a|c|e| @57
+|f|a|k|e| |e|n|d|e|n|u|m| @62
+|f|a|k|e| |e|n|u|m| @65
+>f|a|k|e| |e|x|p|o|r|t| @63
+|f|a|k|e| |f|i|n|a|l| @64
+|f|a|k|e| |i|n|t|e|r|f|a|c|e| @60
+|f|a|k|e| |p|u|b|l|i|c| @63
+|f|a|k|e| |s|t|a|t|i|c| @63
+|f|a|k|e| |t|y|p|e| @65
+|f|a|k|e| |v|a|r| @66
+@75
+@75
+|"+0#0000e05&| |U|s|e|r| |c|o|m@1|a|n|d|s| +0#0000000&@59
+@75
+|f|a|k|e| |F|o@1|b|a|r| @63
+|f|a|k|e| |F|o@1|b|a|r|!| @62
+|f|a|k|e| |F|o@1|b|a|r|1|2|3| @60
+@57|5|9|5|,|1| @8|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_commands_contained_34.dump b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_34.dump
new file mode 100644
index 000000000..c98e07485
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_commands_contained_34.dump
@@ -0,0 +1,20 @@
+|f+0&#ffffff0|a|k|e| |F|o@1|b|a|r|1|2|3| @60
+|f|a|k|e| |F|o@1|b|a|r|1|2|3|!+0#af5f00255&| +0#0000000&@59
+|f|a|k|e| |F|o@1|1|2|3|b|a|r| @60
+|f|a|k|e| |F|o@1|1|2|3|b|a|r|!| @59
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|6|1|2|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/input/vim9_ex_commands_contained.vim b/runtime/syntax/testdir/input/vim9_ex_commands_contained.vim
new file mode 100644
index 000000000..f730a9012
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_commands_contained.vim
@@ -0,0 +1,611 @@
+vim9script
+# Vim9 Ex command containment
+
+
+fake &
+fake ~
+fake @
+# :*
+fake >
+fake <
+fake #
+fake =
+fake !
+
+fake Next
+fake X
+
+fake abbreviate
+fake abclear
+fake aboveleft
+fake abstract
+fake all
+fake amenu
+fake anoremenu
+fake argadd
+fake argdedupe
+fake argdelete
+fake argdo
+fake argedit
+fake argglobal
+fake arglocal
+fake args
+fake argument
+fake ascii
+fake augroup Foo
+fake augroup END
+fake aunmenu
+fake autocmd
+fake badd
+fake ball
+fake balt
+fake bdelete
+fake behave mswin
+fake behave xterm
+fake belowright
+fake bfirst
+fake blast
+fake bmodified
+fake bnext
+fake bNext
+fake botright
+fake bprevious
+fake break
+fake breakadd
+fake breakdel
+fake breaklist
+fake brewind
+fake browse
+fake bufdo
+fake buffer
+fake buffers
+fake bunload
+fake bwipeout
+fake cabbrev
+fake cabclear
+fake cabove
+fake caddbuffer
+fake caddexpr
+fake caddfile
+fake cafter
+fake call
+fake catch
+fake cbefore
+fake cbelow
+fake cbottom
+fake cbuffer
+fake cc
+fake cclose
+fake cd
+fake cdo
+fake center
+fake cexpr
+fake cfdo
+fake cfile
+fake cfirst
+fake cgetbuffer
+fake cgetexpr
+fake cgetfile
+fake changes
+fake chdir
+fake checkpath
+fake checktime
+fake chistory
+fake class
+fake clast
+fake clearjumps
+fake clist
+fake close
+fake cmap
+fake cmapclear
+fake cmenu
+fake cnewer
+fake cnext
+fake cNext
+fake cnfile
+fake cNfile
+fake cnoreabbrev
+fake cnoremap
+fake cnoremenu
+fake colder
+fake colorscheme
+fake comclear
+fake command
+fake compiler
+fake confirm
+fake const
+fake continue
+fake copen
+fake copy
+fake cpfile
+fake cprevious
+fake cquit
+fake crewind
+fake cscope
+fake cstag
+fake cunabbrev
+fake cunmap
+fake cunmenu
+fake cwindow
+fake debug
+fake debuggreedy
+fake def
+fake defcompile
+fake defer
+fake delcommand
+fake delete
+fake delfunction
+fake delmarks
+fake diffget
+fake diffoff
+fake diffpatch
+fake diffput
+fake diffsplit
+fake diffthis
+fake diffupdate
+fake digraphs
+fake disassemble
+fake display
+fake djump
+fake dlist
+fake doautoall
+fake doautocmd
+fake drop
+fake dsearch
+fake dsplit
+fake earlier
+fake echo
+fake echoconsole
+fake echoerr
+fake echohl
+fake echomsg
+fake echon
+fake echowindow
+fake edit
+fake else
+fake elseif
+fake emenu
+fake endclass
+fake enddef
+fake endenum
+fake endfor
+fake endfunction
+fake endif
+fake endinterface
+fake endtry
+fake endwhile
+fake enew
+fake enum
+fake eval
+fake ex
+fake execute
+fake exit
+fake export
+fake exusage
+fake file
+fake files
+fake filetype
+fake filter
+fake final
+fake finally
+fake find
+fake finish
+fake first
+fake fixdel
+fake fold
+fake foldclose
+fake folddoclosed
+fake folddoopen
+fake foldopen
+fake for
+fake function
+fake global
+fake goto
+fake grep
+fake grepadd
+fake gui
+fake gvim
+fake hardcopy
+fake help
+fake helpclose
+fake helpfind
+fake helpgrep
+fake helptags
+fake hide
+fake highlight
+fake history
+fake horizontal
+fake iabbrev
+fake iabclear
+fake if
+fake ijump
+fake ilist
+fake imap
+fake imapclear
+fake imenu
+fake import
+fake inoreabbrev
+fake inoremap
+fake inoremenu
+fake interface
+fake intro
+fake isearch
+fake isplit
+fake iunabbrev
+fake iunmap
+fake iunmenu
+fake join
+fake jumps
+fake keepalt
+fake keepjumps
+fake keepmarks
+fake keeppatterns
+fake labove
+fake laddbuffer
+fake laddexpr
+fake laddfile
+fake lafter
+fake language
+fake last
+fake later
+fake lbefore
+fake lbelow
+fake lbottom
+fake lbuffer
+fake lcd
+fake lchdir
+fake lclose
+fake lcscope
+fake ldo
+fake left
+fake leftabove
+fake legacy
+fake lexpr
+fake lfdo
+fake lfile
+fake lfirst
+fake lgetbuffer
+fake lgetexpr
+fake lgetfile
+fake lgrep
+fake lgrepadd
+fake lhelpgrep
+fake lhistory
+fake list
+fake ll
+fake llast
+fake llist
+fake lmake
+fake lmap
+fake lmapclear
+fake lnewer
+fake lnext
+fake lNext
+fake lnfile
+fake lNfile
+fake lnoremap
+fake loadkeymap
+fake loadview
+fake lockmarks
+fake lockvar
+fake lolder
+fake lopen
+fake lpfile
+fake lprevious
+fake lrewind
+fake ls
+fake ltag
+fake lua
+fake luado
+fake luafile
+fake lunmap
+fake lvimgrep
+fake lvimgrepadd
+fake lwindow
+fake make
+fake map
+fake mapclear
+fake mark
+fake marks
+fake match
+fake menu
+fake menutranslate
+fake messages
+fake mkexrc
+fake mksession
+fake mkspell
+fake mkview
+fake mkvimrc
+fake move
+fake mzfile
+fake mzscheme
+fake nbclose
+fake nbkey
+fake nbstart
+fake new
+fake next
+fake nmap
+fake nmapclear
+fake nmenu
+fake nnoremap
+fake nnoremenu
+fake noautocmd
+fake nohlsearch
+fake noreabbrev
+fake noremap
+fake noremenu
+fake normal
+fake noswapfile
+fake number
+fake nunmap
+fake nunmenu
+fake oldfiles
+fake omap
+fake omapclear
+fake omenu
+fake only
+fake onoremap
+fake onoremenu
+fake options
+fake ounmap
+fake ounmenu
+fake ownsyntax
+fake packadd
+fake packloadall
+fake pclose
+fake pedit
+fake perl
+fake perldo
+fake pop
+fake popup
+fake ppop
+fake preserve
+fake previous
+fake print
+fake profdel
+fake profile
+fake promptfind
+fake promptrepl
+fake psearch
+fake ptag
+fake ptfirst
+fake ptjump
+fake ptlast
+fake ptnext
+fake ptNext
+fake ptprevious
+fake ptrewind
+fake ptselect
+fake put
+fake pwd
+fake py3
+fake py3do
+fake py3file
+fake pydo
+fake pyfile
+fake python
+fake python3
+fake pythonx
+fake pyx
+fake pyxdo
+fake pyxfile
+fake qall
+fake quit
+fake quitall
+fake read
+fake recover
+fake redir
+fake redo
+fake redraw
+fake redrawstatus
+fake redrawtabline
+fake registers
+fake resize
+fake retab
+fake return
+fake rewind
+fake right
+fake rightbelow
+fake ruby
+fake rubydo
+fake rubyfile
+fake rundo
+fake runtime
+fake rviminfo
+fake sall
+fake sandbox
+fake sargument
+fake saveas
+fake sball
+fake sbfirst
+fake sblast
+fake sbmodified
+fake sbnext
+fake sbNext
+fake sbprevious
+fake sbrewind
+fake sbuffer
+fake scriptencoding
+fake scriptnames
+fake scriptversion
+fake scscope
+fake set
+fake setfiletype
+fake setglobal
+fake setlocal
+fake sfind
+fake sfirst
+fake shell
+fake sign
+fake silent
+fake simalt
+fake slast
+fake sleep
+fake smagic
+fake smap
+fake smapclear
+fake smenu
+fake smile
+fake snext
+fake sNext
+fake snomagic
+fake snoremap
+fake snoremenu
+fake sort
+fake source
+fake spelldump
+fake spellgood
+fake spellinfo
+fake spellrare
+fake spellrepall
+fake spellundo
+fake spellwrong
+fake split
+fake sprevious
+fake srewind
+fake stag
+fake startgreplace
+fake startinsert
+fake startreplace
+fake stjump
+fake stop
+fake stopinsert
+fake stselect
+fake substitute
+fake sunhide
+fake sunmap
+fake sunmenu
+fake suspend
+fake sview
+fake swapname
+fake syncbind
+fake syntax
+fake syntime
+fake tab
+fake tabclose
+fake tabdo
+fake tabedit
+fake tabfind
+fake tabfirst
+fake tablast
+fake tabmove
+fake tabnew
+fake tabnext
+fake tabNext
+fake tabonly
+fake tabprevious
+fake tabrewind
+fake tabs
+fake tag
+fake tags
+fake tcd
+fake tchdir
+fake tcl
+fake tcldo
+fake tclfile
+fake tearoff
+fake terminal
+fake tfirst
+fake throw
+fake tjump
+fake tlast
+fake tlmenu
+fake tlnoremenu
+fake tlunmenu
+fake tmap
+fake tmapclear
+fake tmenu
+fake tnext
+fake tNext
+fake tnoremap
+fake topleft
+fake tprevious
+fake trewind
+fake try
+fake tselect
+fake tunmap
+fake tunmenu
+fake type
+fake unabbreviate
+fake undo
+fake undojoin
+fake undolist
+fake unhide
+fake uniq
+fake unlet
+fake unlockvar
+fake unmap
+fake unmenu
+fake unsilent
+fake update
+fake var
+fake verbose
+fake version
+fake vertical
+fake vglobal
+fake view
+fake vim9cmd
+# :vim9script
+fake vimgrep
+fake vimgrepadd
+fake visual
+fake viusage
+fake vmap
+fake vmapclear
+fake vmenu
+fake vnew
+fake vnoremap
+fake vnoremenu
+fake vsplit
+fake vunmap
+fake vunmenu
+fake wall
+fake while
+fake wincmd
+fake windo
+fake winpos
+fake winsize
+fake wnext
+fake wNext
+fake wprevious
+fake wq
+fake wqall
+fake write
+fake wundo
+fake wviminfo
+fake xall
+fake xmap
+fake xmapclear
+fake xmenu
+fake xnoremap
+fake xnoremenu
+fake xrestore
+fake xunmap
+fake xunmenu
+fake yank
+fake z
+
+
+# Legacy-script only
+
+fake Print
+fake append
+fake change
+fake insert
+fake k
+fake let
+fake mode
+fake open
+fake t
+fake xit
+
+
+# User commands
+
+fake Foobar
+fake Foobar!
+fake Foobar123
+fake Foobar123!
+fake Foo123bar
+fake Foo123bar!
+
diff --git a/runtime/syntax/testdir/input/vim_ex_commands_contained.vim b/runtime/syntax/testdir/input/vim_ex_commands_contained.vim
new file mode 100644
index 000000000..eb33a44d7
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_commands_contained.vim
@@ -0,0 +1,612 @@
+# Ex command containment
+
+
+fake &
+fake ~
+fake @
+" :*
+fake >
+fake <
+fake #
+fake =
+fake !
+
+fake Next
+fake Print
+fake X
+
+fake append
+fake abbreviate
+fake abclear
+fake aboveleft
+fake all
+fake amenu
+fake anoremenu
+fake argadd
+fake argdedupe
+fake argdelete
+fake argdo
+fake argedit
+fake argglobal
+fake arglocal
+fake args
+fake argument
+fake ascii
+fake augroup Foo
+fake augroup END
+fake aunmenu
+fake autocmd
+fake badd
+fake ball
+fake balt
+fake bdelete
+fake behave mswin
+fake behave xterm
+fake belowright
+fake bfirst
+fake blast
+fake bmodified
+fake bnext
+fake bNext
+fake botright
+fake bprevious
+fake break
+fake breakadd
+fake breakdel
+fake breaklist
+fake brewind
+fake browse
+fake bufdo
+fake buffer
+fake buffers
+fake bunload
+fake bwipeout
+fake change
+fake cabbrev
+fake cabclear
+fake cabove
+fake caddbuffer
+fake caddexpr
+fake caddfile
+fake cafter
+fake call
+fake catch
+fake cbefore
+fake cbelow
+fake cbottom
+fake cbuffer
+fake cc
+fake cclose
+fake cd
+fake cdo
+fake center
+fake cexpr
+fake cfdo
+fake cfile
+fake cfirst
+fake cgetbuffer
+fake cgetexpr
+fake cgetfile
+fake changes
+fake chdir
+fake checkpath
+fake checktime
+fake chistory
+fake clast
+fake clearjumps
+fake clist
+fake close
+fake cmap
+fake cmapclear
+fake cmenu
+fake cnewer
+fake cnext
+fake cNext
+fake cnfile
+fake cNfile
+fake cnoreabbrev
+fake cnoremap
+fake cnoremenu
+fake colder
+fake colorscheme
+fake comclear
+fake command
+fake compiler
+fake confirm
+fake const
+fake continue
+fake copen
+fake copy
+fake cpfile
+fake cprevious
+fake cquit
+fake crewind
+fake cscope
+fake cstag
+fake cunabbrev
+fake cunmap
+fake cunmenu
+fake cwindow
+fake debug
+fake debuggreedy
+fake def
+fake defcompile
+fake defer
+fake delcommand
+fake delete
+fake delfunction
+fake delmarks
+fake diffget
+fake diffoff
+fake diffpatch
+fake diffput
+fake diffsplit
+fake diffthis
+fake diffupdate
+fake digraphs
+fake disassemble
+fake display
+fake djump
+fake dlist
+fake doautoall
+fake doautocmd
+fake drop
+fake dsearch
+fake dsplit
+fake earlier
+fake echo
+fake echoconsole
+fake echoerr
+fake echohl
+fake echomsg
+fake echon
+fake echowindow
+fake edit
+fake else
+fake elseif
+fake emenu
+fake enddef
+fake endfor
+fake endfunction
+fake endif
+fake endtry
+fake endwhile
+fake enew
+fake eval
+fake ex
+fake execute
+fake exit
+fake exusage
+fake file
+fake files
+fake filetype
+fake filter
+fake final
+fake finally
+fake find
+fake finish
+fake first
+fake fixdel
+fake fold
+fake foldclose
+fake folddoclosed
+fake folddoopen
+fake foldopen
+fake for
+fake function
+fake global
+fake goto
+fake grep
+fake grepadd
+fake gui
+fake gvim
+fake hardcopy
+fake help
+fake helpclose
+fake helpfind
+fake helpgrep
+fake helptags
+fake hide
+fake highlight
+fake history
+fake horizontal
+fake insert
+fake iabbrev
+fake iabclear
+fake if
+fake ijump
+fake ilist
+fake imap
+fake imapclear
+fake imenu
+fake import
+fake inoreabbrev
+fake inoremap
+fake inoremenu
+fake intro
+fake isearch
+fake isplit
+fake iunabbrev
+fake iunmap
+fake iunmenu
+fake join
+fake jumps
+fake k
+fake keepalt
+fake keepjumps
+fake keepmarks
+fake keeppatterns
+fake labove
+fake laddbuffer
+fake laddexpr
+fake laddfile
+fake lafter
+fake language
+fake last
+fake later
+fake lbefore
+fake lbelow
+fake lbottom
+fake lbuffer
+fake lcd
+fake lchdir
+fake lclose
+fake lcscope
+fake ldo
+fake left
+fake leftabove
+fake legacy
+fake let
+fake lexpr
+fake lfdo
+fake lfile
+fake lfirst
+fake lgetbuffer
+fake lgetexpr
+fake lgetfile
+fake lgrep
+fake lgrepadd
+fake lhelpgrep
+fake lhistory
+fake list
+fake ll
+fake llast
+fake llist
+fake lmake
+fake lmap
+fake lmapclear
+fake lnewer
+fake lnext
+fake lNext
+fake lnfile
+fake lNfile
+fake lnoremap
+fake loadkeymap
+fake loadview
+fake lockmarks
+fake lockvar
+fake lolder
+fake lopen
+fake lpfile
+fake lprevious
+fake lrewind
+fake ls
+fake ltag
+fake lua
+fake luado
+fake luafile
+fake lunmap
+fake lvimgrep
+fake lvimgrepadd
+fake lwindow
+fake make
+fake map
+fake mapclear
+fake mark
+fake marks
+fake match
+fake menu
+fake menutranslate
+fake messages
+fake mkexrc
+fake mksession
+fake mkspell
+fake mkview
+fake mkvimrc
+fake mode
+fake move
+fake mzfile
+fake mzscheme
+fake nbclose
+fake nbkey
+fake nbstart
+fake new
+fake next
+fake nmap
+fake nmapclear
+fake nmenu
+fake nnoremap
+fake nnoremenu
+fake noautocmd
+fake nohlsearch
+fake noreabbrev
+fake noremap
+fake noremenu
+fake normal
+fake noswapfile
+fake number
+fake nunmap
+fake nunmenu
+fake oldfiles
+fake omap
+fake omapclear
+fake omenu
+fake only
+fake onoremap
+fake onoremenu
+fake open
+fake options
+fake ounmap
+fake ounmenu
+fake ownsyntax
+fake packadd
+fake packloadall
+fake pclose
+fake pedit
+fake perl
+fake perldo
+fake pop
+fake popup
+fake ppop
+fake preserve
+fake previous
+fake print
+fake profdel
+fake profile
+fake promptfind
+fake promptrepl
+fake psearch
+fake ptag
+fake ptfirst
+fake ptjump
+fake ptlast
+fake ptnext
+fake ptNext
+fake ptprevious
+fake ptrewind
+fake ptselect
+fake put
+fake pwd
+fake py3
+fake py3do
+fake py3file
+fake pydo
+fake pyfile
+fake python
+fake python3
+fake pythonx
+fake pyx
+fake pyxdo
+fake pyxfile
+fake qall
+fake quit
+fake quitall
+fake read
+fake recover
+fake redir
+fake redo
+fake redraw
+fake redrawstatus
+fake redrawtabline
+fake registers
+fake resize
+fake retab
+fake return
+fake rewind
+fake right
+fake rightbelow
+fake ruby
+fake rubydo
+fake rubyfile
+fake rundo
+fake runtime
+fake rviminfo
+fake sall
+fake sandbox
+fake sargument
+fake saveas
+fake sball
+fake sbfirst
+fake sblast
+fake sbmodified
+fake sbnext
+fake sbNext
+fake sbprevious
+fake sbrewind
+fake sbuffer
+fake scriptencoding
+fake scriptnames
+fake scriptversion
+fake scscope
+fake set
+fake setfiletype
+fake setglobal
+fake setlocal
+fake sfind
+fake sfirst
+fake shell
+fake sign
+fake silent
+fake simalt
+fake slast
+fake sleep
+fake smagic
+fake smap
+fake smapclear
+fake smenu
+fake smile
+fake snext
+fake sNext
+fake snomagic
+fake snoremap
+fake snoremenu
+fake sort
+fake source
+fake spelldump
+fake spellgood
+fake spellinfo
+fake spellrare
+fake spellrepall
+fake spellundo
+fake spellwrong
+fake split
+fake sprevious
+fake srewind
+fake stag
+fake startgreplace
+fake startinsert
+fake startreplace
+fake stjump
+fake stop
+fake stopinsert
+fake stselect
+fake substitute
+fake sunhide
+fake sunmap
+fake sunmenu
+fake suspend
+fake sview
+fake swapname
+fake syncbind
+fake syntax
+fake syntime
+fake t
+fake tab
+fake tabclose
+fake tabdo
+fake tabedit
+fake tabfind
+fake tabfirst
+fake tablast
+fake tabmove
+fake tabnew
+fake tabnext
+fake tabNext
+fake tabonly
+fake tabprevious
+fake tabrewind
+fake tabs
+fake tag
+fake tags
+fake tcd
+fake tchdir
+fake tcl
+fake tcldo
+fake tclfile
+fake tearoff
+fake terminal
+fake tfirst
+fake throw
+fake tjump
+fake tlast
+fake tlmenu
+fake tlnoremenu
+fake tlunmenu
+fake tmap
+fake tmapclear
+fake tmenu
+fake tnext
+fake tNext
+fake tnoremap
+fake topleft
+fake tprevious
+fake trewind
+fake try
+fake tselect
+fake tunmap
+fake tunmenu
+fake unabbreviate
+fake undo
+fake undojoin
+fake undolist
+fake unhide
+fake uniq
+fake unlet
+fake unlockvar
+fake unmap
+fake unmenu
+fake unsilent
+fake update
+fake verbose
+fake version
+fake vertical
+fake vglobal
+fake view
+fake vim9cmd
+fake vimgrep
+fake vimgrepadd
+fake visual
+fake viusage
+fake vmap
+fake vmapclear
+fake vmenu
+fake vnew
+fake vnoremap
+fake vnoremenu
+fake vsplit
+fake vunmap
+fake vunmenu
+fake wall
+fake while
+fake wincmd
+fake windo
+fake winpos
+fake winsize
+fake wnext
+fake wNext
+fake wprevious
+fake wq
+fake wqall
+fake write
+fake wundo
+fake wviminfo
+fake xall
+fake xit
+fake xmap
+fake xmapclear
+fake xmenu
+fake xnoremap
+fake xnoremenu
+fake xrestore
+fake xunmap
+fake xunmenu
+fake yank
+fake z
+
+
+" Vim9-script only
+
+fake abstract
+fake class
+fake endclass
+fake endinterface
+fake endenum
+fake enum
+fake export
+fake final
+fake interface
+fake public
+fake static
+fake type
+fake var
+
+
+" User commands
+
+fake Foobar
+fake Foobar!
+fake Foobar123
+fake Foobar123!
+fake Foo123bar
+fake Foo123bar!
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index b64564938..34dec2772 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 Aug 02
+" Last Change: 2026 Aug 10
" Former Maintainer: Charles E. Campbell

" DO NOT CHANGE DIRECTLY.
@@ -569,7 +569,7 @@ syn match vimAugroupBang contained " \@1<=!" skipwhite nextgroup=vimAugroupName
syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAugroupName,vimAugroupEnd

" remove
-syn match vimAugroup "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang
+syn match vimAugroup contained "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang

" list
VimL syn match vimAugroup contained "\<aug\%[roup]\>\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey
@@ -632,22 +632,22 @@ syn keyword vimBehaveModel contained mswin xterm
" ================================
syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction
syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename
-syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList

-syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep
-syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
+syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep

syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr

-syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
-syn match vimBreakpointFilename contained "\<\%(\*\| \)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
+syn match vimBreakpointFilename contained "\<\%(\*\| \)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction
syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename

syn keyword vimBreakadd contained breaka[dd] skipwhite nextgroup=@vimBreakpointArg
syn keyword vimBreakdel contained breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob
-syn keyword vimBreaklist contained breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep
+syn keyword vimBreaklist contained breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep

" :buffer {{{3
" =======
@@ -858,7 +858,8 @@ syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,
" :export {{{3
" =======
if s:vim9script
- syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vimDef,vimDefFold,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
+ syn keyword vim9Export export contained
+ \ skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vimDef,vimDefFold,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
endif

" :filetype {{{3
@@ -1082,12 +1083,12 @@ syn keyword vimImport contained imp[ort] skipwhite nextgroup=vimImportAutoload,

" :language {{{3
" =========
-syn keyword vimLanguage contained lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment
+syn keyword vimLanguage contained lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimCmdSep,vimComment,vim9Comment
syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName

" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX"
-syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment
-syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment
+syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimCmdSep,vimComment,vim9Comment
+syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimCmdSep,vimComment,vim9Comment
syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved

" :loadkeymap {{{3
@@ -1887,14 +1888,14 @@ syn keyword vimEndfunction contained endf[unction] skipwhite nextgroup=vimCmdSep
syn keyword vimEnddef contained enddef skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError

if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
- syn region vimFunctionFold
+ syn region vimFunctionFold contained
\ start="\<fu\%[nction]!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*("
\ end="^\s*:\=\s*endf\%[unction]\>"
\ contains=vimFunction
\ extend fold keepend transparent
- syn region vimDefFold
+ syn region vimDefFold contained
\ start="\<def!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+[<(]"
@@ -2025,7 +2026,7 @@ if s:vim9script
syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
- syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
+ syn keyword vim9Abstract contained abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
@@ -2036,7 +2037,12 @@ if s:vim9script
" super must be followed by '.'
syn match vim9Super contained "\.\@1<!\<super\.\@="

- VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
+ VimFoldc syn region vim9ClassBody contained
+ \ start="\<class\>"
+ \ matchgroup=vimCommand
+ \ end="\<endclass\>"
+ \ contains=@vim9ClassBodyList
+ \ transparent

" Enums {{{3
syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,@vimExprList,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Var
@@ -2089,7 +2095,12 @@ if s:vim9script
\ skipwhite skipempty nextgroup=vim9EnumImplementedInterfaceComment,vim9EnumValue
\ contains=@vimCommentGroup,vimCommentString

- VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
+ VimFolde syn region vim9EnumBody contained
+ \ start="\<enum\>"
+ \ matchgroup=vimCommand
+ \ end="\<endenum\>"
+ \ contains=@vim9EnumBodyList
+ \ transparent

" Interfaces {{{3
" TODO: limit to decl only - no init values
@@ -2116,10 +2127,15 @@ if s:vim9script
\ nextgroup=vim9AbstractDefParams
\ contains=vim9DefTypeParam

- VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
+ VimFoldi syn region vim9InterfaceBody contained
+ \ start="\<interface\>"
+ \ matchgroup=vimCommand
+ \ end="\<endinterface\>"
+ \ contains=@vim9InterfaceBodyList
+ \ transparent

" Type Aliases {{{3
- syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
+ syn keyword vim9Type contained ty[pe] skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
@@ -2388,25 +2404,23 @@ syn match vimBracket contained "[\<>]"
syn case match

" User Command Highlighting: {{{2
-" syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
-" syn match vimUsrCmd contained '\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!' nextgroup=vimBang
syn match vimUsrCmd contained '\%#=1\<\u[[:alnum:]]*\%([![:space:]]\|$\)\@=' nextgroup=vimBang

" Vim user commands

" Compiler plugins
-syn match vimCompilerSet "\<CompilerSet\>" skipwhite nextgroup=vimSetArgs
+syn keyword vimCompilerSet contained CompilerSet skipwhite nextgroup=vimSetArgs

" runtime/makemenu.vim
-syn match vimSynMenu "\<SynMenu\>" skipwhite nextgroup=vimSynMenuPath
+syn keyword vimSynMenu contained SynMenu skipwhite nextgroup=vimSynMenuPath
syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation
syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName
syn match vimSynMenuName contained "\w\+"

" runtime/syntax/syncolor.vim
-syn match vimSynColor "\<SynColor\>" skipwhite nextgroup=vimSynColorGroup
+syn keyword vimSynColor contained SynColor skipwhite nextgroup=vimSynColorGroup
syn match vimSynColorGroup contained "\<\h\w*\>" skipwhite nextgroup=vimHiKeyList contains=vimGroup
-syn match vimSynLink "\<SynLink\>" skipwhite nextgroup=vimSynLinkGroup
+syn keyword vimSynLink contained SynLink skipwhite nextgroup=vimSynLinkGroup
syn match vimSynLinkGroup contained "\<\h\w*\>" skipwhite nextgroup=vimGroup contains=vimGroup

syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynColor,vimSynLink,vimSynMenu
Reply all
Reply to author
Forward
0 new messages