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

Commit: 
https://github.com/vim/vim/commit/520a2c7852e1f8798fa1cfbe7a7579982145daa1
Author: Doug Kearns <dougkea...@gmail.com>
Date:   Tue Apr 8 20:50:00 2025 +0200

    runtime(vim): Update base-syntax, improve :command highlighting
    
    - Match multiline :command definitions.
    - Match custom completion funcref var names.
    
    fixes: #17001
    closes: #17067
    
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/generator/gen_syntax_vim.vim 
b/runtime/syntax/generator/gen_syntax_vim.vim
index 19e5491eb..b8580790a 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 Mar 09
+" Last Change: 2025 Apr 06
 
 let s:keepcpo= &cpo
 set cpo&vim
@@ -734,9 +734,9 @@ function s:update_syntax_vim_file(vim_info)
                let lnum = s:search_and_check('vimVarName', base_fname, 
str_info)
                let lnum = s:append_syn_any(lnum, str_info, li)
 
-               " vimUserAttrbCmplt
+               " vimUserAttrComplete
                let li = a:vim_info.compl_name
-               let lnum = s:search_and_check('vimUserCmdAttrCmplt', 
base_fname, str_info)
+               let lnum = s:search_and_check('vimUserCmdAttrComplete', 
base_fname, str_info)
                let lnum = s:append_syn_any(lnum, str_info, li)
 
                " vimUserAttrbAddr
diff --git a/runtime/syntax/generator/vim.vim.base 
b/runtime/syntax/generator/vim.vim.base
index 83a61c9b7..d13d1f09c 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 <dougkea...@gmail.com>
-" Last Change:    2025 Apr 05
+" Last Change:    2025 Apr 06
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -614,22 +614,30 @@ syn match vimSpecFileMod  "\(:[phtre]\)\+"        
contained
 " User-Specified Commands: {{{2
 " =======================
 syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
-syn keyword    vimUserCmdKey   contained       com[mand]
-syn match      vimUserCmdName  contained       "\<\u[[:alnum:]]*\>"    
skipwhite nextgroup=vimUserCmdBlock
-syn match      vimUserCmd              "\<com\%[mand]\>!\=.*$" 
contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
-syn match      vimUserCmdAttrError     contained       "- \+\ze\%(\s\|=\)"
-syn match      vimUserCmdAttr  contained       "-addr="                
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
-syn match      vimUserCmdAttr  contained       "-bang\>"               
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-bar\>"                
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-buffer\>"             
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-complete="            
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
-syn match      vimUserCmdAttr  contained       "-count\>"              
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-count="               
contains=vimUserCmdAttrKey nextgroup=vimNumber
-syn match      vimUserCmdAttr  contained       "-keepscript\>"         
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-nargs="               
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
-syn match      vimUserCmdAttr  contained       "-range\>"              
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-range="               
contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
-syn match      vimUserCmdAttr  contained       "-register\>"           
contains=vimUserCmdAttrKey
+
+syn match      vimUserCmd      "\<com\%[mand]\>!\="            skipwhite       
 nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
