runtime(vim): Update base-syntax, improve :autocmd highlighting

- Match full :autocmd, :doautocmd and :doautoall commands.
- Add filename pattern (wildcard) highlighting.

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim
index d2bfc5c..e016dea 100644
--- a/runtime/syntax/generator/gen_syntax_vim.vim
+++ b/runtime/syntax/generator/gen_syntax_vim.vim
@@ -1,7 +1,7 @@
 " Vim syntax file generator
 " Language: Vim script
 " Maintainer: Hirohito Higashi (h_east)
-" Last Change: 2025 Apr 10
+" Last Change: 2025 Apr 23
 
 let s:keepcpo= &cpo
 set cpo&vim
@@ -257,7 +257,6 @@
 		abstract
 		append
 		augroup
-		augroup
 		autocmd
 		behave
 		call
@@ -402,6 +401,10 @@
 			call add(a:li, copy(item))
 		endfor
 
+		" "User" requires a user defined argument event.
+		" (Separately specified in vim.vim.base).
+		call filter(a:li, {idx, val -> val.name !=# 'User'})
+
 		quit!
 
 		if empty(a:li)
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index 2dab307..21fcf37 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 <dougkearns@gmail.com>
-" Last Change:	   2025 Apr 10
+" Last Change:	   2025 Apr 23
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -78,7 +78,10 @@
 
 " AutoCmd Events {{{2
 syn case ignore
-" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
+" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR='skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern'
+
+syn keyword	vimAutoEvent	contained	User	skipwhite nextgroup=vimUserAutoEvent
+syn match	vimUserAutoEvent	contained	"\<\h\w*\>"	skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
 
 " Highlight commonly used Groupnames {{{2
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@@ -230,7 +233,7 @@
 syn case match
 
 " All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList	contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
+syn cluster vimCmdList	contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
 syn cluster vim9CmdList	contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
 syn match vimCmdSep	"\\\@1<!|"	skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
 syn match vimCmdSep	":\+"	skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -319,21 +322,32 @@
 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
 syn cluster vimAugroupList	contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
-syn match   vimAugroup	"\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
-if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
-  syn region  vimAugroup  fold	start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
-else
-  syn region  vimAugroup	start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
-endif
+
+" define
+VimFolda syn region vimAugroup
+      \ start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+"
+      \ matchgroup=vimAugroupKey
+      \ end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>"
+      \ skipwhite nextgroup=vimAugroupEnd
+      \ contains=vimAutocmd,@vimAugroupList,vimAugroupkey
 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
-  syn match   vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
+  syn match	vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
 endif
 
-syn match   vimAutoCmdGroup	contained "\S\+"
-syn match   vimAugroupEnd	contained "\c\<END\>"
-syn match   vimAugroupBang	contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
-syn keyword vimAugroupKey	contained aug[roup]  skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
+" TODO: Vim9 comment
+syn match	vimAugroupName	contained	"\%(\\["|[:space:]]\|[^"|[:space:]]\)\+"
+syn match	vimAugroupEnd	contained	"\c\<END\>"
+syn match	vimAugroupBang	contained	"\a\@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 
+
+" list
+VimL syn match	vimAugroup	"\<aug\%[roup]\>\ze\s*\%(["|]\|$\)"	skipwhite nextgroup=vimCmdSep,vimComment  contains=vimAugroupKey
+Vim9 syn match 	vimAugroup	"\<aug\%[roup]\>\ze\s*\%([#|]\|$\)"	skipwhite nextgroup=vimCmdSep,vim9Comment contains=vimAugroupKey
+
+" hi def link vimAugroupEnd Special
 " Operators: {{{2
 " =========
 syn cluster	vimOperGroup	contains=@vimContinue,@vimExprList,vim9Comment
@@ -888,16 +902,83 @@
 " GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
 " GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
 
-" Autocmd: {{{2
-" =======
-syn match	vimAutoCmdBang	contained	"\a\@1<=!"	skipwhite nextgroup=vimAutoEventList
-syn match	vimAutoEventList	contained	"\%(\a\+,\)*\a\+"	contains=vimAutoEvent nextgroup=vimAutoCmdSpace
-syn match	vimAutoCmdSpace	contained	"\s\+"	nextgroup=vimAutoCmdSfxList
-syn match	vimAutoCmdSfxList	contained	"\S*"	skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
-syn keyword	vimAutoCmd	au[tocmd]		skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
-syn keyword	vimAutoCmd	do[autocmd] doautoa[ll]	skipwhite nextgroup=vimAutoEventList
-syn match	vimAutoCmdMod	"\(++\)\=\(once\|nested\)"	skipwhite nextgroup=vimAutoCmdBlock
-syn region	vimAutoCmdBlock	contained	matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+" Filename Patterns: {{{2
+" =================
+
+syn match	vimWildcardQuestion	contained	"?"
+syn match	vimWildcardStar		contained	"*"
+
+syn match	vimWildcardBraceComma	contained	","
+syn region	vimWildcardBrace		contained
+      \ matchgroup=vimWildcard
+      \ start="{"
+      \ end="}"
+      \ contains=vimWildcardEscape,vimWildcardBrace,vimWildcardBraceComma,vimWildcardQuestion,vimWildcardStar,vimWildcardBracket
+      \ oneline
+
+syn match	vimWildcardIntervalNumber	contained	"\d\+"
+syn match	vimWildcardInterval	contained	"\\\\\\{\d\+\%(,\d\+\)\=\\}" contains=vimWildcardIntervalNumber
+
+
+syn match	vimWildcardBracket	contained	"\[\%(\^\=]\=\%(\\.\|\[\([:.=]\)[^:.=]\+\1]\|[^][:space:]]\)*\)\@>]"
+      \ contains=vimWildcardBracketStart,vimWildcardEscape
+
+syn match	vimWildcardBracketCharacter	contained	"."	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
+syn match	vimWildcardBracketRightBracket	contained	"]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketHyphen	contained	"-]\@!"	nextgroup=@vimWildcardBracketCharacter
+syn match	vimWildcardBracketEscape	contained	"\\."	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
+syn match	vimWildcardBracketCharacterClass	contained	"\[:[^:]\+:]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketEquivalenceClass	contained	"\[=[^=]\+=]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketCollatingSymbol	contained	"\[\.[^.]\+\.]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+
+syn match	vimWildcardBracketStart	contained	"\["	nextgroup=vimWildcardBracketCaret,vimWildcardBracketRightBracket,@vimWildcardBracketCharacter
+syn match	vimWildcardBracketCaret	contained	"\^"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketRightBracket 
+syn match	vimWildcardBracketEnd	contained	"]"
+
+syn cluster	vimWildcardBracketCharacter	contains=vimWildcardBracketCharacter,vimWildcardBracketEscape,vimWildcardBracketCharacterClass,vimWildcardBracketEquivalenceClass,vimWildcardBracketCollatingSymbol
+
+syn match	vimWildcardEscape	contained	"\\."
+
+syn cluster	vimWildcard		contains=vimWildcardQuestion,vimWildcardStar,vimWildcardBrace,vimWildcardBracket,vimWildcardInterval
+
+" Autocmd and Doauto{cmd,all}: {{{2
+" ===========================
+
+" TODO: explicitly match the {cmd} arg rather than bailing out to TOP
+syn region	vimAutocmdBlock	contained	matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
+syn match	vimAutocmdGroup	contained	"\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" skipwhite nextgroup=vimAutoEvent,vimAutoEventGlob
+syn match	vimAutocmdBang	contained	"\a\@1<=!"		     skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
+
+" TODO: cleaner handling of | in pattern position
+"     : match pattern items in addition to wildcards
+syn region	vimAutocmdPattern	contained
+      \ start="|\@!\S"
+      \ skip="\\\\\|\\[,[:space:]]"
+      \ end="\ze[,[:space:]]"
+      \ end="$"
+      \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+      \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape
+syn match	vimAutocmdBufferPattern	contained	"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+" trailing pattern separator comma allowed
+syn match	vimAutocmdPatternSep	contained	","	                skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock
+syn match	vimAutocmdPatternEscape	contained	"\\."
+syn cluster	vimAutocmdPattern		contains=vimAutocmdPattern,vimAutocmdBufferPattern
+
+" TODO: Vim9 requires '++' prefix
+syn match	vimAutocmdMod	contained	"\%(++\)\=\<nested\>" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock
+syn match	vimAutocmdMod	contained	"++once\>"	skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock
+
+" higher priority than vimAutocmdGroup, assume no group is so named
+syn match	vimAutoEventGlob	contained	"*"	skipwhite nextgroup=@vimAutocmdPattern
+syn match	vimAutoEventSep	contained	"\a\@1<=,"	nextgroup=vimAutoEvent
+
+syn match	vimAutocmd		"\<au\%[tocmd]\>"	skipwhite nextgroup=vimAutocmdBang,vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
+
+
+syn match	vimDoautocmdMod	contained	"<nomodeline>"		skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent
+syn match	vimDoautocmd		"\<do\%[autocmd]\>"	skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
+syn match	vimDoautocmd		"\<doautoa\%[ll]\>"	skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
 
 " Echo And Execute: -- prefer strings! {{{2
 " ================
