diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 7611ef7a19b9ec..60ed29f906fe19 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -519,10 +519,14 @@ syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList " Autocmd: {{{2 " ======= -syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace +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] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList +if !exists("g:vimsyn_noerror") + syn match vimAutoBangError contained "!" skipwhite nextgroup=vimAutoEventList +endif +syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAugroupBang,vimAutoEventList +syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoBangError,vimAutoEventList syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList @@ -1047,6 +1051,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSubstFlagErr vimError hi def link vimSynCaseError vimError hi def link vimSynFoldMethodError vimError + hi def link vimAutoBangError vimError hi def link vimBufnrWarn vimWarn endif diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump index 0424482bb0d59b..c515bfde9b1d80 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_00.dump @@ -17,4 +17,4 @@ |"+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| +@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 00000000000000..f114d346835870 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump @@ -0,0 +1,20 @@ +|a+0#af5f00255#ffffff0|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 +> @74 +|"+0#0000e05&| |b|a|n|g| |i|s| |a|n| |e|r@1|o|r| |f|o|r| |d|o|a|u|t|o|c|m|d| |a|n|d| |d|o|a|u|t|o|a|l@1| +0#0000000&@28 +|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|f|o@1|b|a|r| @59 +|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|b|a|r| @59 +@75 +|d+0#af5f00255&|o|a|u|t|o|c|m|d|!+0#ffffff16#ff404010| +0#0000000#ffffff0|F+0#00e0003&|i|l|e|T|y|p|e|,+0#0000000&|B+0#00e0003&|u|f|E|n|t|e|r| +0#0000000&@46 +|d+0#af5f00255&|o|a|u|t|o|a|l@1|!+0#ffffff16#ff404010| +0#0000000#ffffff0|B+0#00e0003&|u|f|W|i|n|E|n|t|e|r|,+0#0000000&|W+0#00e0003&|i|n|E|n|t|e|r| +0#0000000&@43 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump index 1e07f5b8f0c460..6428db888ed3e6 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_99.dump @@ -1,10 +1,4 @@ -|"+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#ffffff0|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 @@ -16,5 +10,11 @@ @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 -> @74 -@57|1|9|,|0|-|1| @7|A|l@1| +@75 +|"+0#0000e05&| |b|a|n|g| |i|s| |a|n| |e|r@1|o|r| |f|o|r| |d|o|a|u|t|o|c|m|d| |a|n|d| |d|o|a|u|t|o|a|l@1| +0#0000000&@28 +|a+0#af5f00255&|u|g|r|o|u|p|!| +0#0000000&|f|o@1|b|a|r| @59 +|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&|f|o@1|b|a|r| @59 +@75 +|d+0#af5f00255&|o|a|u|t|o|c|m|d|!+0#ffffff16#ff404010| +0#0000000#ffffff0|F+0#00e0003&|i|l|e|T|y|p|e|,+0#0000000&|B+0#00e0003&|u|f|E|n|t|e|r| +0#0000000&@46 +>d+0#af5f00255&|o|a|u|t|o|a|l@1|!+0#ffffff16#ff404010| +0#0000000#ffffff0|B+0#00e0003&|u|f|W|i|n|E|n|t|e|r|,+0#0000000&|W+0#00e0003&|i|n|E|n|t|e|r| +0#0000000&@43 +@57|2|5|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_augroup.vim b/runtime/syntax/testdir/input/vim_ex_augroup.vim index 2dae59dda5751f..deb42acab05b27 100644 --- a/runtime/syntax/testdir/input/vim_ex_augroup.vim +++ b/runtime/syntax/testdir/input/vim_ex_augroup.vim @@ -17,3 +17,9 @@ augroup! !@#$%^&*()_+ " list groups augroup +" bang is an error for doautocmd and doautoall +augroup! foobar +autocmd! foobar + +doautocmd! FileType,BufEnter +doautoall! BufWinEnter,WinEnter diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 5dd678b86a0b7e..8382f2e1dc535f 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -3,7 +3,7 @@ " Maintainer: Hirohito Higashi " Doug Kearns " URL: https://github.com/vim-jp/syntax-vim-ex -" Last Change: 2024 May 27 +" Last Change: 2024 Jun 03 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -559,10 +559,14 @@ syn keyword vimAbb abc[lear] cabc[lear] iabc[lear] skipwhite nextgroup=vimMapMod " Autocmd: {{{2 " ======= -syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace +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] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList +if !exists("g:vimsyn_noerror") + syn match vimAutoBangError contained "!" skipwhite nextgroup=vimAutoEventList +endif +syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAugroupBang,vimAutoEventList +syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoBangError,vimAutoEventList syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList @@ -1091,6 +1095,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimSubstFlagErr vimError hi def link vimSynCaseError vimError hi def link vimSynFoldMethodError vimError + hi def link vimAutoBangError vimError hi def link vimBufnrWarn vimWarn endif