runtime(vim): Update base-syntax, improve performance
Contain the vimNotation syntax group, matching this at top level is
unnecessary and very slow.
The removed vimString and vimNumber definitions are broken and/or never
match. They have long been replaced by newer definitions.
closes: #16645
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index d2ddd1c..009b208 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 Feb 13
+" Last Change: 2025 Feb 16
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -199,7 +199,6 @@
syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
-syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
@@ -360,7 +359,7 @@
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
@@ -630,7 +629,10 @@
syn match vimEnvvar "\$\I\i*"
syn match vimEnvvar "\${\I\i*}"
-" In-String Specials: {{{2
+" Strings {{{2
+" =======
+
+" In-String Specials:
" Try to catch strings, if nothing else matches (therefore it must precede the others!)
" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
@@ -643,8 +645,6 @@
syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
-syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
-syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
syn match vimEscape contained "\\."
" syn match vimEscape contained +\\[befnrt\"]+
@@ -685,9 +685,6 @@
syn match vimSubstDelim contained "\\"
syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
-" 'String': {{{2
-syn match vimString "[^(,]'[^']\{-}\zs'"
-
" Marks, Registers, Addresses, Filters: {{{2
syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
@@ -875,22 +872,22 @@
" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
" ======================
syn case ignore
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
-syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
-syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
+syn match vimNotation contained '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
+syn match vimNotation contained '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
syn match vimBracket contained "[\\<>]"
syn case match
@@ -916,7 +913,7 @@
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
-syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
+syn match vimNotFunc "\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>" skipwhite nextgroup=@vimExprList,vimNotation
" Match: {{{2
" =====
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_00.dump b/runtime/syntax/testdir/dumps/vim_key_notation_00.dump
index ed58e2f..ea37115 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_00.dump
@@ -1,20 +1,20 @@
>"+0#0000e05#ffffff0| |K|e|y| |n|o|t|a|t|i|o|n| +0#0000000&@60
@75
-|<+0#e000e06&|S|p|a|c|e|>| +0#0000000&@67
-|<+0#e000e06&|T|a|b|>| +0#0000000&@69
-|<+0#e000e06&|T|a|b|>| +0#0000000&@69
-|<+0#e000e06&|N|L|>| +0#0000000&@70
-|<+0#e000e06&|N|e|w|L|i|n|e|>| +0#0000000&@65
-|<+0#e000e06&|L|i|n|e|F|e@1|d|>| +0#0000000&@64
-|<+0#e000e06&|L|F|>| +0#0000000&@70
-|<+0#e000e06&|C|R|>| +0#0000000&@70
-|<+0#e000e06&|R|e|t|u|r|n|>| +0#0000000&@66
-|<+0#e000e06&|E|n|t|e|r|>| +0#0000000&@67
-|<+0#e000e06&|B|S|>| +0#0000000&@70
-|<+0#e000e06&|B|a|c|k|S|p|a|c|e|>| +0#0000000&@63
-|<+0#e000e06&|E|s|c|>| +0#0000000&@69
-|<+0#e000e06&|C|S|I|>| +0#0000000&@69
-|<+0#e000e06&|x|C|S|I|>| +0#0000000&@68
-|<+0#e000e06&|B|a|r|>| +0#0000000&@69
-|<+0#e000e06&|B|s|l|a|s|h|>| +0#0000000&@66
+|m+0#af5f00255&|a|p| +0#0000000&|f|o@1| @67
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|p|a|c|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|T|a|b|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|T|a|b|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|N|L|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|N|e|w|L|i|n|e|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|i|n|e|F|e@1|d|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|F|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|C|R|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|R|e|t|u|r|n|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|E|n|t|e|r|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|S|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|a|c|k|S|p|a|c|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|E|s|c|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|C|S|I|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|C|S|I|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|a|r|>| +0#0000000&@61
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_01.dump b/runtime/syntax/testdir/dumps/vim_key_notation_01.dump
index 0cbf0ee..b14d575 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_01.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|B|a|c|k|S|p|a|c|e|>| +0#0000000&@63
-|<+0#e000e06&|E|s|c|>| +0#0000000&@69
-|<+0#e000e06&|C|S|I|>| +0#0000000&@69
-|<+0#e000e06&|x|C|S|I|>| +0#0000000&@68
-|<+0#e000e06&|B|a|r|>| +0#0000000&@69
-><+0#e000e06&|B|s|l|a|s|h|>| +0#0000000&@66
-|<+0#e000e06&|D|e|l|>| +0#0000000&@69
-|<+0#e000e06&|D|e|l|e|t|e|>| +0#0000000&@66
-|<+0#e000e06&|k|D|e|l|>| +0#0000000&@68
-|<+0#e000e06&|U|p|>| +0#0000000&@70
-|<+0#e000e06&|D|o|w|n|>| +0#0000000&@68
-|<+0#e000e06&|L|e|f|t|>| +0#0000000&@68
-|<+0#e000e06&|R|i|g|h|t|>| +0#0000000&@67
-|<+0#e000e06&|x|U|p|>| +0#0000000&@69
-|<+0#e000e06&|x|D|o|w|n|>| +0#0000000&@67
-|<+0#e000e06&|x|L|e|f|t|>| +0#0000000&@67
-|<+0#e000e06&|x|R|i|g|h|t|>| +0#0000000&@66
-|<+0#e000e06&|P|a|s|t|e|S|t|a|r|t|>| +0#0000000&@62
-|<+0#e000e06&|P|a|s|t|e|E|n|d|>| +0#0000000&@64
-@57|1|9|,|1| @10|9|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|S|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|a|c|k|S|p|a|c|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|E|s|c|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|C|S|I|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|C|S|I|>| +0#0000000&@60
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|a|r|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|B|s|l|a|s|h|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|D|e|l|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|D|e|l|e|t|e|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|D|e|l|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|U|p|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|D|o|w|n|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|R|i|g|h|t|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|U|p|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|D|o|w|n|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|L|e|f|t|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|R|i|g|h|t|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|a|s|t|e|S|t|a|r|t|>| +0#0000000&@54
+@57|1|9|,|7| @10|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_02.dump b/runtime/syntax/testdir/dumps/vim_key_notation_02.dump
index 01fca78..5826a4e 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_02.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|P|a|s|t|e|E|n|d|>| +0#0000000&@64
-|<+0#e000e06&|F|1|>| +0#0000000&@70
-|<+0#e000e06&|F|2|>| +0#0000000&@70
-|<+0#e000e06&|F|3|>| +0#0000000&@70
-|<+0#e000e06&|F|4|>| +0#0000000&@70
-><+0#e000e06&|F|5|>| +0#0000000&@70
-|<+0#e000e06&|F|6|>| +0#0000000&@70
-|<+0#e000e06&|F|7|>| +0#0000000&@70
-|<+0#e000e06&|F|8|>| +0#0000000&@70
-|<+0#e000e06&|F|9|>| +0#0000000&@70
-|<+0#e000e06&|F|1|0|>| +0#0000000&@69
-|<+0#e000e06&|F|1@1|>| +0#0000000&@69
-|<+0#e000e06&|F|1|2|>| +0#0000000&@69
-|<+0#e000e06&|F|1|3|>| +0#0000000&@69
-|<+0#e000e06&|F|1|4|>| +0#0000000&@69
-|<+0#e000e06&|F|1|5|>| +0#0000000&@69
-|<+0#e000e06&|F|1|6|>| +0#0000000&@69
-|<+0#e000e06&|F|1|7|>| +0#0000000&@69
-|<+0#e000e06&|F|1|8|>| +0#0000000&@69
-@57|3|7|,|1| @9|2|1|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|a|s|t|e|S|t|a|r|t|>| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|a|s|t|e|E|n|d|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|>| +0#0000000&@62
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|4|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|5|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|6|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|7|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|8|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|9|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|0|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1@1|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|2|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|3|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|4|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|5|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|6|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|7|>| +0#0000000&@61
+@57|3|7|,|7| @9|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_03.dump b/runtime/syntax/testdir/dumps/vim_key_notation_03.dump
index dfdf890..ccb9f02 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_03.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|F|1|8|>| +0#0000000&@69
-|<+0#e000e06&|F|1|9|>| +0#0000000&@69
-|<+0#e000e06&|F|2|0|>| +0#0000000&@69
-|<+0#e000e06&|F|2|1|>| +0#0000000&@69
-|<+0#e000e06&|F|2@1|>| +0#0000000&@69
-><+0#e000e06&|F|2|3|>| +0#0000000&@69
-|<+0#e000e06&|F|2|4|>| +0#0000000&@69
-|<+0#e000e06&|F|2|5|>| +0#0000000&@69
-|<+0#e000e06&|F|2|6|>| +0#0000000&@69
-|<+0#e000e06&|F|2|7|>| +0#0000000&@69
-|<+0#e000e06&|F|2|8|>| +0#0000000&@69
-|<+0#e000e06&|F|2|9|>| +0#0000000&@69
-|<+0#e000e06&|F|3|0|>| +0#0000000&@69
-|<+0#e000e06&|F|3|1|>| +0#0000000&@69
-|<+0#e000e06&|F|3|2|>| +0#0000000&@69
-|<+0#e000e06&|F|3@1|>| +0#0000000&@69
-|<+0#e000e06&|F|3|4|>| +0#0000000&@69
-|<+0#e000e06&|F|3|5|>| +0#0000000&@69
-|<+0#e000e06&|F|3|6|>| +0#0000000&@69
-@57|5@1|,|1| @9|3|4|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|7|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|8|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|1|9|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|0|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|1|>| +0#0000000&@61
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2@1|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|3|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|4|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|5|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|6|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|7|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|8|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|2|9|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|0|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|1|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|2|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3@1|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|4|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|5|>| +0#0000000&@61
+@57|5@1|,|7| @9|3@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_04.dump b/runtime/syntax/testdir/dumps/vim_key_notation_04.dump
index 8820c26..d346187 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_04.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|F|3|6|>| +0#0000000&@69
-|<+0#e000e06&|F|3|7|>| +0#0000000&@69
-|<+0#e000e06&|x|F|1|>| +0#0000000&@69
-|<+0#e000e06&|x|F|2|>| +0#0000000&@69
-|<+0#e000e06&|x|F|3|>| +0#0000000&@69
-><+0#e000e06&|x|F|4|>| +0#0000000&@69
-|<+0#e000e06&|H|e|l|p|>| +0#0000000&@68
-|<+0#e000e06&|U|n|d|o|>| +0#0000000&@68
-|<+0#e000e06&|I|n|s|e|r|t|>| +0#0000000&@66
-|<+0#e000e06&|I|n|s|>| +0#0000000&@69
-|<+0#e000e06&|k|I|n|s|e|r|t|>| +0#0000000&@65
-|<+0#e000e06&|H|o|m|e|>| +0#0000000&@68
-|<+0#e000e06&|k|H|o|m|e|>| +0#0000000&@67
-|<+0#e000e06&|x|H|o|m|e|>| +0#0000000&@67
-|<+0#e000e06&|z|H|o|m|e|>| +0#0000000&@67
-|<+0#e000e06&|E|n|d|>| +0#0000000&@69
-|<+0#e000e06&|k|E|n|d|>| +0#0000000&@68
-|<+0#e000e06&|x|E|n|d|>| +0#0000000&@68
-|<+0#e000e06&|z|E|n|d|>| +0#0000000&@68
-@57|7|3|,|1| @9|4|6|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|5|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|6|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|3|7|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|F|1|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|F|2|>| +0#0000000&@61
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|F|3|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|F|4|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|H|e|l|p|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|U|n|d|o|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|I|n|s|e|r|t|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|I|n|s|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|I|n|s|e|r|t|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|H|o|m|e|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|H|o|m|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|H|o|m|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|z|H|o|m|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|E|n|d|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|E|n|d|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|E|n|d|>| +0#0000000&@60
+@57|7|3|,|7| @9|4|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_05.dump b/runtime/syntax/testdir/dumps/vim_key_notation_05.dump
index 939bf89..2962483 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_05.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|z|E|n|d|>| +0#0000000&@68
-|<+0#e000e06&|P|a|g|e|U|p|>| +0#0000000&@66
-|<+0#e000e06&|P|a|g|e|D|o|w|n|>| +0#0000000&@64
-|<+0#e000e06&|k|P|a|g|e|U|p|>| +0#0000000&@65
-|<+0#e000e06&|k|P|a|g|e|D|o|w|n|>| +0#0000000&@63
-><+0#e000e06&|k|P|l|u|s|>| +0#0000000&@67
-|<+0#e000e06&|k|M|i|n|u|s|>| +0#0000000&@66
-|<+0#e000e06&|k|D|i|v|i|d|e|>| +0#0000000&@65
-|<+0#e000e06&|k|M|u|l|t|i|p|l|y|>| +0#0000000&@63
-|<+0#e000e06&|k|E|n|t|e|r|>| +0#0000000&@66
-|<+0#e000e06&|k|P|o|i|n|t|>| +0#0000000&@66
-|<+0#e000e06&|k|0|>| +0#0000000&@70
-|<+0#e000e06&|k|1|>| +0#0000000&@70
-|<+0#e000e06&|k|2|>| +0#0000000&@70
-|<+0#e000e06&|k|3|>| +0#0000000&@70
-|<+0#e000e06&|k|4|>| +0#0000000&@70
-|<+0#e000e06&|k|5|>| +0#0000000&@70
-|<+0#e000e06&|k|6|>| +0#0000000&@70
-|<+0#e000e06&|k|7|>| +0#0000000&@70
-@57|9|1|,|1| @9|5|9|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|x|E|n|d|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|z|E|n|d|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|a|g|e|U|p|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|a|g|e|D|o|w|n|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|P|a|g|e|U|p|>| +0#0000000&@57
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|P|a|g|e|D|o|w|n|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|P|l|u|s|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|M|i|n|u|s|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|D|i|v|i|d|e|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|M|u|l|t|i|p|l|y|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|E|n|t|e|r|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|P|o|i|n|t|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|0|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|1|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|2|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|3|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|4|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|5|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|6|>| +0#0000000&@62
+@57|9|1|,|7| @9|5|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_06.dump b/runtime/syntax/testdir/dumps/vim_key_notation_06.dump
index e82c7f3..66a80f2 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_06.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|k|7|>| +0#0000000&@70
-|<+0#e000e06&|k|8|>| +0#0000000&@70
-|<+0#e000e06&|k|9|>| +0#0000000&@70
-|<+0#e000e06&|l|t|>| +0#0000000&@70
-|<+0#e000e06&|M|o|u|s|e|>| +0#0000000&@67
-><+0#e000e06&|N|e|t|M|o|u|s|e|>| +0#0000000&@64
-|<+0#e000e06&|D|e|c|M|o|u|s|e|>| +0#0000000&@64
-|<+0#e000e06&|J|s|b|M|o|u|s|e|>| +0#0000000&@64
-|<+0#e000e06&|P|t|e|r|m|M|o|u|s|e|>| +0#0000000&@62
-|<+0#e000e06&|U|r|x|v|t|M|o|u|s|e|>| +0#0000000&@62
-|<+0#e000e06&|S|g|r|M|o|u|s|e|>| +0#0000000&@64
-|<+0#e000e06&|S|g|r|M|o|u|s|e|R|e|l|e|a|s|e|>| +0#0000000&@57
-|<+0#e000e06&|L|e|f|t|M|o|u|s|e|>| +0#0000000&@63
-|<+0#e000e06&|L|e|f|t|M|o|u|s|e|N|M|>| +0#0000000&@61
-|<+0#e000e06&|L|e|f|t|D|r|a|g|>| +0#0000000&@64
-|<+0#e000e06&|L|e|f|t|R|e|l|e|a|s|e|>| +0#0000000&@61
-|<+0#e000e06&|L|e|f|t|R|e|l|e|a|s|e|N|M|>| +0#0000000&@59
-|<+0#e000e06&|M|o|u|s|e|M|o|v|e|>| +0#0000000&@63
-|<+0#e000e06&|M|i|d@1|l|e|M|o|u|s|e|>| +0#0000000&@61
-@57|1|0|9|,|1| @8|7|1|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|6|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|7|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|8|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|k|9|>| +0#0000000&@62
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|l|t|>| +0#0000000&@62
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|o|u|s|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|N|e|t|M|o|u|s|e|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|D|e|c|M|o|u|s|e|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|J|s|b|M|o|u|s|e|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|t|e|r|m|M|o|u|s|e|>| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|U|r|x|v|t|M|o|u|s|e|>| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|g|r|M|o|u|s|e|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|g|r|M|o|u|s|e|R|e|l|e|a|s|e|>| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|M|o|u|s|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|M|o|u|s|e|N|M|>| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|D|r|a|g|>| +0#0000000&@56
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|R|e|l|e|a|s|e|>| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|L|e|f|t|R|e|l|e|a|s|e|N|M|>| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|o|u|s|e|M|o|v|e|>| +0#0000000&@55
+@57|1|0|9|,|7| @8|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_07.dump b/runtime/syntax/testdir/dumps/vim_key_notation_07.dump
index 3e21774..a05017e 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_07.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|M|i|d@1|l|e|M|o|u|s|e|>| +0#0000000&@61
-|<+0#e000e06&|M|i|d@1|l|e|D|r|a|g|>| +0#0000000&@62
-|<+0#e000e06&|M|i|d@1|l|e|R|e|l|e|a|s|e|>| +0#0000000&@59
-|<+0#e000e06&|R|i|g|h|t|M|o|u|s|e|>| +0#0000000&@62
-|<+0#e000e06&|R|i|g|h|t|D|r|a|g|>| +0#0000000&@63
-><+0#e000e06&|R|i|g|h|t|R|e|l|e|a|s|e|>| +0#0000000&@60
-|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|U|p|>| +0#0000000&@59
-|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|D|o|w|n|>| +0#0000000&@57
-|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|R|i|g|h|t|>| +0#0000000&@56
-|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|L|e|f|t|>| +0#0000000&@57
-|<+0#e000e06&|M|o|u|s|e|D|o|w|n|>| +0#0000000&@63
-|<+0#e000e06&|M|o|u|s|e|U|p|>| +0#0000000&@65
-|<+0#e000e06&|X|1|M|o|u|s|e|>| +0#0000000&@65
-|<+0#e000e06&|X|1|D|r|a|g|>| +0#0000000&@66
-|<+0#e000e06&|X|1|R|e|l|e|a|s|e|>| +0#0000000&@63
-|<+0#e000e06&|X|2|M|o|u|s|e|>| +0#0000000&@65
-|<+0#e000e06&|X|2|D|r|a|g|>| +0#0000000&@66
-|<+0#e000e06&|X|2|R|e|l|e|a|s|e|>| +0#0000000&@63
-|<+0#e000e06&|D|r|o|p|>| +0#0000000&@68
-@57|1|2|7|,|1| @8|8|4|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|o|u|s|e|M|o|v|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|i|d@1|l|e|M|o|u|s|e|>| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|i|d@1|l|e|D|r|a|g|>| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|i|d@1|l|e|R|e|l|e|a|s|e|>| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|R|i|g|h|t|M|o|u|s|e|>| +0#0000000&@54
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|R|i|g|h|t|D|r|a|g|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|R|i|g|h|t|R|e|l|e|a|s|e|>| +0#0000000&@52
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|U|p|>| +0#0000000&@51
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|D|o|w|n|>| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|R|i|g|h|t|>| +0#0000000&@48
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|c|r|o|l@1|W|h|e@1|l|L|e|f|t|>| +0#0000000&@49
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|o|u|s|e|D|o|w|n|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|M|o|u|s|e|U|p|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|1|M|o|u|s|e|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|1|D|r|a|g|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|1|R|e|l|e|a|s|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|2|M|o|u|s|e|>| +0#0000000&@57
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|2|D|r|a|g|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|2|R|e|l|e|a|s|e|>| +0#0000000&@55
+@57|1|2|7|,|7| @8|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_08.dump b/runtime/syntax/testdir/dumps/vim_key_notation_08.dump
index 7337575..37db049 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_08.dump
@@ -1,20 +1,20 @@
-|<+0#e000e06#ffffff0|D|r|o|p|>| +0#0000000&@68
-|<+0#e000e06&|N|u|l|>| +0#0000000&@69
-|<+0#e000e06&|S|N|R|>| +0#0000000&@69
-|<+0#e000e06&|P|l|u|g|>| +0#0000000&@68
-|<+0#e000e06&|C|u|r|s|o|r|H|o|l|d|>| +0#0000000&@62
-><+0#e000e06&|I|g|n|o|r|e|>| +0#0000000&@66
-|<+0#e000e06&|C|m|d|>| +0#0000000&@69
-|<+0#e000e06&|S|c|r|i|p|t|C|m|d|>| +0#0000000&@63
-|<+0#e000e06&|F|o|c|u|s|G|a|i|n|e|d|>| +0#0000000&@61
-|<+0#e000e06&|F|o|c|u|s|L|o|s|t|>| +0#0000000&@63
-@75
-|<+0#e000e06&|c|w|o|r|d|>| +0#0000000&@67
-|<+0#e000e06&|c|W|O|R|D|>| +0#0000000&@67
-|<+0#e000e06&|c|e|x|p|r|>| +0#0000000&@67
-|<+0#e000e06&|c|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|a|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|a|b|u|f|>| +0#0000000&@68
-|<+0#e000e06&|a|m|a|t|c|h|>| +0#0000000&@66
-|<+0#e000e06&|s|f|i|l|e|>| +0#0000000&@67
-@57|1|4|5|,|1| @8|9|6|%|
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|X|2|R|e|l|e|a|s|e|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|D|r|o|p|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|N|u|l|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|N|R|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|P|l|u|g|>| +0#0000000&@60
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|C|u|r|s|o|r|H|o|l|d|>| +0#0000000&@54
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|I|g|n|o|r|e|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|C|m|d|>| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|S|c|r|i|p|t|C|m|d|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|o|c|u|s|G|a|i|n|e|d|>| +0#0000000&@53
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|F|o|c|u|s|L|o|s|t|>| +0#0000000&@55
+@6|\+0#e000e06&| +0#0000000&@67
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|c|w|o|r|d|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|c|W|O|R|D|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|c|e|x|p|r|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|c|f|i|l|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|a|f|i|l|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|a|b|u|f|>| +0#0000000&@60
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|a|m|a|t|c|h|>| +0#0000000&@58
+@57|1|4|5|,|7| @8|9|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_key_notation_09.dump b/runtime/syntax/testdir/dumps/vim_key_notation_09.dump
index d7fc77d..d9adc7b 100644
--- a/runtime/syntax/testdir/dumps/vim_key_notation_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_key_notation_09.dump
@@ -1,9 +1,11 @@
-|<+0#e000e06#ffffff0|s|f|i|l|e|>| +0#0000000&@67
-|<+0#e000e06&|s|t|a|c|k|>| +0#0000000&@67
-|<+0#e000e06&|s|c|r|i|p|t|>| +0#0000000&@66
-|<+0#e000e06&|s|l|n|u|m|>| +0#0000000&@67
-|<+0#e000e06&|s|f|l|n|u|m|>| +0#0000000&@66
-><+0#e000e06&|c|l|i|e|n|t|>| +0#0000000&@66
+| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|<+0#e000e06&|a|m|a|t|c|h|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|s|f|i|l|e|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|s|t|a|c|k|>| +0#0000000&@59
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|s|c|r|i|p|t|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|s|l|n|u|m|>| +0#0000000&@59
+@6>\+0#e000e06&| +0#0000000&|<+0#e000e06&|s|f|l|n|u|m|>| +0#0000000&@58
+@6|\+0#e000e06&| +0#0000000&|<+0#e000e06&|c|l|i|e|n|t|>| +0#0000000&@58
+@75
|~+0#4040ff13&| @73
|~| @73
|~| @73
@@ -15,6 +17,4 @@
|~| @73
|~| @73
|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|6|3|,|1| @8|B|o|t|
+| +0#0000000&@56|1|6|3|,|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/input/vim_key_notation.vim b/runtime/syntax/testdir/input/vim_key_notation.vim
index 8bc128a..8572499 100644
--- a/runtime/syntax/testdir/input/vim_key_notation.vim
+++ b/runtime/syntax/testdir/input/vim_key_notation.vim
@@ -1,163 +1,165 @@
" Key notation
-<Space>
-<Tab>
-<Tab>
-<NL>
-<NewLine>
-<LineFeed>
-<LF>
-<CR>
-<Return>
-<Enter>
-<BS>
-<BackSpace>
-<Esc>
-<CSI>
-<xCSI>
-<Bar>
-<Bslash>
-<Del>
-<Delete>
-<kDel>
-<Up>
-<Down>
-<Left>
-<Right>
-<xUp>
-<xDown>
-<xLeft>
-<xRight>
-<PasteStart>
-<PasteEnd>
-<F1>
-<F2>
-<F3>
-<F4>
-<F5>
-<F6>
-<F7>
-<F8>
-<F9>
-<F10>
-<F11>
-<F12>
-<F13>
-<F14>
-<F15>
-<F16>
-<F17>
-<F18>
-<F19>
-<F20>
-<F21>
-<F22>
-<F23>
-<F24>
-<F25>
-<F26>
-<F27>
-<F28>
-<F29>
-<F30>
-<F31>
-<F32>
-<F33>
-<F34>
-<F35>
-<F36>
-<F37>
-<xF1>
-<xF2>
-<xF3>
-<xF4>
-<Help>
-<Undo>
-<Insert>
-<Ins>
-<kInsert>
-<Home>
-<kHome>
-<xHome>
-<zHome>
-<End>
-<kEnd>
-<xEnd>
-<zEnd>
-<PageUp>
-<PageDown>
-<kPageUp>
-<kPageDown>
-<kPlus>
-<kMinus>
-<kDivide>
-<kMultiply>
-<kEnter>
-<kPoint>
-<k0>
-<k1>
-<k2>
-<k3>
-<k4>
-<k5>
-<k6>
-<k7>
-<k8>
-<k9>
-<lt>
-<Mouse>
-<NetMouse>
-<DecMouse>
-<JsbMouse>
-<PtermMouse>
-<UrxvtMouse>
-<SgrMouse>
-<SgrMouseRelease>
-<LeftMouse>
-<LeftMouseNM>
-<LeftDrag>
-<LeftRelease>
-<LeftReleaseNM>
-<MouseMove>
-<MiddleMouse>
-<MiddleDrag>
-<MiddleRelease>
-<RightMouse>
-<RightDrag>
-<RightRelease>
-<ScrollWheelUp>
-<ScrollWheelDown>
-<ScrollWheelRight>
-<ScrollWheelLeft>
-<MouseDown>
-<MouseUp>
-<X1Mouse>
-<X1Drag>
-<X1Release>
-<X2Mouse>
-<X2Drag>
-<X2Release>
-<Drop>
-<Nul>
-<SNR>
-<Plug>
-<CursorHold>
-<Ignore>
-<Cmd>
-<ScriptCmd>
-<FocusGained>
-<FocusLost>
+map foo
+ \ <Space>
+ \ <Tab>
+ \ <Tab>
+ \ <NL>
+ \ <NewLine>
+ \ <LineFeed>
+ \ <LF>
+ \ <CR>
+ \ <Return>
+ \ <Enter>
+ \ <BS>
+ \ <BackSpace>
+ \ <Esc>
+ \ <CSI>
+ \ <xCSI>
+ \ <Bar>
+ \ <Bslash>
+ \ <Del>
+ \ <Delete>
+ \ <kDel>
+ \ <Up>
+ \ <Down>
+ \ <Left>
+ \ <Right>
+ \ <xUp>
+ \ <xDown>
+ \ <xLeft>
+ \ <xRight>
+ \ <PasteStart>
+ \ <PasteEnd>
+ \ <F1>
+ \ <F2>
+ \ <F3>
+ \ <F4>
+ \ <F5>
+ \ <F6>
+ \ <F7>
+ \ <F8>
+ \ <F9>
+ \ <F10>
+ \ <F11>
+ \ <F12>
+ \ <F13>
+ \ <F14>
+ \ <F15>
+ \ <F16>
+ \ <F17>
+ \ <F18>
+ \ <F19>
+ \ <F20>
+ \ <F21>
+ \ <F22>
+ \ <F23>
+ \ <F24>
+ \ <F25>
+ \ <F26>
+ \ <F27>
+ \ <F28>
+ \ <F29>
+ \ <F30>
+ \ <F31>
+ \ <F32>
+ \ <F33>
+ \ <F34>
+ \ <F35>
+ \ <F36>
+ \ <F37>
+ \ <xF1>
+ \ <xF2>
+ \ <xF3>
+ \ <xF4>
+ \ <Help>
+ \ <Undo>
+ \ <Insert>
+ \ <Ins>
+ \ <kInsert>
+ \ <Home>
+ \ <kHome>
+ \ <xHome>
+ \ <zHome>
+ \ <End>
+ \ <kEnd>
+ \ <xEnd>
+ \ <zEnd>
+ \ <PageUp>
+ \ <PageDown>
+ \ <kPageUp>
+ \ <kPageDown>
+ \ <kPlus>
+ \ <kMinus>
+ \ <kDivide>
+ \ <kMultiply>
+ \ <kEnter>
+ \ <kPoint>
+ \ <k0>
+ \ <k1>
+ \ <k2>
+ \ <k3>
+ \ <k4>
+ \ <k5>
+ \ <k6>
+ \ <k7>
+ \ <k8>
+ \ <k9>
+ \ <lt>
+ \ <Mouse>
+ \ <NetMouse>
+ \ <DecMouse>
+ \ <JsbMouse>
+ \ <PtermMouse>
+ \ <UrxvtMouse>
+ \ <SgrMouse>
+ \ <SgrMouseRelease>
+ \ <LeftMouse>
+ \ <LeftMouseNM>
+ \ <LeftDrag>
+ \ <LeftRelease>
+ \ <LeftReleaseNM>
+ \ <MouseMove>
+ \ <MiddleMouse>
+ \ <MiddleDrag>
+ \ <MiddleRelease>
+ \ <RightMouse>
+ \ <RightDrag>
+ \ <RightRelease>
+ \ <ScrollWheelUp>
+ \ <ScrollWheelDown>
+ \ <ScrollWheelRight>
+ \ <ScrollWheelLeft>
+ \ <MouseDown>
+ \ <MouseUp>
+ \ <X1Mouse>
+ \ <X1Drag>
+ \ <X1Release>
+ \ <X2Mouse>
+ \ <X2Drag>
+ \ <X2Release>
+ \ <Drop>
+ \ <Nul>
+ \ <SNR>
+ \ <Plug>
+ \ <CursorHold>
+ \ <Ignore>
+ \ <Cmd>
+ \ <ScriptCmd>
+ \ <FocusGained>
+ \ <FocusLost>
+ \
+ \ <cword>
+ \ <cWORD>
+ \ <cexpr>
+ \ <cfile>
+ \ <afile>
+ \ <abuf>
+ \ <amatch>
+ \ <sfile>
+ \ <stack>
+ \ <script>
+ \ <slnum>
+ \ <sflnum>
+ \ <client>
-<cword>
-<cWORD>
-<cexpr>
-<cfile>
-<afile>
-<abuf>
-<amatch>
-<sfile>
-<stack>
-<script>
-<slnum>
-<sflnum>
-<client>
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 8bb91e3..7047373 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 Feb 13
+" Last Change: 2025 Feb 16
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -237,7 +237,6 @@
syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
-syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
@@ -398,7 +397,7 @@
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
@@ -670,7 +669,10 @@
syn match vimEnvvar "\$\I\i*"
syn match vimEnvvar "\${\I\i*}"
-" In-String Specials: {{{2
+" Strings {{{2
+" =======
+
+" In-String Specials:
" Try to catch strings, if nothing else matches (therefore it must precede the others!)
" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
@@ -683,8 +685,6 @@
syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
-syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
-syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
syn match vimEscape contained "\\."
" syn match vimEscape contained +\\[befnrt\"]+
@@ -725,9 +725,6 @@
syn match vimSubstDelim contained "\\"
syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
-" 'String': {{{2
-syn match vimString "[^(,]'[^']\{-}\zs'"
-
" Marks, Registers, Addresses, Filters: {{{2
syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
@@ -921,22 +918,22 @@
" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
" ======================
syn case ignore
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
-syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
-syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
-syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
+syn match vimNotation contained '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
+syn match vimNotation contained '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
+syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
syn match vimBracket contained "[\\<>]"
syn case match
@@ -962,7 +959,7 @@
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
-syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
+syn match vimNotFunc "\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>" skipwhite nextgroup=@vimExprList,vimNotation
" Match: {{{2
" =====