+syn match      vimUserCmd      +\<com\%[mand]\>!\=\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
+
+syn region     vimUserCmdAttrs     contained
+      \ start="-\l"
+      \ start=+^\s*\%(\\|["#]\ \)+
+      \ end="\ze\s\u"
+      \ skipwhite nextgroup=vimUserCmdName
+      \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError
+      \ transparent
+syn match      vimUserCmdAttrError contained   "- \+\ze\%(\s\|=\)"
+syn match      vimUserCmdAttr    contained     "-addr="                
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
+syn match      vimUserCmdAttr    contained     "-bang\>"               
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-bar\>"                
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-buffer\>"             
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-complete="            
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError
+syn match      vimUserCmdAttr    contained     "-count\>"              
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-count="               
contains=vimUserCmdAttrKey nextgroup=vimNumber
+syn match      vimUserCmdAttr    contained     "-keepscript\>"         
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-nargs="               
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
+syn match      vimUserCmdAttr    contained     "-range\>"              
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-range="               
contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
+syn match      vimUserCmdAttr    contained     "-register\>"           
contains=vimUserCmdAttrKey
 
 syn match      vimUserCmdAttrNargs     contained       "[01*?+]"
 syn match      vimUserCmdAttrRange     contained       "%"
@@ -640,17 +648,34 @@ endif
 
 syn case ignore
 syn keyword    vimUserCmdAttrKey   contained   a[ddr] ban[g] bar bu[ffer] 
com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
-" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt 
contained', END_STR=''
-syn keyword    vimUserCmdAttrCmplt     contained       custom customlist 
nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
-syn match      vimUserCmdAttrCmpltFunc contained       
",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 
nextgroup=vimUserCmdError
+
+" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword 
vimUserCmdAttrComplete contained', END_STR=''
+syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint 
buffer color command compiler cscope diff_buffer dir dir_in_path environment 
event expression file file_in_path filetype function help highlight history 
keymap locale mapclear mapping menu messages option packadd runtime scriptnames 
shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
+syn keyword    vimUserCmdAttrComplete  contained       custom customlist 
nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError
+syn match      vimUserCmdAttrCompleteFunc      contained       
",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 
nextgroup=vimUserCmdError contains=vimVarScope,vimFuncSID
+
 " GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr 
contained', END_STR=''
-syn match      vimUserCmdAttrAddr      contained       "?"
+syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line 
loaded_buffers load other quickfix qf tabs tab windows win
+syn match      vimUserCmdAttrAddr     contained        "?"
 syn case match
 
-syn region     vimUserCmdBlock contained       matchgroup=vimSep start="{" 
end="^\s*\zs}" contains=@vimDefBodyList
+syn match      vimUserCmdName      contained   "\<\u[[:alnum:]]*\>"            
skipwhite        nextgroup=vimUserCmdBlock,vimUserCmdReplacement
+syn match      vimUserCmdName      contained   +\<\u[[:alnum:]]*\>\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdBlock,vimUserCmdReplacement
+syn region     vimUserCmdReplacement contained
+      \ start="\S"
+      \ start=+^\s*\%(\\|["#]\ \)+
+      \ skip=+
\s*\%(\\|["#]\ \)+
+      \ end="$"
+      \ contains=@vimContinue,@vimUserCmdList,vimComFilter
+syn region     vimUserCmdBlock     contained
+      \ matchgroup=vimSep
+      \ start="{"
+      \ end="^\s*\zs}"
+      \ contains=@vimDefBodyList
 
-syn match      vimDelcommand           "\<delc\%[ommand]\>" skipwhite 
nextgroup=vimDelcommandAttr
-syn match      vimDelcommandAttr       contained       "-buffer\>"
+syn match      vimDelcommand           "\<delc\%[ommand]\>"    skipwhite 
nextgroup=vimDelcommandAttr,vimDelcommandName
+syn match      vimDelcommandAttr       contained       "-buffer\>"             
skipwhite nextgroup=vimDelcommandName
+syn match      vimDelcommandName       contained       "\<\u[[:alnum:]]*\>"
 
 " Lower Priority Comments: after some vim commands... {{{2
 " =======================
@@ -1729,8 +1754,10 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimUnlet  vimCommand
  hi def link vimUnletBang      vimBang
  hi def link vimUnmap  vimMap
+ hi def link vimUserCmd        vimCommand
  hi def link vimUserCmdAttrAddr        vimSpecial
- hi def link vimUserCmdAttrCmplt       vimSpecial
+ hi def link vimUserCmdAttrComplete    vimSpecial
+ hi def link vimUserCmdAttrCompleteFunc        vimVar
  hi def link vimUserCmdAttrNargs       vimSpecial
  hi def link vimUserCmdAttrRange       vimSpecial
  hi def link vimUserCmdAttrKey vimUserCmdAttr
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_00.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_00.dump
index b9326415a..e782ad02b 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_00.dump
@@ -1,20 +1,20 @@
 >"+0#0000e05#ffffff0| |V|i|m| |:|c|o|m@1|a|n|d|,| |:|d|e|l|c|o|m@1|a|n|d| 
 >|a|n|d| |:|c|o|m|c|l|e|a|r| |c|o|m@1|a|n|d|s| +0#0000000&@24
+|"+0#0000e05&| |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|U|s|e|r|C|m|d|N|a|m|e| |T|o|d|o| +0#0000000&@23
+|"+0#0000e05&| |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|D|e|l|c|o|m@1|a|n|d|N|a|m|e| |T|o|d|o| +0#0000000&@20
 @75
 @75
 |"+0#0000e05&| |l|i|s|t| +0#0000000&@68
 @75
 |c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@67
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F| @65
+|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012| 
+0#0000000#ffffff0@65
+@75
 @75
 |"+0#0000e05&| |d|e|f|i|n|e| +0#0000000&@66
 @75
-|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&@1|F|o@1| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51
-|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@51
-|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |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&@38
+|c+0#af5f00255&|o|m@1|a|n|d| +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&@51
+|c+0#af5f00255&|o|m@1|a|n|d|!| +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&@51
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| +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&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| 
+0#0000000&@38
 @75
-|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60
-@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
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62
-|}+0#e000e06&| +0#0000000&@73
+|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@60
 @57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_01.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_01.dump
index 347a4f798..a653a4d61 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_01.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |{+0#e000e06&| +0#0000000&@60
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d| +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&@51
+|c+0#af5f00255&|o|m@1|a|n|d|!| +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&@51
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| +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&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|r|"| 
+0#0000000&@38
+@75
+>c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|{+0#e000e06&| +0#0000000&@60
 @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
 @2|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|B|a|z|"| +0#0000000&@62
->}+0#e000e06&| +0#0000000&@73
+|}+0#e000e06&| +0#0000000&@73
 @75
 |c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|k|e@1
-|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F|o@1| @35
-@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56
+|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +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&@24
 @75
-|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|,+0#0000000&|C|o|m|p|l|e|t|e|r|1|
 |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@23
-|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|C|o|m|p|l|e|t|e|r|2|
 |F|o@1| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@19
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|f|u|n|c|t|i|o|n|)|"| 
+0#0000000&@26
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|k|e@1
+|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0@35
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56
 @75
-|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64
-@57|1|9|,|1| @9|2|3|%| 
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|@+0#4040ff13&@2
+| +0#0000000&@56|1|9|,|1| @9|1|0|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_02.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_02.dump
index 00a82981f..9909f2f4d 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_02.dump
@@ -1,20 +1,20 @@
-|d+0#af5f00255#ffffff0|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64
-@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F|o@1| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1| |(|d|e|f|i|n|e|d| |i|n| |:|d|e|f|)|"| 
+0#0000000&@31
-|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|k|e@1
+|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@39
+@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@56
 @75
-|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |d|e|f|i|n|e| +0#0000000&@56
-> @74
-|"+0#0000e05&| |c|o|m@1|a|n|d|!| +0#0000000&@64
-|"+0#0000e05&| @6|\| |-|a|d@1|r|=|l|i|n|e|s| +0#0000000&@53
-|"+0#0000e05&| @6|\| |-|b|a|n|g| +0#0000000&@59
-|"+0#0000e05&| @6|\| |-|b|a|r| +0#0000000&@60
-|"+0#0000e05&| @6|\| |-|b|u|f@1|e|r| +0#0000000&@57
-|"+0#0000e05&| @6|\| |-|c|o|m|p|l|e|t|e|=|b|u|f@1|e|r| +0#0000000&@48
-|"+0#0000e05&| @6|\| |-|c|o|u|n|t| +0#0000000&@58
-|"+0#0000e05&| @6|\| |-|n|a|r|g|s|=|*| +0#0000000&@56
-|"+0#0000e05&| @6|\| |-|r|a|n|g|e| +0#0000000&@58
-|"+0#0000e05&| @6|\| |-|r|e|g|i|s|t|e|r| +0#0000000&@55
-|"+0#0000e05&| @6|\| |-|k|e@1|p|s|c|r|i|p|t| +0#0000000&@53
-|"+0#0000e05&| @6|\| |F|o@1| | +0#0000000&@60
-|"+0#0000e05&| @6|\| |e|c|h|o| |"+0#e000002&|F|O@1|"| +0#0000000&@54
-@57|3|6|,|0|-|1| @7|5|4|%| 
+>c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|k|e@1
+|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0@35
+@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&@56
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|a+0#00e0003&|r|g|u|m|e|n|t|s| 
+0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#e000e06&|b|a|r| 
+0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|a+0#00e0003&|r|g|l|i|s|t| 
+0#0000000&|-+0#e000e06&|c|o|u|n|t|=|1+0#e000002&| 
+0#0000000&|-+0#e000e06&|k|e@1
+|p|s|c|r|i|p|t| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|a|n|g|e|=|%+0#00e0003&| 
+0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@39
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63
+@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&@56
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|1|
 +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&@21
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|2|
 +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&@17
+@57|3|4|,|1| @9|2@1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
index 0fe7a38d9..c035fb6d6 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_03.dump
@@ -1,20 +1,20 @@
-|"+0#0000e05#ffffff0| @6|\| |e|c|h|o| |"+0#e000002&|F|O@1|"| +0#0000000&@54
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|c+0#00e0003&|u|s|t|o|m|l|i|s|t|,+0#0000000&|s+0#00e0e07&|:|C|o|m|p|l|e|t|e|r|2|
 +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&@17
 @75
-|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66
-@75
-|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#af5f00255#ffffff0|a+0#00e0e07&|r|g|u|m|e|n|t|s|
 +0#0000000&|-+0#e000e06&|b|a|n|g| 
+0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| 
+0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| +0#0000000&|F|o@1| 
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@8
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| 
|(|d|e|f|i|n|e|d| |i|n| |:|f|u|n|c|t|i|o|n|)|"| +0#0000000&@26
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
 > @74
-|"+0#0000e05&| |d|e|l|e|t|e| +0#0000000&@66
-@75
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| @60
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|F|o@1| @52
+|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|2|(+0#e000e06&|)| +0#0000000&@64
+@2|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1| 
|(|d|e|f|i|n|e|d| |i|n| |:|d|e|f|)|"| +0#0000000&@31
+|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68
 @75
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| ||| 
|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@47
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|F|o@1| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| 
+0#0000000&@39
 @75
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F|o@1| |"+0#0000e05&| 
|c|o|m@1|e|n|t| +0#0000000&@50
-|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|F|o@1| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42
+|"+0#0000e05&| |m|u|l|t|i|l|i|n|e| |d|e|f|i|n|e| +0#0000000&@56
 @75
-|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@66
-|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| 
+0#0000000&@56
-@57|5|4|,|0|-|1| @7|8|7|%| 
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59
+@6|\+0#e000e06&| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| 
+0#0000000&@50
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60
+@57|5|0|,|0|-|1| @7|3|5|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
index 9700fc348..a263a186a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_04.dump
@@ -1,20 +1,20 @@
-|c+0#af5f00255#ffffff0|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| 
|c|o|m@1|e|n|t| +0#0000000&@56
-|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| 
+0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55
+@6>\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
 @75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| +0#0000000&@60
-> @74
-|c+0#af5f00255&|o|m| +0#0000000&|F|o@1| |c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|l|s|'|)+0#e000e06&|
 +0#0000000&@49
-@75
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|7|2|,|0|-|1| @7|B|o|t| 
+|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&@66
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| 
+0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59
+@6|\+0#e000e06&| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| 
+0#0000000&@50
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57
+@57|6|8|,|7| @9|4|9|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_05.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_05.dump
new file mode 100644
index 000000000..7b78054c9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| 
+0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| @54
+@6|\+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|B|a|r|"| +0#0000000&@56
+> @74
+|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&@66
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|a|d@1|r|=|l+0#00e0003&|i|n|e|s| 
+0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|n|g| +0#0000000&@61
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|a|r| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| +0#0000000&@59
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|b+0#00e0003&|u|f@1|e|r| 
+0#0000000&@50
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|c|o|u|n|t| +0#0000000&@60
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@57|8|6|,|0|-|1| @7|6|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_06.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_06.dump
new file mode 100644
index 000000000..4e9926fd8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_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&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&@58
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|a|n|g|e| +0#0000000&@60
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6>\+0#e000e06&| +0#0000000&|-+0#e000e06&|r|e|g|i|s|t|e|r| +0#0000000&@57
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|-+0#e000e06&|k|e@1|p|s|c|r|i|p|t| +0#0000000&@55
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@63
+@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
+@75
+@75
+|"+0#0000e05&| |e|r@1|o|r|s| +0#0000000&@66
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| 
+0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#0000000#ffffff0|a|r|g|u|m|e|n|t|s|
 |-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| 
+0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+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&@8
+@57|1|0|4|,|7| @8|7|8|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_07.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_07.dump
new file mode 100644
index 000000000..3d51e30ef
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_07.dump
@@ -0,0 +1,20 @@
+|c+0#af5f00255#ffffff0|o|m@1|a|n|d|!| 
+0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r|=+0#0000000#ffffff0|a|r|g|u|m|e|n|t|s|
 |-+0#e000e06&|b|a|n|g| +0#0000000&|-+0#ffffff16#ff404010|b|a|d|a|t@1|r| 
+0#0000000#ffffff0|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+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&@8
+@75
+@75
+|"+0#0000e05&| |d|e|l|e|t|e| +0#0000000&@66
+@75
+>d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0@60
+|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@52
+@75
+|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +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&@47
+|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+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&@39
+@75
+|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@50
+|d+0#af5f00255&|e|l|c|o|m@1|a|n|d| +0#0000000&|-+0#e000e06&|b|u|f@1|e|r| 
+0#0000000&|F+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| 
|c|o|m@1|e|n|t| +0#0000000&@42
+@75
+|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&@66
+|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| 
+0#0000000&@56
+|c+0#af5f00255&|o|m|c|l|e|a|r| +0#0000000&||| |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@53
+@75
+@75
+@57|1|2@1|,|1| @8|9|2|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_command_08.dump 
b/runtime/syntax/testdir/dumps/vim_ex_command_08.dump
new file mode 100644
index 000000000..19a6c3647
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_command_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|"+0#0000e05&| |I|s@1|u|e| |#|1|4|1|3|5| |(|v|i|m|.|v|i|m| |s|y|n|t|a|x| 
|h|i|g|h|l|i|g|h|t|i|n|g| |b|r|o|k|e|n| |w|r|t| |s|y|s|t|e|m|(|)@1| 
+0#0000000&@10
+@75
+|c+0#af5f00255&|o|m| +0#0000000&|F+0#0000001#ffff4012|o@1| 
+0#0000000#ffffff0|c+0#af5f00255&|a|l@1| 
+0#0000000&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|l|s|'|)+0#e000e06&|
 +0#0000000&@49
+@75
+> @74
+|"+0#0000e05&| |I|s@1|u|e| |#|1|7|0@1|1| |(|W|r|o|n|g| 
|v|i|m|U|s|e|r|C|m|d|A|t@1|r|E|r@1|o|r| |h|i|g|h|l|i|g|h|t|i|n|g| |i|n| 
|v|i|m|.|v|i|m|)| +0#0000000&@8
+@75
+|c+0#af5f00255&|o|m@1|a|n|d|!| +0#0000000&|-+0#e000e06&|b|a|n|g| 
+0#0000000&|-+0#e000e06&|n|a|r|g|s|=|*+0#00e0003&| 
+0#0000000&|-+0#e000e06&|c|o|m|p|l|e|t|e|=|f+0#00e0003&|i|l|e| 
+0#0000000&|M+0#0000001#ffff4012|a|k|e| +0#0000000#ffffff0|A|s|y|n|c|R|u|n| 
|-+0#af5f00255&|p+0#00e0e07&|r|o|g|r|a|m|=+0#af5f00255&|m+0#00e0e07&|a|k|e| 
+0#0000000&|@| |<+0#e000e06&|a|r|g|s|>
+| +0#0000000&@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|0|,|0|-|1| @6|B|o|t| 
diff --git a/runtime/syntax/testdir/input/vim_ex_command.vim 
b/runtime/syntax/testdir/input/vim_ex_command.vim
index 0873648cb..4679b08e9 100644
--- a/runtime/syntax/testdir/input/vim_ex_command.vim
+++ b/runtime/syntax/testdir/input/vim_ex_command.vim
@@ -1,4 +1,6 @@
 " Vim :command, :delcommand and :comclear commands
+" VIM_TEST_SETUP highlight link vimUserCmdName Todo
+" VIM_TEST_SETUP highlight link vimDelcommandName Todo
 
 
 " list
@@ -6,10 +8,12 @@
 command
 command F
 
+
 " define
 
 command  Foo echo "Foo"
 command! Foo echo "Foo"
+
 command! Foo echo "Foo" | echo "Bar"
 
 command! Foo {
@@ -18,11 +22,27 @@ command! Foo {
   echo "Baz"
 }
 
+command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 
-keepscript -nargs=* -range=% -register Foo echo "Foo"
+
+command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 
-keepscript -nargs=* -range=% -register Foo
+      \ echo "Foo"
+
+command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 
-keepscript -nargs=* -range=% -register
+      \ Foo
+      \ echo "Foo"
+
 command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 
-keepscript -nargs=* -range=% -register Foo
+      "\ comment
       \ echo "Foo"
 
-command! -complete=custom,Completer1 Foo echo "Foo"
-command! -complete=customlist,Completer2 Foo echo "Foo"
+command! -addr=arguments -bang -bar -buffer -complete=arglist -count=1 
-keepscript -nargs=* -range=% -register
+      "\ comment
+      \ Foo
+      "\ comment
+      \ echo "Foo"
+
+command! -complete=custom,s:Completer1 Foo echo "Foo"
+command! -complete=customlist,s:Completer2 Foo echo "Foo"
 
 function Foo()
   command! Foo echo "Foo (defined in :function)"
@@ -32,43 +52,93 @@ def Foo2()
   command! Foo echo "Foo (defined in :def)"
 enddef
 
+
 " multiline define
 
-" command!
-"       \ -addr=lines
-"       \ -bang
-"       \ -bar
-"       \ -buffer
-"       \ -complete=buffer
-"       \ -count
-"       \ -nargs=*
-"       \ -range
-"       \ -register
-"       \ -keepscript
-"       \ Foo 
-"       \ echo "FOO"
+command! -addr=lines
+      \ -bang
+      \ -bar
+      \ -buffer
+      \ -complete=buffer
+      \ -count
+      \ -nargs=*
+      \ -range
+      \ -register
+      \ -keepscript
+      \ Foo
+      \ echo "Foo" |
+      \ echo "Bar"
+
+command!
+      \ -addr=lines
+      \ -bang
+      \ -bar
+      \ -buffer
+      \ -complete=buffer
+      \ -count
+      \ -nargs=*
+      \ -range
+      \ -register
+      \ -keepscript
+      \ Foo
+      \ echo "Foo" |
+      \ echo "Bar"
+
+command!
+      "\ comment
+      \ -addr=lines
+      \ -bang
+      "\ comment
+      "\ comment
+      \ -bar
+      \ -buffer
+      "\ comment
+      \ -complete=buffer
+      "\ comment
+      \ -count
+      "\ comment
+      \ -nargs=*
+      "\ comment
+      \ -range
+      "\ comment
+      \ -register
+      "\ comment
+      \ -keepscript
+      "\ comment
+      \ Foo
+      "\ comment
+      \ echo "Foo" |
+      "\ comment
+      \ echo "Bar"
+
 
 " errors
 
 command! -badattr=arguments -bang -badattr -nargs=* Foo echo "Foo"
 
+
 " delete
 
 delcommand Foo
 delcommand -buffer Foo
 
-delcommand Foo | echo "..."
-delcommand -buffer Foo | echo "..."
+delcommand Foo | echo "Foo"
+delcommand -buffer Foo | echo "Foo"
 
 delcommand Foo " comment
 delcommand -buffer Foo " comment
 
 comclear
 comclear " comment
-comclear | echo "..."
+comclear | echo "Foo"
 
 
-" Issue #14135
+" Issue #14135 (vim.vim syntax highlighting broken wrt system())
 
 com Foo call system('ls')
 
+
+" Issue #17001 (Wrong vimUserCmdAttrError highlighting in vim.vim)
+
+command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index dcdb6bc54..07c325011 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -664,22 +664,30 @@ syn match vimSpecFileMod  "\(:[phtre]\)\+"        
contained
 " User-Specified Commands: {{{2
 " =======================
 syn cluster    vimUserCmdList  
contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
-syn keyword    vimUserCmdKey   contained       com[mand]
-syn match      vimUserCmdName  contained       "\<\u[[:alnum:]]*\>"    
skipwhite nextgroup=vimUserCmdBlock
-syn match      vimUserCmd              "\<com\%[mand]\>!\=.*$" 
contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
-syn match      vimUserCmdAttrError     contained       "- \+\ze\%(\s\|=\)"
-syn match      vimUserCmdAttr  contained       "-addr="                
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
-syn match      vimUserCmdAttr  contained       "-bang\>"               
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-bar\>"                
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-buffer\>"             
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-complete="            
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
-syn match      vimUserCmdAttr  contained       "-count\>"              
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-count="               
contains=vimUserCmdAttrKey nextgroup=vimNumber
-syn match      vimUserCmdAttr  contained       "-keepscript\>"         
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-nargs="               
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
-syn match      vimUserCmdAttr  contained       "-range\>"              
contains=vimUserCmdAttrKey
-syn match      vimUserCmdAttr  contained       "-range="               
contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
-syn match      vimUserCmdAttr  contained       "-register\>"           
contains=vimUserCmdAttrKey
+
+syn match      vimUserCmd      "\<com\%[mand]\>!\="            skipwhite       
 nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
+syn match      vimUserCmd      +\<com\%[mand]\>!\=\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
+
+syn region     vimUserCmdAttrs     contained
+      \ start="-\l"
+      \ start=+^\s*\%(\\|["#]\ \)+
+      \ end="\ze\s\u"
+      \ skipwhite nextgroup=vimUserCmdName
+      \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError
+      \ transparent
+syn match      vimUserCmdAttrError contained   "- \+\ze\%(\s\|=\)"
+syn match      vimUserCmdAttr    contained     "-addr="                
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
+syn match      vimUserCmdAttr    contained     "-bang\>"               
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-bar\>"                
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-buffer\>"             
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-complete="            
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError
+syn match      vimUserCmdAttr    contained     "-count\>"              
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-count="               
contains=vimUserCmdAttrKey nextgroup=vimNumber
+syn match      vimUserCmdAttr    contained     "-keepscript\>"         
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-nargs="               
contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
+syn match      vimUserCmdAttr    contained     "-range\>"              
contains=vimUserCmdAttrKey
+syn match      vimUserCmdAttr    contained     "-range="               
contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
+syn match      vimUserCmdAttr    contained     "-register\>"           
contains=vimUserCmdAttrKey
 
 syn match      vimUserCmdAttrNargs     contained       "[01*?+]"
 syn match      vimUserCmdAttrRange     contained       "%"
@@ -690,19 +698,36 @@ endif
 
 syn case ignore
 syn keyword    vimUserCmdAttrKey   contained   a[ddr] ban[g] bar bu[ffer] 
com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
-" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt 
contained', END_STR=''
-syn keyword vimUserCmdAttrCmplt contained arglist augroup behave breakpoint 
buffer color command compiler cscope diff_buffer dir dir_in_path environment 
event expression file file_in_path filetype function help highlight history 
keymap locale mapclear mapping menu messages option packadd runtime scriptnames 
shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
-syn keyword    vimUserCmdAttrCmplt     contained       custom customlist 
nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
-syn match      vimUserCmdAttrCmpltFunc contained       
",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 
nextgroup=vimUserCmdError
+
+" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword 
vimUserCmdAttrComplete contained', END_STR=''
+syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint 
buffer color command compiler cscope diff_buffer dir dir_in_path environment 
event expression file file_in_path filetype function help highlight history 
keymap locale mapclear mapping menu messages option packadd runtime scriptnames 
shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
+syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint 
buffer color command compiler cscope diff_buffer dir dir_in_path environment 
event expression file file_in_path filetype function help highlight history 
keymap locale mapclear mapping menu messages option packadd runtime scriptnames 
shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
+syn keyword    vimUserCmdAttrComplete  contained       custom customlist 
nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError
+syn match      vimUserCmdAttrCompleteFunc      contained       
",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 
nextgroup=vimUserCmdError contains=vimVarScope,vimFuncSID
+
 " GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr 
contained', END_STR=''
 syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line 
loaded_buffers load other quickfix qf tabs tab windows win
-syn match      vimUserCmdAttrAddr      contained       "?"
+syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line 
loaded_buffers load other quickfix qf tabs tab windows win
+syn match      vimUserCmdAttrAddr     contained        "?"
 syn case match
 
-syn region     vimUserCmdBlock contained       matchgroup=vimSep start="{" 
end="^\s*\zs}" contains=@vimDefBodyList
+syn match      vimUserCmdName      contained   "\<\u[[:alnum:]]*\>"            
skipwhite        nextgroup=vimUserCmdBlock,vimUserCmdReplacement
+syn match      vimUserCmdName      contained   +\<\u[[:alnum:]]*\>\ze\s*
\s*\%(\\|["#]\ \)+      skipwhite skipnl 
nextgroup=vimUserCmdBlock,vimUserCmdReplacement
+syn region     vimUserCmdReplacement contained
+      \ start="\S"
+      \ start=+^\s*\%(\\|["#]\ \)+
+      \ skip=+
\s*\%(\\|["#]\ \)+
+      \ end="$"
+      \ contains=@vimContinue,@vimUserCmdList,vimComFilter
+syn region     vimUserCmdBlock     contained
+      \ matchgroup=vimSep
+      \ start="{"
+      \ end="^\s*\zs}"
+      \ contains=@vimDefBodyList
 
-syn match      vimDelcommand           "\<delc\%[ommand]\>" skipwhite 
nextgroup=vimDelcommandAttr
-syn match      vimDelcommandAttr       contained       "-buffer\>"
+syn match      vimDelcommand           "\<delc\%[ommand]\>"    skipwhite 
nextgroup=vimDelcommandAttr,vimDelcommandName
+syn match      vimDelcommandAttr       contained       "-buffer\>"             
skipwhite nextgroup=vimDelcommandName
+syn match      vimDelcommandName       contained       "\<\u[[:alnum:]]*\>"
 
 " Lower Priority Comments: after some vim commands... {{{2
 " =======================
@@ -1787,8 +1812,10 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimUnlet  vimCommand
  hi def link vimUnletBang      vimBang
  hi def link vimUnmap  vimMap
+ hi def link vimUserCmd        vimCommand
  hi def link vimUserCmdAttrAddr        vimSpecial
- hi def link vimUserCmdAttrCmplt       vimSpecial
+ hi def link vimUserCmdAttrComplete    vimSpecial
+ hi def link vimUserCmdAttrCompleteFunc        vimVar
  hi def link vimUserCmdAttrNargs       vimSpecial
  hi def link vimUserCmdAttrRange       vimSpecial
  hi def link vimUserCmdAttrKey vimUserCmdAttr

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1u2EB3-008aPr-VH%40256bit.org.

Raspunde prin e-mail lui