]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(vim): Update base-syntax, improve :highlight command (#14228)
authordkearns <dougkearns@gmail.com>
Mon, 18 Mar 2024 18:19:51 +0000 (05:19 +1100)
committerGitHub <noreply@github.com>
Mon, 18 Mar 2024 18:19:51 +0000 (19:19 +0100)
Improve :highlight command highlighting

- Use the same highlight groups for "default link" with and without
  bang.
- Match some common line-continuation use.
- Match :hi clear variants.
- Highlight color-name values.

Resync vim.vim and generator/vim.vim.base.

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/syntax/generator/vim.vim.base
runtime/syntax/testdir/dumps/vim_ex_highlight_00.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/vim_ex_highlight_01.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/vim_ex_highlight_02.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump [new file with mode: 0644]
runtime/syntax/testdir/input/vim_ex_highlight.vim [new file with mode: 0644]
runtime/syntax/vim.vim

index 2d9a2d34b3775c6f0131c3b59902759dcae90dcd..6527be42546fd81c3b8beb53175baa0e78c2db5b 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:  Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "      Doug Kearns <dougkearns@gmail.com>
 " URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Mar 10
+" Last Change: 2024 Mar 18
 " Former Maintainer: Charles E. Campbell
 " Base File URL:     http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Base File Version: 9.0-25
@@ -541,8 +541,9 @@ syn case match
 " User Function Highlighting: {{{2
 " (following Gautam Iyer's suggestion)
 " ==========================
-syn match vimFunc              "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("                contains=vimFuncName,vimUserFunc,vimExecute
-syn match vimUserFunc contained        "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"  contains=vimNotation
+syn match      vimFunc                 "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("                        contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
+syn match      vimUserFunc     contained               "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"  contains=vimNotation
+syn keyword    vimFuncEcho     contained       ec ech echo
 
 " User Command Highlighting: {{{2
 syn match vimUsrCmd    '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
@@ -678,7 +679,7 @@ if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
  syn match     vimHiCtermError contained       "\D\i*"
 endif
 syn match      vimHighlight    "\<hi\%[ghlight]\>"     skipwhite nextgroup=vimHiBang,@vimHighlightCluster
-syn match      vimHiBang       contained       "!"     skipwhite nextgroup=@vimHighlightCluster
+syn match      vimHiBang       contained       "\a\@1<=!"      skipwhite nextgroup=@vimHighlightCluster
 
 syn match      vimHiGroup      contained       "\i\+"
 syn case ignore
@@ -698,12 +699,12 @@ syn match vimHiGuiRgb     contained       "#\x\{6}"
 
 " Highlighting: hi group key=arg ... {{{2
 syn cluster    vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
-syn region     vimHiKeyList    contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"      contains=@vimHiCluster
+syn region     vimHiKeyList    contained       start="\i\+" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
  syn match     vimHiKeyError   contained       "\i\+="he=e-1
 endif
 syn match      vimHiTerm       contained       "\cterm="he=e-1         nextgroup=vimHiAttribList
-syn match      vimHiStartStop  contained       "\c\(start\|stop\)="he=e-1      nextgroup=vimHiTermcap,vimOption
+syn match      vimHiStartStop  contained       "\c\%(start\|stop\)="he=e-1     nextgroup=vimHiTermcap,vimOption
 syn match      vimHiCTerm      contained       "\ccterm="he=e-1                nextgroup=vimHiAttribList
 syn match      vimHiCtermFgBg  contained       "\ccterm[fb]g="he=e-1   nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
 syn match      vimHiCtermul    contained       "\cctermul="he=e-1      nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
@@ -715,12 +716,13 @@ syn match vimHiTermcap    contained       "\S\+"          contains=vimNotation
 syn match      vimHiNmbr       contained       '\d\+'
 
 " Highlight: clear {{{2
-syn keyword    vimHiClear      contained       clear   nextgroup=vimHiGroup
+syn keyword    vimHiClear      contained       clear   skipwhite nextgroup=vimGroup,vimHiGroup
 
 " Highlight: link {{{2
 " see tst24 (hi def vs hi) (Jul 06, 2018)
 "syn region    vimHiLink       contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"     contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
-syn region     vimHiLink       contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"     contains=@vimHiCluster
+" TODO: simplify and allow line continuations --djk
+syn region     vimHiLink       contained matchgroup=Type start="\%(\<hi\%[ghlight]!\=\s\+\)\@<=\%(\%(def\%[ault]\s\+\)\=link\>\|\<def\%[ault]\>\)" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
 
 " Control Characters: {{{2
 " ==================
@@ -992,8 +994,6 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimFBVar  vimVar
  hi def link vimFgBgAttrib     vimHiAttrib
  hi def link vimFuncEcho       vimCommand
- hi def link vimHiCtermul      vimHiTerm
- hi def link vimHiCtermfont    vimHiTerm
  hi def link vimFold   Folded
  hi def link vimFor    vimCommand
  hi def link vimFTCmd  vimCommand
@@ -1009,8 +1009,11 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimGroup  Type
  hi def link vimHiAttrib       PreProc
  hi def link vimHiBang vimBang
- hi def link vimHiClear        vimHighlight
+ hi def link vimHiClear        Type
+ hi def link vimHiCtermColor   Constant
  hi def link vimHiCtermFgBg    vimHiTerm
+ hi def link vimHiCtermfont    vimHiTerm
+ hi def link vimHiCtermul      vimHiTerm
  hi def link vimHiCTerm        vimHiTerm
  hi def link vimHighlight      vimCommand
  hi def link vimHiGroup        vimGroupName
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_00.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_00.dump
new file mode 100644 (file)
index 0000000..7b0f19f
--- /dev/null
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|h|i|g|h|l|i|g|h|t| |c|o|m@1|a|n|d| +0#0000000&@50
+@75
+|"+0#0000e05&| |l|i|s|t| +0#0000000&@68
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&@65
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@57
+@75
+|"+0#0000e05&| |r|e|s|e|t| +0#0000000&@67
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&@59
+@75
+|"+0#0000e05&| |d|i|s|a|b|l|e| +0#0000000&@65
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|c+0#00e0003&|l|e|a|r| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@51
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|N+0#00e0003&|O|N|E| +0#0000000&@52
+@75
+|"+0#0000e05&| |a|d@1|/|m|o|d|i|f|y| +0#0000000&@62
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|c+0#00e0003&|t|e|r|m|=+0#0000000&|u+0#e000e06&|n|d|e|r|l|i|n|e| +0#0000000&@41
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@39
+@75
+|"+0#0000e05&| |l|i|n|k| +0#0000000&@68
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|l+0#00e0003&|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@48
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_01.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_01.dump
new file mode 100644 (file)
index 0000000..95e478d
--- /dev/null
@@ -0,0 +1,20 @@
+|"+0#0000e05#ffffff0| |a|d@1|/|m|o|d|i|f|y| +0#0000000&@62
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|c+0#00e0003&|t|e|r|m|=+0#0000000&|u+0#e000e06&|n|d|e|r|l|i|n|e| +0#0000000&@41
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@39
+@75
+|"+0#0000e05&| |l|i|n|k| +0#0000000&@68
+>h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|l+0#00e0003&|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@48
+|h+0#af5f00255&|i|g|h|l|i|g|h|t|!| +0#0000000&|l+0#00e0003&|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@47
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|l+0#00e0003&|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|N+0#00e0003&|O|N|E| +0#0000000&@51
+|h+0#af5f00255&|i|g|h|l|i|g|h|t|!| +0#0000000&|l+0#00e0003&|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|N+0#00e0003&|O|N|E| +0#0000000&@50
+@75
+|"+0#0000e05&| |d|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@60
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@40
+|h+0#af5f00255&|i|g|h|l|i|g|h|t|!| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@39
+|h+0#af5f00255&|i|g|h|l|i|g|h|t| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|N+0#00e0003&|O|N|E| +0#0000000&@43
+|h+0#af5f00255&|i|g|h|l|i|g|h|t|!| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&|N+0#00e0003&|O|N|E| +0#0000000&@42
+@75
+@75
+|"+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n| |a|n|d| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r| +0#0000000&@33
+@75
+@57|1|9|,|1| @9|3|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_02.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_02.dump
new file mode 100644 (file)
index 0000000..38313aa
--- /dev/null
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@64
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@57
+@6|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@58
+@6>\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@58
+@75
+|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@64
+@6|\+0#e000e06&| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@45
+@75
+|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@5
+@75
+|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
+@57|3|7|,|7| @9|8|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump b/runtime/syntax/testdir/dumps/vim_ex_highlight_99.dump
new file mode 100644 (file)
index 0000000..dbd86d4
--- /dev/null
@@ -0,0 +1,20 @@
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@58
+@75
+|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@64
+@6|\+0#e000e06&| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@45
+@75
+|h+0#af5f00255&|i| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&|t+0#00e0003&|e|r|m|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&|c+0#00e0003&|t|e|r|m|f|g|=+0#0000000&|C+0#e000002&|y|a|n| +0#0000000&|g+0#00e0003&|u|i|f|g|=+0#0000000&|#+0#e000002&|8|0|a|0|f@1| +0#0000000&|g+0#00e0003&|u|i|=+0#0000000&|b+0#e000e06&|o|l|d| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@5
+@75
+|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
+@6|\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&@59
+@75
+|h+0#af5f00255&|i| +0#0000000&|d+0#00e0003&|e|f|a|u|l|t| |l|i|n|k| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@63
+@6>\+0#e000e06&| +0#0000000&|C+0#00e0003&|o|m@1|e|n|t| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+@57|5@1|,|7| @9|B|o|t| 
diff --git a/runtime/syntax/testdir/input/vim_ex_highlight.vim b/runtime/syntax/testdir/input/vim_ex_highlight.vim
new file mode 100644 (file)
index 0000000..e23968a
--- /dev/null
@@ -0,0 +1,55 @@
+" Vim :highlight command
+
+" list
+highlight
+highlight Comment
+
+" reset
+highlight clear
+
+" disable
+highlight clear Comment
+highlight Comment NONE
+
+" add/modify
+highlight Comment cterm=underline
+highlight default Comment term=bold
+
+" link
+highlight link Foo Comment
+highlight! link Foo Comment
+highlight link Foo NONE
+highlight! link Foo NONE
+
+" default link
+highlight default link Foo Comment
+highlight! default link Foo Comment
+highlight default link Foo NONE
+highlight! default link Foo NONE
+
+
+" line continuation and command separator
+
+hi Comment
+      "\ comment
+      \ term=bold
+      "\ comment
+      \ ctermfg=Cyan
+      \ guifg=#80a0ff
+      \ gui=bold
+
+hi Comment
+      \ term=bold
+      \ ctermfg=Cyan
+      \ guifg=#80a0ff
+      \ gui=bold | echo "Foo"
+
+hi Comment term=bold ctermfg=Cyan guifg=#80a0ff gui=bold | echo "Foo"
+
+hi default link
+      \ Foo
+      \ Comment
+
+hi default link
+      \ Foo
+      \ Comment | echo "Foo"
index ec617c762ee69b7f203d6310d2aedc4da5ed394d..95d55b99d00c9ecc0fec2fad6341ab8c72999d57 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:  Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "      Doug Kearns <dougkearns@gmail.com>
 " URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Mar 15
+" Last Change: 2024 Mar 18
 " Former Maintainer: Charles E. Campbell
 " Base File URL:     http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Base File Version: 9.0-25
@@ -589,7 +589,6 @@ syn match   vimFunc                 "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\
 syn match      vimUserFunc     contained               "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"  contains=vimNotation
 syn keyword    vimFuncEcho     contained       ec ech echo
 
-
 " User Command Highlighting: {{{2
 syn match vimUsrCmd    '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
 
@@ -724,7 +723,7 @@ if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
  syn match     vimHiCtermError contained       "\D\i*"
 endif
 syn match      vimHighlight    "\<hi\%[ghlight]\>"     skipwhite nextgroup=vimHiBang,@vimHighlightCluster
-syn match      vimHiBang       contained       "!"     skipwhite nextgroup=@vimHighlightCluster
+syn match      vimHiBang       contained       "\a\@1<=!"      skipwhite nextgroup=@vimHighlightCluster
 
 syn match      vimHiGroup      contained       "\i\+"
 syn case ignore
@@ -744,12 +743,12 @@ syn match vimHiGuiRgb     contained       "#\x\{6}"
 
 " Highlighting: hi group key=arg ... {{{2
 syn cluster    vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
-syn region     vimHiKeyList    contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"      contains=@vimHiCluster
+syn region     vimHiKeyList    contained       start="\i\+" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
  syn match     vimHiKeyError   contained       "\i\+="he=e-1
 endif
 syn match      vimHiTerm       contained       "\cterm="he=e-1         nextgroup=vimHiAttribList
-syn match      vimHiStartStop  contained       "\c\(start\|stop\)="he=e-1      nextgroup=vimHiTermcap,vimOption
+syn match      vimHiStartStop  contained       "\c\%(start\|stop\)="he=e-1     nextgroup=vimHiTermcap,vimOption
 syn match      vimHiCTerm      contained       "\ccterm="he=e-1                nextgroup=vimHiAttribList
 syn match      vimHiCtermFgBg  contained       "\ccterm[fb]g="he=e-1   nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
 syn match      vimHiCtermul    contained       "\cctermul="he=e-1      nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
@@ -761,12 +760,13 @@ syn match vimHiTermcap    contained       "\S\+"          contains=vimNotation
 syn match      vimHiNmbr       contained       '\d\+'
 
 " Highlight: clear {{{2
-syn keyword    vimHiClear      contained       clear   nextgroup=vimHiGroup
+syn keyword    vimHiClear      contained       clear   skipwhite nextgroup=vimGroup,vimHiGroup
 
 " Highlight: link {{{2
 " see tst24 (hi def vs hi) (Jul 06, 2018)
 "syn region    vimHiLink       contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"     contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
-syn region     vimHiLink       contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"     contains=@vimHiCluster
+" TODO: simplify and allow line continuations --djk
+syn region     vimHiLink       contained matchgroup=Type start="\%(\<hi\%[ghlight]!\=\s\+\)\@<=\%(\%(def\%[ault]\s\+\)\=link\>\|\<def\%[ault]\>\)" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
 
 " Control Characters: {{{2
 " ==================
@@ -1038,8 +1038,6 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimFBVar  vimVar
  hi def link vimFgBgAttrib     vimHiAttrib
  hi def link vimFuncEcho       vimCommand
- hi def link vimHiCtermul      vimHiTerm
- hi def link vimHiCtermfont    vimHiTerm
  hi def link vimFold   Folded
  hi def link vimFor    vimCommand
  hi def link vimFTCmd  vimCommand
@@ -1055,8 +1053,11 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimGroup  Type
  hi def link vimHiAttrib       PreProc
  hi def link vimHiBang vimBang
- hi def link vimHiClear        vimHighlight
+ hi def link vimHiClear        Type
+ hi def link vimHiCtermColor   Constant
  hi def link vimHiCtermFgBg    vimHiTerm
+ hi def link vimHiCtermfont    vimHiTerm
+ hi def link vimHiCtermul      vimHiTerm
  hi def link vimHiCTerm        vimHiTerm
  hi def link vimHighlight      vimCommand
  hi def link vimHiGroup        vimGroupName