@@ -1648,10 +1729,14 @@
  hi def link vimAugroupBang	vimBang
  hi def link vimAugroupError	vimError
  hi def link vimAugroupKey	vimCommand
- hi def link vimAutoCmd	vimCommand
- hi def link vimAutoCmdBang	vimBang
+ hi def link vimAutocmd	vimCommand
+ hi def link vimAutocmdBang	vimBang
+ hi def link vimAutocmdPatternEscape	Special
  hi def link vimAutoEvent	Type
- hi def link vimAutoCmdMod	Special
+ hi def link vimAutoEventGlob	Type
+ hi def link vimAutocmdBufferPattern	Special
+ hi def link vimAutocmdMod	Special
+ hi def link vimAutocmdPatternSep	vimSep
  hi def link vimBang	vimOper
  hi def link vimBehaveBang	vimBang
  hi def link vimBehaveModel	vimBehave
@@ -1677,6 +1762,8 @@
  hi def link vimDefParam	vimVar
  hi def link vimDelcommand	vimCommand
  hi def link vimDelcommandAttr	vimUserCmdAttr
+ hi def link vimDoautocmd	vimCommand
+ hi def link vimDoautocmdMod	Special
  hi def link vimEcho	vimCommand
  hi def link vimEchohlNone	vimGroup
  hi def link vimEchohl	vimCommand
@@ -1892,6 +1979,24 @@
  hi def link vimVimVar	Identifier
  hi def link vimVimVarName	Identifier
  hi def link vimWarn	WarningMsg
+ hi def link vimWildcard	Special
+ hi def link vimWildcardBraceComma	vimWildcard
+ hi def link vimWildcardBracket	vimWildcard
+ hi def link vimWildcardBracketCaret	vimWildcard
+ hi def link vimWildcardBracketCharacter	Normal
+ hi def link vimWildcardBracketCharacter	Normal
+ hi def link vimWildcardBracketCharacterClass	vimWildCard
+ hi def link vimWildcardBracketCollatingSymbol	vimWildCard
+ hi def link vimWildcardBracketEnd		vimWildcard
+ hi def link vimWildcardBracketEquivalenceClass	vimWildCard
+ hi def link vimWildcardBracketEscape	vimWildcard
+ hi def link vimWildcardBracketHyphen	vimWildcard
+ hi def link vimWildcardBracketRightBracket	vimWildcardBracketCharacter
+ hi def link vimWildcardBracketStart	vimWildcard
+ hi def link vimWildcardEscape	vimWildcard
+ hi def link vimWildcardInterval	vimWildcard
+ hi def link vimWildcardQuestion	vimWildcard
+ hi def link vimWildcardStar	vimWildcard
 
  hi def link vim9Abstract	vimCommand
  hi def link vim9Boolean	Boolean
diff --git a/runtime/syntax/testdir/dumps/vim9_comment_01.dump b/runtime/syntax/testdir/dumps/vim9_comment_01.dump
index dbd59d5..30d3ccf 100644
--- a/runtime/syntax/testdir/dumps/vim9_comment_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_comment_01.dump
@@ -9,7 +9,7 @@
 @2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
 @2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
 |}+0#e000e06&| +0#0000000&@73
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
index 1fd26e6..18f7648 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_comment_strings_01.dump
@@ -4,7 +4,7 @@
 | +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 > @74
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
index bde4dbc..118fcaf 100644
--- a/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim9_ex_no_comment_strings_01.dump
@@ -4,7 +4,7 @@
 | +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 > @74
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim9_lambda_09.dump b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
index f8b7988..b0d3e9d 100644
--- a/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
+++ b/runtime/syntax/testdir/dumps/vim9_lambda_09.dump
@@ -2,7 +2,7 @@
 |#+0#0000e05&| |I|s@1|u|e| |#|1|6|9|6|5| |(|v|i|m| |s|y|n|t|a|x|:| |w|r|o|n|g| |h|i|g|h|l|i|g|h|t| |w|i|t|h| |l|a|m|b|d|a|,| |a|u|t|o|l|o|a|d|,| |a|n|d| |f|a|l|s
 |e| |k|e|y|w|o|r|d|)| +0#0000000&@64
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|f+0#00e0e07&|#|a|(+0#e000e06&|f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#e000e06&@1| +0#0000000&@16
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|t+0#00e0e07&|i|m|e|r|_|s|t|a|r|t|(+0#e000e06&|0+0#e000002&|,+0#0000000&| |(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|f+0#00e0e07&|#|a|(+0#e000e06&|f+0#e000002&|a|l|s|e|,+0#0000000&| |f+0#e000002&|a|l|s|e|)+0#e000e06&@1| +0#0000000&@16
 >a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@67
 @75
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim_comment_01.dump b/runtime/syntax/testdir/dumps/vim_comment_01.dump
index 6b1234d..1bb6e7b 100644
--- a/runtime/syntax/testdir/dumps/vim_comment_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_comment_01.dump
@@ -6,7 +6,7 @@
 @2>"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |V|i|m|9|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@51
 @2|"+0#e000002&|u|s|e|l|e|s@1| |s|t|r|i|n|g|"| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46
 |}+0#e000e06&| +0#0000000&@73
diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump
index 0424482..4ac5e2f 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump
@@ -1,20 +1,20 @@
->"+0#0000e05#ffffff0| |V|i|m| |:|a|u|g|r|o|u|p| |c|o|m@1|a|n|d| +0#0000000&@52
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|f|o@1| @63
-@2|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@41
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @63
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|f|o@1| ||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @38
-|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|f|o@1| @62
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| @54
-@2|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*| |e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@41
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @63
-@75
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| ||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @29
-|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|!|@|#|$|%|^|&|*|(|)|_|+| @53
-@75
-|"+0#0000e05&| |l|i|s|t| |g|r|o|u|p|s| +0#0000000&@61
-|a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&@67
-@75
-@57|1|,|1| @10|A|l@1| 
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|a|u|g|r|o|u|p| |c|o|m@1|a|n|d| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |"+0#e000002&|a|"| +0#0000000&@29
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l| |f|d|c|=|2| |f|d|l|=|9@2| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@26
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k| |v|i|m|A|u|g|r|o|u|p|N|a|m|e| |T|o|d|o| +0#0000000&@21
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@61
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42
+||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D| @61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @35
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@52
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@39
+||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D| @61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @26
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump
new file mode 100644
index 0000000..c5b2c37
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@52
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o|m|s|g| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@39
+||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D| @61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @26
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @26
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|n+0#0000001#ffff4012|o|\|||e|c|h|o| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @30
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|n+0#0000001#ffff4012|o|\|||e|c|h|o| +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|n+0#0000001#ffff4012|o|\|"|e|c|h|o| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @30
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|n+0#0000001#ffff4012|o|\|"|e|c|h|o| +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|\+0#0000001#ffff4012|||e|c|h|o|\||| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @30
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|||e|c|h|o|\||| +0#0000000#ffffff0@55
+@57|1|9|,|1| @9|3|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump
new file mode 100644
index 0000000..b85e79d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|||e|c|h|o|\||| +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|\+0#0000001#ffff4012|"|e|c|h|o|\|"| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @30
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|"|e|c|h|o|\|"| +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|\+0#0000001#ffff4012|||\|"| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @34
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|||\|"| +0#0000000#ffffff0@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|\+0#0000001#ffff4012|"|\||| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @34
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|"|\||| +0#0000000#ffffff0@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| +0#0000e05&|r|e|q|u|i|r|e|d| |c|o|m@1|e|n|t| |p|r|e|f|i|x| +0#0000000&@40
+|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1|"+0#0000000#ffffff0|c|o|m@1|e|n|t| @3|"+0#0000e05&| |s|t|a|r|t| |b|a|d| |f|o|l|d| +0#0000000&@32
+||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49
+||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D| @12|"+0#0000e05&| |t|e|r|m|i|n|a|t|e| |b|a|d| |f|o|l|d| +0#0000000&@28
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1|"+0#0000000#ffffff0|c|o|m@1|e|n|t| @52
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|3|7|,|1| @9|8|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump
new file mode 100644
index 0000000..8f296fa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |l|i|s|t| |g|r|o|u|p|s| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@65
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|0|-|1| @7|B|o|t| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_00.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_00.dump
new file mode 100644
index 0000000..13dbfc6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|a|u|t|o|c|m|d| |c|o|m@1|a|n|d| +0#0000000&@52
+|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |v|i|m|A|u|t|o|C|m|d|G|r|o|u|p| |T|o|d|o| +0#0000000&@27
+|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |v|i|m|U|s|e|r|A|u|t|o|E|v|e|n|t| |T|i|t|l|e| +0#0000000&@25
+@75
+@75
+|"+0#0000e05&| |D|e|f|i|n|e| +0#0000000&@66
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@9
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@9
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@9
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@9
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_01.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_01.dump
new file mode 100644
index 0000000..1f54e27
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_01.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+>a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o
+| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@68
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o
+| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@68
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o
+| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@68
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o
+| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@68
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|@+0#4040ff13&@2
+| +0#0000000&@56|1|9|,|1| @10|5|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_02.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_02.dump
new file mode 100644
index 0000000..fa775dc
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_02.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|=|4|2|>| +0#0000000&@2|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|=|a|b|u|f|>| +0#0000000&|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+>a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|=|4|2|>| +0#0000000&@2|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|<+0#e000e06&|b|u|f@1|e|r|=|a|b|u|f|>| +0#0000000&|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|=|4|2|>| +0#0000000&@2|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|=|a|b|u|f|>| +0#0000000&|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|@+0#4040ff13&@2
+| +0#0000000&@56|3|1|,|1| @9|1|0|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_03.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_03.dump
new file mode 100644
index 0000000..4966993
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_03.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|<+0#e000e06&|b|u|f@1|e|r|>| +0#0000000&@5|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|<+0#e000e06&|b|u|f@1|e|r|=|4|2|>| +0#0000000&@2|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @5|<+0#e000e06&|b|u|f@1|e|r|=|a|b|u|f|>| +0#0000000&|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+> @74
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@11|f|<|b|u|f@1|e|r|>|o@1| @2|++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1
+|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@60
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |{+0#e000e06&| +0#0000000&@51
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62
+|}+0#e000e06&| +0#0000000&@73
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |{+0#e000e06&| +0#0000000&@40
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62
+|}+0#e000e06&| +0#0000000&@73
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| |{+0#e000e06&| +0#0000000&@45
+@57|4|0|,|0|-|1| @7|1|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_04.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_04.dump
new file mode 100644
index 0000000..50bcd38
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_04.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| |{+0#e000e06&| +0#0000000&@45
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62
+|}+0#e000e06&| +0#0000000&@73
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |{+0#e000e06&| +0#0000000&@42
+@2>e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@62
+|}+0#e000e06&| +0#0000000&@73
+@75
+@75
+|"+0#0000e05&| |M|u|l|t|i|l|i|n|e| |{|c|m|d|}| |a|r|g| +0#0000000&@53
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42
+@6|\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@55
+@6|\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@55
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @40
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&||| @54
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@56
+@57|5|6|,|3| @9|2|0|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_05.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_05.dump
new file mode 100644
index 0000000..7cf99da
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@56
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @53
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6>"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@55
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d|,+0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @42
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@55
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @47
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@57|7|4|,|7| @9|2|7|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_06.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_06.dump
new file mode 100644
index 0000000..366d71c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6>\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@55
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @44
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@55
+@75
+@75
+|"+0#0000e05&| |M|u|l|t|i|p|l|e| |p|a|t@1|e|r|n|s| +0#0000000&@55
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t|,+0#e000e06&|*|.+0#0000000&|v|i|m|,+0#e000e06&|*|.+0#0000000&|c| @5|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@14
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>|,|*|.+0#0000000&|v|i|m|,+0#e000e06&|*|.+0#0000000&|c| @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@14
+@57|9|2|,|7| @9|3|5|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_07.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_07.dump
new file mode 100644
index 0000000..34546f1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_07.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|>|,|*|.+0#0000000&|v|i|m|,+0#e000e06&|*|.+0#0000000&|c| @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@14
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t|,+0#e000e06&|<|b|u|f@1|e|r|>|,|*|.+0#0000000&|c| @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@14
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t|,+0#e000e06&|*|.+0#0000000&|v|i|m|,+0#e000e06&|<|b|u|f@1|e|r|>| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@14
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|<+0#e000e06&|b|u|f@1|e|r|=|1|>|,|<|b|u|f@1|e|r|=|2|>|,|<|b|u|f@1|e|r|=|3|>| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@2
+> @74
+@75
+|"+0#0000e05&| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| +0#0000e05&|"|B|u|f|R|e|a|d|"| |a|n|d| |"+0#e000002&|*|"| +0#0000e05&|a|r|e| |v|a|l|i|d| |g|r|o|u|p| |n|a|m|e|s|,| |h|o|w|e|v|e|r|,| |:|h|e|l|p| |:|a|u|g|r|o|u|p| +0#0000000&@1
+|"+0#0000e05&| |e|x|p|l|i|c|i|t|l|y| |d|i|r|e|c|t|s| |t|h|e| |u|s|e|r| |N|O|T| |t|o| |s|h|a|d|o|w| |e|v|e|n|t| |n|a|m|e|s| |w|i|t|h| |g|r|o|u|p| |n|a|m|e|s| +0#0000000&@2
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|B|u|f|R|e|a|d| |*+0#af5f00255&|.|t+0#0000000&|x|t| |++0#af5f00255&@1|o+0#0000000&|n|c|e| |++0#af5f00255&@1|n+0#0000000&|e|s|t|e|d| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@18
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|*+0#00e0003&| +0#0000000&@6|B|u|f|R|e|a|d| |*+0#af5f00255&|.|t+0#0000000&|x|t| |++0#af5f00255&@1|o+0#0000000&|n|c|e| |++0#af5f00255&@1|n+0#0000000&|e|s|t|e|d| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@18
+@75
+@75
+|"+0#0000e05&| |R|e|m|o|v|e| +0#0000000&@66
+@75
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a
+|r|"| +0#0000000&@72
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a
+|r|"| +0#0000000&@72
+@57|1@1|0|,|0|-|1| @6|4|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_08.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_08.dump
new file mode 100644
index 0000000..f4bad3a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_08.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d|!| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a
+|r|"| +0#0000000&@72
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a
+|r|"| +0#0000000&@72
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| |++0#e000e06&@1|o|n|c|e| +0#0000000&|++0#e000e06&@1|n|e|s|t|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a
+|r|"| +0#0000000&@72
+> @74
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| @37
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| @37
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @37
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @37
+@75
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |*+0#00e0003&| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @49
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|*+0#00e0003&| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @49
+@75
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@49
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@49
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @43
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @43
+@57|1|2|4|,|0|-|1| @6|4|8|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_09.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_09.dump
new file mode 100644
index 0000000..a2c6395
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_09.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u|t|o|c|m|d|!| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @43
+@75
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|g|r|o|u|p| @57
+|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@66
+@75
+>"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |b|a|n|g| |-|>| |g|r|o|u|p| |"+0#e000002&|!|f|o@1|g|r|o|u|p|!|"| +0#0000000&@35
+|a+0#af5f00255&|u|t|o|c|m|d|!|!+0#0000000&|f|o@1|g|r|o|u|p|!| @56
+|"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |b|a|n|g| |-|>| |g|r|o|u|p| |"+0#e000002&|f|o@1|g|r|o|u|p|"| +0#0000000&@37
+|a+0#af5f00255&|u|t|o|c|m|d|!|f+0#0000000&|o@1|g|r|o|u|p| @58
+|"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |b|a|n|g| |-|>| |e|v|e|n|t| +0#0000000&@48
+|a+0#af5f00255&|u|t|o|c|m|d|!|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@59
+|"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |b|a|n|g| |-|>| |u|s|e|r| |e|v|e|n|t| +0#0000000&@43
+|a+0#af5f00255&|u|t|o|c|m|d|!|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @53
+@75
+|"+0#0000e05&| +0#0000000&|F+0#0000001#ffff4012|I|X|M|E|:+0#e000e06#ffffff0| +0#0000e05&|"|*|"| |a|n|d| |"+0#e000002&|B|u|f|R|e|a|d|"| +0#0000e05&|a|r|e| |v|a|l|i|d| |g|r|o|u|p| |n|a|m|e|s|,| |h|o|w|e|v|e|r|,| |:|h|e|l|p| |:|a|u|g|r|o|u|p| +0#0000000&@1
+|"+0#0000e05&| |e|x|p|l|i|c|i|t|l|y| |d|i|r|e|c|t|s| |t|h|e| |u|s|e|r| |N|O|T| |t|o| |s|h|a|d|o|w| |e|v|e|n|t| |n|a|m|e|s| +0#0000000&@19
+|"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |g|r|o|u|p| |"+0#e000002&|*|"| +0#0000e05&|-|>| |e|v|e|n|t| |g|l|o|b| |-|>| |p|a|t@1|e|r|n| +0#0000000&@27
+|a+0#af5f00255&|u|t|o|c|m|d|!|*+0#00e0003&| +0#0000000&|*+0#e000e06&| +0#0000000&|*+0#af5f00255&|.|t+0#0000000&|x|t| @57
+|"+0#0000e05&| |c|o|m@1|a|n|d| |-|>| |g|r|o|u|p| |"+0#e000002&|B|u|f|R|e|a|d|"| +0#0000e05&|-|>| |e|v|e|n|t| |"+0#e000002&|B|u|f|R|e|a|d|"| +0#0000e05&|-|>| |p|a|t@1|e|r|n| +0#0000000&@16
+@57|1|4|1|,|1| @8|5@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_10.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_10.dump
new file mode 100644
index 0000000..9179f30
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_10.dump
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |c|o|m@1|a|n|d| |-|>| |g|r|o|u|p| |"+0#e000002&|B|u|f|R|e|a|d|"| +0#0000e05&|-|>| |e|v|e|n|t| |"+0#e000002&|B|u|f|R|e|a|d|"| +0#0000e05&|-|>| |p|a|t@1|e|r|n| +0#0000000&@16
+|a+0#af5f00255&|u|t|o|c|m|d|!|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|B|u|f|R|e|a|d| |*+0#af5f00255&|.|t+0#0000000&|x|t| @45
+@75
+@75
+|"+0#0000e05&| |L|i|s|t| +0#0000000&@68
+> @74
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| @38
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@6|*+0#e000e06&|.+0#0000000&|t|x|t| @38
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @38
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @38
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |*+0#00e0003&| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @50
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|*+0#00e0003&| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @50
+@75
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@50
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@50
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @44
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@9|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @44
+@75
+@57|1|5|9|,|0|-|1| @6|6|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_11.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_11.dump
new file mode 100644
index 0000000..73ce740
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_11.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| @58
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&@67
+@75
+@75
+>"+0#0000e05&| |:|d|o|a|u|t|o|a|l@1| +0#0000000&@62
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@57
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @51
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@48
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@44
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @29
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @51
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @45
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @42
+@57|1|7@1|,|1| @8|6|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_12.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_12.dump
new file mode 100644
index 0000000..aac1eea
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_12.dump
@@ -0,0 +1,20 @@
+|d+0#af5f00255#ffffff0|o|a|u|t|o|a|l@1| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @42
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @38
+@75
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @23
+@75
+>d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@16
+|d+0#af5f00255&|o|a|u|t|o|a|l@1| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@19
+@75
+@75
+|"+0#0000e05&| |:|d|o|a|u|t|o|c|m|d| +0#0000000&@62
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@57
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @51
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@48
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&@44
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @29
+@75
+@57|1|9|5|,|1| @8|7@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_13.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_13.dump
new file mode 100644
index 0000000..52ccbca
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_13.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @51
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @45
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @42
+>d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| @38
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |U+0#00e0003&|s|e|r| +0#0000000&|F|o@1|E|v|e|n|t| |*+0#e000e06&|.+0#0000000&|t|x|t| @23
+@75
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@16
+|d+0#af5f00255&|o|a|u|t|o|c|m|d| +0#0000000&|<+0#e000e06&|n|o|m|o|d|e|l|i|n|e|>| +0#0000000&|f|o@1|g|r|o|u|p| |B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| ||| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@17
+@75
+@75
+|"+0#0000e05&| |p|a|t@1|e|r|n|s| +0#0000000&@64
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t| @56
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|*+0#e000e06&| +0#0000000&@58
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|?+0#e000e06&@2| +0#0000000&@56
+@57|2|1|3|,|1| @8|8|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_14.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_14.dump
new file mode 100644
index 0000000..3d126cf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_14.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|?+0#e000e06&@2| +0#0000000&@56
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|t+0#0000000&|]+0#e000e06&|[|x+0#0000000&|]+0#e000e06&|t+0#0000000&| @52
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|a+0#0000000&|-+0#e000e06&|z+0#0000000&|]+0#e000e06&|[|a+0#0000000&|-+0#e000e06&|z+0#0000000&|]+0#e000e06&|t+0#0000000&| @48
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&@1|:|a|l|p|h|a|:|]|[|:|a|l|p|h|a|:|]@1|t+0#0000000&| @38
+> @74
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|t+0#0000000&|x|]+0#e000e06&|\@2|{|2+0#0000000&|\+0#e000e06&|}|t+0#0000000&| @47
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|a+0#0000000&|-+0#e000e06&|z+0#0000000&|]+0#e000e06&|\@2|{|2+0#0000000&|\+0#e000e06&|}|t+0#0000000&| @46
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&@1|:|a|l|p|h|a|:|]@1|\@2|{|2+0#0000000&|\+0#e000e06&|}|t+0#0000000&| @40
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|[|:|p|u|n|c|t|:|]@1|\@2|{|2+0#0000000&|\+0#e000e06&|}|t+0#0000000&| @39
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|]+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @54
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|]+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @53
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|t+0#0000000&|\+0#e000e06&|]@1|x+0#0000000&|t| @52
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|t+0#0000000&|\+0#e000e06&|]@1|x+0#0000000&|t| @51
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|[+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @54
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|[+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @53
+@57|2|3|1|,|0|-|1| @6|9|1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_15.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_15.dump
new file mode 100644
index 0000000..b76c20b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_15.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|[+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @53
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|-+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @54
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|-+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @53
+@75
+>a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|-+0#0000000&|t|-|]+0#e000e06&|x+0#0000000&|t| @52
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|-+0#0000000&|t|-|]+0#e000e06&|x+0#0000000&|t| @51
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|\|^|]|x+0#0000000&|t| @53
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[+0#e000e06&|^|^+0#0000000&|]+0#e000e06&|x+0#0000000&|t| @53
+@75
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|t|x|t|,+0#e000e06&|*|/+0#0000000&|*+0#e000e06&|.+0#0000000&|v|i|m| @48
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|{+0#e000e06&|t+0#0000000&|x|t|,+0#e000e06&|v+0#0000000&|i|m|}+0#e000e06&| +0#0000000&@50
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|{+0#e000e06&|t+0#0000000&|{+0#e000e06&|x+0#0000000&|,+0#e000e06&|t+0#0000000&|}+0#e000e06&|,|v+0#0000000&|{+0#e000e06&|i+0#0000000&|,+0#e000e06&|m+0#0000000&|}+0#e000e06&@1| +0#0000000&@44
+@75
+|"+0#0000e05&| |l|i|t|e|r|a|l| +0#0000000&@65
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[|]|x|t| @55
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[|\+0#e000e06&|]|x+0#0000000&|t| @54
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[|^|]|x|t| @54
+@57|2|4|9|,|1| @8|9@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_autocmd_16.dump b/runtime/syntax/testdir/dumps/vim_ex_autocmd_16.dump
new file mode 100644
index 0000000..932e103
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_autocmd_16.dump
@@ -0,0 +1,20 @@
+|a+0#af5f00255#ffffff0|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[|^|]|x|t| @54
+|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&|/+0#0000000&|*+0#e000e06&|.+0#0000000&|[|^|\+0#e000e06&|]|x+0#0000000&|t| @53
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|6|4|,|0|-|1| @6|B|o|t| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_00.dump b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_00.dump
index 9500d07..2cdc33c 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_00.dump
@@ -15,6 +15,6 @@
 | +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 @57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump
index 2dc2425..6f6d7cf 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_comment_strings_01.dump
@@ -2,7 +2,7 @@
 | +0#0000e05&@1|#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1>#| |p|r|e| |"+0#e000002&|s|t|r|i|n|g|"| +0#0000e05&|p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_00.dump b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_00.dump
index 245eab6..1a679d8 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_00.dump
@@ -15,6 +15,6 @@
 | +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 @57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump
index 5bf3cf1..5b21c0e 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_no_comment_strings_01.dump
@@ -2,7 +2,7 @@
 | +0#0000e05&@1|#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 @75
-|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*| |{+0#e000e06&| +0#0000000&@52
+|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|N|e|w|F|i|l|e| +0#0000000&|*+0#e000e06&| +0#0000000&|{+0#e000e06&| +0#0000000&@52
 | +0#0000e05&@1>#| |p|r|e| |"|s|t|r|i|n|g|"| |p|o|s|t| +0#0000000&@53
 |}+0#e000e06&| +0#0000000&@73
 |~+0#4040ff13&| @73
diff --git a/runtime/syntax/testdir/input/vim_ex_augroup.vim b/runtime/syntax/testdir/input/vim_ex_augroup.vim
index 2dae59d..aa13d97 100644
--- a/runtime/syntax/testdir/input/vim_ex_augroup.vim
+++ b/runtime/syntax/testdir/input/vim_ex_augroup.vim
@@ -1,19 +1,55 @@
 " Vim :augroup command
+" VIM_TEST_SETUP let g:vimsyn_folding = "a"
+" VIM_TEST_SETUP setl fdc=2 fdl=999 fdm=syntax
+" VIM_TEST_SETUP highlight link vimAugroupName Todo
+
 
 augroup foo
-  autocmd BufRead * echomsg "Foo"
+  autocmd!
+  autocmd BufRead * echo "Foo"
 augroup END
 
-augroup foo | autocmd! | augroup END
+augroup  foo | autocmd! | augroup END
 augroup! foo
 
 augroup !@#$%^&*()_+
   autocmd BufRead * echomsg "Foo"
 augroup END
 
-augroup !@#$%^&*()_+ | autocmd! | augroup END
+augroup  !@#$%^&*()_+ | autocmd! | augroup END
 augroup! !@#$%^&*()_+
 
+augroup  !@#$%^&*()_+ | autocmd! | augroup END
+augroup! !@#$%^&*()_+
+
+augroup  no\|echo | autocmd! | augroup END
+augroup! no\|echo
+
+augroup  no\"echo | autocmd! | augroup END
+augroup! no\"echo
+
+augroup  \|echo\| | autocmd! | augroup END
+augroup! \|echo\|
+
+augroup  \"echo\" | autocmd! | augroup END
+augroup! \"echo\"
+
+augroup  \|\" | autocmd! | augroup END
+augroup! \|\"
+
+augroup  \"\| | autocmd! | augroup END
+augroup! \"\|
+
+" FIXME: required comment prefix
+augroup  foo"comment    " start bad fold
+augroup  foo|echo "Foo"
+augroup END             " terminate bad fold
+augroup! foo"comment
+augroup! foo|echo "Foo"
+
+
 " list groups
 augroup
+augroup | echo "Foo"
+augroup " comment
 
diff --git a/runtime/syntax/testdir/input/vim_ex_autocmd.vim b/runtime/syntax/testdir/input/vim_ex_autocmd.vim
new file mode 100644
index 0000000..162f933
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_autocmd.vim
@@ -0,0 +1,264 @@
+" Vim :autocmd command
+" VIM_TEST_SETUP highlight vimAutoCmdGroup Todo
+" VIM_TEST_SETUP highlight vimUserAutoEvent Title
+
+
+" Define
+
+autocmd foogroup BufRead            *.txt echo "Foo" | echo "Bar"
+autocmd          BufRead            *.txt echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile *.txt echo "Foo" | echo "Bar"
+autocmd          User FooEvent      *.txt echo "Foo" | echo "Bar"
+
+autocmd foogroup BufRead            *.txt ++once echo "Foo" | echo "Bar"
+autocmd          BufRead            *.txt ++once echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile *.txt ++once echo "Foo" | echo "Bar"
+autocmd          User FooEvent      *.txt ++once echo "Foo" | echo "Bar"
+
+autocmd foogroup BufRead            *.txt ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead            *.txt ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile *.txt ++nested echo "Foo" | echo "Bar"
+autocmd          User FooEvent      *.txt ++nested echo "Foo" | echo "Bar"
+
+autocmd foogroup BufRead            *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead            *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd          User FooEvent      *.txt ++once ++nested echo "Foo" | echo "Bar"
+
+autocmd foogroup BufRead            <buffer>      ++once ++nested echo "Foo" | echo "Bar"
+autocmd foogroup BufRead            <buffer=42>   ++once ++nested echo "Foo" | echo "Bar"
+autocmd foogroup BufRead            <buffer=abuf> ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead            <buffer>      ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead            <buffer=42>   ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead            <buffer=abuf> ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile <buffer>      ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile <buffer=42>   ++once ++nested echo "Foo" | echo "Bar"
+autocmd          BufRead,BufNewFile <buffer=abuf> ++once ++nested echo "Foo" | echo "Bar"
+autocmd          User FooEvent      <buffer>      ++once ++nested echo "Foo" | echo "Bar"
+autocmd          User FooEvent      <buffer=42>   ++once ++nested echo "Foo" | echo "Bar"
+autocmd          User FooEvent      <buffer=abuf> ++once ++nested echo "Foo" | echo "Bar"
+
+autocmd foogroup BufRead            f<buffer>oo   ++once ++nested echo "Foo" | echo "Bar"
+
+autocmd BufRead *.txt {
+  echo "Foo"
+  echo "Bar"
+}
+autocmd BufRead,BufNewFile *.txt {
+  echo "Foo"
+  echo "Bar"
+}
+autocmd User FooEvent *.txt {
+  echo "Foo"
+  echo "Bar"
+}
+autocmd foogroup BufRead *.txt {
+  echo "Foo"
+  echo "Bar"
+}
+
+
+" Multiline {cmd} arg
+
+autocmd BufRead *.txt echo "Foo"
+      \| echo "Bar"
+      \| echo "Baz"
+
+autocmd BufRead *.txt echo "Foo" |
+      \ echo "Bar" |
+      \ echo "Baz"
+
+autocmd BufRead *.txt
+      "\ comment
+      \ echo "Foo" |
+      "\ comment
+      \ echo "Bar"
+      "\ comment
+      \| echo "Baz"
+
+autocmd BufRead,BufNewFile *.txt
+      "\ comment
+      \ echo "Foo" |
+      "\ comment
+      \ echo "Bar"
+      "\ comment
+      \| echo "Baz"
+autocmd User FooEvent *.txt
+      "\ comment
+      \ echo "Foo" |
+      "\ comment
+      \ echo "Bar"
+      "\ comment
+      \| echo "Baz"
+autocmd foogroup BufRead *.txt
+      "\ comment
+      \ echo "Foo" |
+      "\ comment
+      \ echo "Bar"
+      "\ comment
+      \| echo "Baz"
+
+
+" Multiple patterns
+
+autocmd BufRead *.txt,*.vim,*.c      echo "Foo" | echo "Bar"
+autocmd BufRead <buffer>,*.vim,*.c   echo "Foo" | echo "Bar"
+autocmd BufRead *.txt,<buffer>,*.c   echo "Foo" | echo "Bar"
+autocmd BufRead *.txt,*.vim,<buffer> echo "Foo" | echo "Bar"
+
+autocmd BufRead <buffer=1>,<buffer=2>,<buffer=3> echo "Foo" | echo "Bar"
+
+
+" FIXME: "BufRead" and "*" are valid group names, however, :help :augroup
+" explicitly directs the user NOT to shadow event names with group names
+autocmd BufRead BufRead *.txt ++once ++nested echo "Foo"
+autocmd *       BufRead *.txt ++once ++nested echo "Foo"
+
+
+" Remove
+
+autocmd! foogroup BufRead       *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd!          BufRead       *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd! foogroup User FooEvent *.txt ++once ++nested echo "Foo" | echo "Bar"
+autocmd!          User FooEvent *.txt ++once ++nested echo "Foo" | echo "Bar"
+
+autocmd! foogroup BufRead       *.txt
+autocmd!          BufRead       *.txt
+autocmd! foogroup User FooEvent *.txt
+autocmd!          User FooEvent *.txt
+
+autocmd! foogroup * *.txt
+autocmd!          * *.txt
+
+autocmd! foogroup BufRead
+autocmd!          BufRead
+autocmd! foogroup User FooEvent
+autocmd!          User FooEvent
+
+autocmd! foogroup
+autocmd!
+
+" command -> bang -> group "!foogroup!"
+autocmd!!foogroup!
+" command -> bang -> group "foogroup"
+autocmd!foogroup
+" command -> bang -> event
+autocmd!BufRead
+" command -> bang -> user event
+autocmd!User FooEvent
+
+" FIXME: "*" and "BufRead" are valid group names, however, :help :augroup
+" explicitly directs the user NOT to shadow event names
+" command -> group "*" -> event glob -> pattern
+autocmd!* * *.txt
+" command -> group "BufRead" -> event "BufRead" -> pattern
+autocmd!BufRead BufRead *.txt
+
+
+" List
+
+autocmd foogroup BufRead       *.txt
+autocmd          BufRead       *.txt
+autocmd foogroup User FooEvent *.txt
+autocmd          User FooEvent *.txt
+
+autocmd foogroup * *.txt
+autocmd          * *.txt
+
+autocmd foogroup BufRead
+autocmd          BufRead
+autocmd foogroup User FooEvent
+autocmd          User FooEvent
+
+autocmd foogroup
+autocmd
+
+
+" :doautoall
+
+doautoall BufRead
+
+doautoall BufRead *.txt
+doautoall foogroup BufRead
+doautoall <nomodeline> BufRead
+
+doautoall <nomodeline> foogroup BufRead *.txt
+
+doautoall User FooEvent
+
+doautoall User FooEvent *.txt
+doautoall foogroup User FooEvent
+doautoall <nomodeline> User FooEvent
+
+doautoall <nomodeline> foogroup User FooEvent *.txt
+
+doautoall <nomodeline> foogroup BufRead *.txt | echo "Foo"
+doautoall <nomodeline> foogroup BufRead *.txt " comment
+
+
+" :doautocmd
+
+doautocmd BufRead
+
+doautocmd BufRead *.txt
+doautocmd foogroup BufRead
+doautocmd <nomodeline> BufRead
+
+doautocmd <nomodeline> foogroup BufRead *.txt
+
+doautocmd User FooEvent
+
+doautocmd User FooEvent *.txt
+doautocmd foogroup User FooEvent
+doautocmd <nomodeline> User FooEvent
+
+doautocmd <nomodeline> foogroup User FooEvent *.txt
+
+doautocmd <nomodeline> foogroup BufRead *.txt | echo "Foo"
+doautocmd <nomodeline> foogroup BufRead *.txt | " comment
+
+
+" patterns
+
+au BufRead */*.txt
+
+au BufRead */*.*
+au BufRead */*.???
+au BufRead */*.[t][x]t
+
+au BufRead */*.[a-z][a-z]t
+au BufRead */*.[[:alpha:][:alpha:]]t
+
+au BufRead */*.[tx]\\\{2\}t
+au BufRead */*.[a-z]\\\{2\}t
+au BufRead */*.[[:alpha:]]\\\{2\}t
+au BufRead */*.[^[:punct:]]\\\{2\}t
+
+au BufRead */*.[]]xt
+au BufRead */*.[^]]xt
+
+au BufRead */*.[t\]]xt
+au BufRead */*.[^t\]]xt
+
+au BufRead */*.[[]xt
+au BufRead */*.[^[]xt
+
+au BufRead */*.[-]xt
+au BufRead */*.[^-]xt
+
+au BufRead */*.[-t-]xt
+au BufRead */*.[^-t-]xt
+
+au BufRead */*.[\^]xt
+au BufRead */*.[^^]xt
+
+au BufRead */*.txt,*/*.vim
+au BufRead */*.{txt,vim}
+au BufRead */*.{t{x,t},v{i,m}}
+
+" literal
+au BufRead */*.[]xt
+au BufRead */*.[\]xt
+au BufRead */*.[^]xt
+au BufRead */*.[^\]xt
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 6ab7231..47ff1b4 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 <dougkearns@gmail.com>
-" Last Change:	   2025 Apr 10
+" Last Change:	   2025 Apr 23
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -114,9 +114,12 @@
 
 " AutoCmd Events {{{2
 syn case ignore
-" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
-syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedC CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost
-syn keyword vimAutoEvent contained FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre KeyInputPre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabClosedPre TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextYankPost User VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew WinNewPre WinResized WinScrolled
+" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR='skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern'
+syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedC CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
+syn keyword vimAutoEvent contained FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre KeyInputPre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabClosedPre TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextYankPost VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter WinLeave WinNew WinNewPre WinResized WinScrolled skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
+
+syn keyword	vimAutoEvent	contained	User	skipwhite nextgroup=vimUserAutoEvent
+syn match	vimUserAutoEvent	contained	"\<\h\w*\>"	skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
 
 " Highlight commonly used Groupnames {{{2
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
@@ -280,7 +283,7 @@
 syn case match
 
 " All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList	contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
+syn cluster vimCmdList	contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
 syn cluster vim9CmdList	contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
 syn match vimCmdSep	"\\\@1<!|"	skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
 syn match vimCmdSep	":\+"	skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -369,21 +372,32 @@
 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
 syn cluster vimAugroupList	contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
-syn match   vimAugroup	"\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
-if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
-  syn region  vimAugroup  fold	start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
-else
-  syn region  vimAugroup	start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
-endif
+
+" define
+VimFolda syn region vimAugroup
+      \ start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+"
+      \ matchgroup=vimAugroupKey
+      \ end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>"
+      \ skipwhite nextgroup=vimAugroupEnd
+      \ contains=vimAutocmd,@vimAugroupList,vimAugroupkey
 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
-  syn match   vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
+  syn match	vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
 endif
 
-syn match   vimAutoCmdGroup	contained "\S\+"
-syn match   vimAugroupEnd	contained "\c\<END\>"
-syn match   vimAugroupBang	contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
-syn keyword vimAugroupKey	contained aug[roup]  skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
+" TODO: Vim9 comment
+syn match	vimAugroupName	contained	"\%(\\["|[:space:]]\|[^"|[:space:]]\)\+"
+syn match	vimAugroupEnd	contained	"\c\<END\>"
+syn match	vimAugroupBang	contained	"\a\@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 
+
+" list
+VimL syn match	vimAugroup	"\<aug\%[roup]\>\ze\s*\%(["|]\|$\)"	skipwhite nextgroup=vimCmdSep,vimComment  contains=vimAugroupKey
+Vim9 syn match 	vimAugroup	"\<aug\%[roup]\>\ze\s*\%([#|]\|$\)"	skipwhite nextgroup=vimCmdSep,vim9Comment contains=vimAugroupKey
+
+" hi def link vimAugroupEnd Special
 " Operators: {{{2
 " =========
 syn cluster	vimOperGroup	contains=@vimContinue,@vimExprList,vim9Comment
@@ -942,16 +956,83 @@
 " GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
 syn keyword vimAbb abc[lear] cabc[lear] iabc[lear] skipwhite nextgroup=vimMapMod
 
-" Autocmd: {{{2
-" =======
-syn match	vimAutoCmdBang	contained	"\a\@1<=!"	skipwhite nextgroup=vimAutoEventList
-syn match	vimAutoEventList	contained	"\%(\a\+,\)*\a\+"	contains=vimAutoEvent nextgroup=vimAutoCmdSpace
-syn match	vimAutoCmdSpace	contained	"\s\+"	nextgroup=vimAutoCmdSfxList
-syn match	vimAutoCmdSfxList	contained	"\S*"	skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
-syn keyword	vimAutoCmd	au[tocmd]		skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
-syn keyword	vimAutoCmd	do[autocmd] doautoa[ll]	skipwhite nextgroup=vimAutoEventList
-syn match	vimAutoCmdMod	"\(++\)\=\(once\|nested\)"	skipwhite nextgroup=vimAutoCmdBlock
-syn region	vimAutoCmdBlock	contained	matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+" Filename Patterns: {{{2
+" =================
+
+syn match	vimWildcardQuestion	contained	"?"
+syn match	vimWildcardStar		contained	"*"
+
+syn match	vimWildcardBraceComma	contained	","
+syn region	vimWildcardBrace		contained
+      \ matchgroup=vimWildcard
+      \ start="{"
+      \ end="}"
+      \ contains=vimWildcardEscape,vimWildcardBrace,vimWildcardBraceComma,vimWildcardQuestion,vimWildcardStar,vimWildcardBracket
+      \ oneline
+
+syn match	vimWildcardIntervalNumber	contained	"\d\+"
+syn match	vimWildcardInterval	contained	"\\\\\\{\d\+\%(,\d\+\)\=\\}" contains=vimWildcardIntervalNumber
+
+
+syn match	vimWildcardBracket	contained	"\[\%(\^\=]\=\%(\\.\|\[\([:.=]\)[^:.=]\+\1]\|[^][:space:]]\)*\)\@>]"
+      \ contains=vimWildcardBracketStart,vimWildcardEscape
+
+syn match	vimWildcardBracketCharacter	contained	"."	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
+syn match	vimWildcardBracketRightBracket	contained	"]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketHyphen	contained	"-]\@!"	nextgroup=@vimWildcardBracketCharacter
+syn match	vimWildcardBracketEscape	contained	"\\."	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
+syn match	vimWildcardBracketCharacterClass	contained	"\[:[^:]\+:]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketEquivalenceClass	contained	"\[=[^=]\+=]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+syn match	vimWildcardBracketCollatingSymbol	contained	"\[\.[^.]\+\.]"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
+
+syn match	vimWildcardBracketStart	contained	"\["	nextgroup=vimWildcardBracketCaret,vimWildcardBracketRightBracket,@vimWildcardBracketCharacter
+syn match	vimWildcardBracketCaret	contained	"\^"	nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketRightBracket 
+syn match	vimWildcardBracketEnd	contained	"]"
+
+syn cluster	vimWildcardBracketCharacter	contains=vimWildcardBracketCharacter,vimWildcardBracketEscape,vimWildcardBracketCharacterClass,vimWildcardBracketEquivalenceClass,vimWildcardBracketCollatingSymbol
+
+syn match	vimWildcardEscape	contained	"\\."
+
+syn cluster	vimWildcard		contains=vimWildcardQuestion,vimWildcardStar,vimWildcardBrace,vimWildcardBracket,vimWildcardInterval
+
+" Autocmd and Doauto{cmd,all}: {{{2
+" ===========================
+
+" TODO: explicitly match the {cmd} arg rather than bailing out to TOP
+syn region	vimAutocmdBlock	contained	matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
+
+syn match	vimAutocmdGroup	contained	"\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" skipwhite nextgroup=vimAutoEvent,vimAutoEventGlob
+syn match	vimAutocmdBang	contained	"\a\@1<=!"		     skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
+
+" TODO: cleaner handling of | in pattern position
+"     : match pattern items in addition to wildcards
+syn region	vimAutocmdPattern	contained
+      \ start="|\@!\S"
+      \ skip="\\\\\|\\[,[:space:]]"
+      \ end="\ze[,[:space:]]"
+      \ end="$"
+      \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+      \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape
+syn match	vimAutocmdBufferPattern	contained	"<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock
+" trailing pattern separator comma allowed
+syn match	vimAutocmdPatternSep	contained	","	                skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock
+syn match	vimAutocmdPatternEscape	contained	"\\."
+syn cluster	vimAutocmdPattern		contains=vimAutocmdPattern,vimAutocmdBufferPattern
+
+" TODO: Vim9 requires '++' prefix
+syn match	vimAutocmdMod	contained	"\%(++\)\=\<nested\>" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock
+syn match	vimAutocmdMod	contained	"++once\>"	skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock
+
+" higher priority than vimAutocmdGroup, assume no group is so named
+syn match	vimAutoEventGlob	contained	"*"	skipwhite nextgroup=@vimAutocmdPattern
+syn match	vimAutoEventSep	contained	"\a\@1<=,"	nextgroup=vimAutoEvent
+
+syn match	vimAutocmd		"\<au\%[tocmd]\>"	skipwhite nextgroup=vimAutocmdBang,vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
+
+
+syn match	vimDoautocmdMod	contained	"<nomodeline>"		skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent
+syn match	vimDoautocmd		"\<do\%[autocmd]\>"	skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
+syn match	vimDoautocmd		"\<doautoa\%[ll]\>"	skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
 
 " Echo And Execute: -- prefer strings! {{{2
 " ================
@@ -1706,10 +1787,14 @@
  hi def link vimAugroupBang	vimBang
  hi def link vimAugroupError	vimError
  hi def link vimAugroupKey	vimCommand
- hi def link vimAutoCmd	vimCommand
- hi def link vimAutoCmdBang	vimBang
+ hi def link vimAutocmd	vimCommand
+ hi def link vimAutocmdBang	vimBang
+ hi def link vimAutocmdPatternEscape	Special
  hi def link vimAutoEvent	Type
- hi def link vimAutoCmdMod	Special
+ hi def link vimAutoEventGlob	Type
+ hi def link vimAutocmdBufferPattern	Special
+ hi def link vimAutocmdMod	Special
+ hi def link vimAutocmdPatternSep	vimSep
  hi def link vimBang	vimOper
  hi def link vimBehaveBang	vimBang
  hi def link vimBehaveModel	vimBehave
@@ -1735,6 +1820,8 @@
  hi def link vimDefParam	vimVar
  hi def link vimDelcommand	vimCommand
  hi def link vimDelcommandAttr	vimUserCmdAttr
+ hi def link vimDoautocmd	vimCommand
+ hi def link vimDoautocmdMod	Special
  hi def link vimEcho	vimCommand
  hi def link vimEchohlNone	vimGroup
  hi def link vimEchohl	vimCommand
@@ -1950,6 +2037,24 @@
  hi def link vimVimVar	Identifier
  hi def link vimVimVarName	Identifier
  hi def link vimWarn	WarningMsg
+ hi def link vimWildcard	Special
+ hi def link vimWildcardBraceComma	vimWildcard
+ hi def link vimWildcardBracket	vimWildcard
+ hi def link vimWildcardBracketCaret	vimWildcard
+ hi def link vimWildcardBracketCharacter	Normal
+ hi def link vimWildcardBracketCharacter	Normal
+ hi def link vimWildcardBracketCharacterClass	vimWildCard
+ hi def link vimWildcardBracketCollatingSymbol	vimWildCard
+ hi def link vimWildcardBracketEnd		vimWildcard
+ hi def link vimWildcardBracketEquivalenceClass	vimWildCard
+ hi def link vimWildcardBracketEscape	vimWildcard
+ hi def link vimWildcardBracketHyphen	vimWildcard
+ hi def link vimWildcardBracketRightBracket	vimWildcardBracketCharacter
+ hi def link vimWildcardBracketStart	vimWildcard
+ hi def link vimWildcardEscape	vimWildcard
+ hi def link vimWildcardInterval	vimWildcard
+ hi def link vimWildcardQuestion	vimWildcard
+ hi def link vimWildcardStar	vimWildcard
 
  hi def link vim9Abstract	vimCommand
  hi def link vim9Boolean	Boolean