runtime(vim): Update base-syntax, improve function definition matching
- Fix highlighting of function names including /fu\%[nction]/ (E.g.,
s:func(), foo.fu(), fu.func())
- Match :delfunction argument.
Reported by Aliaksei Budavei.
closes: #17428
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim
index e42897f..3a77637 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 Jun 01
+" Last Change: 2025 Jun 11
let s:keepcpo= &cpo
set cpo&vim
@@ -265,6 +265,7 @@
debuggreedy
def
delcommand
+ delfunction
doautoall
doautocmd
echo
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index b94c5be..dbe2ab6 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 Jun 08
+" Last Change: 2025 Jun 11
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -233,7 +233,7 @@
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -424,7 +424,7 @@
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="}" end="$"
\ contains=@vimContinue,@vimExprList,vimLambdaParams
-syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFuncParam
+syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFunctionParam
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParen contained "[()]"
@@ -439,56 +439,98 @@
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
" =========
-syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
+syn cluster vimFunctionBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
+syn cluster vimFunctionBodyList contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
+syn cluster vimDefBodyList contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,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
-
-syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
-syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
-syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
-
-syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
-syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
-
-syn region vimFuncComment contained
- \ start=+".*+
- \ skip=+\n\s*\\\|\n\s*"\\ +
+syn region vimFunctionPattern contained
+ \ matchgroup=vimOper
+ \ start="/"
\ end="$"
- \ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
+ \ contains=@vimSubstList
+
+syn match vimFunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
+syn match vimDefBang contained "\a\@1<=!" skipwhite nextgroup=vimDefName
+syn match vimFunctionSID contained "\c<sid>"
+syn match vimFunctionScope contained "\<[bwglstav]:"
+syn match vimFunctionName contained
+ \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
+ \ skipwhite nextgroup=vimFunctionParams,vimCmdSep,vimComment,vim9Comment
+ \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
+syn match vimDefName contained
+ \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
+ \ nextgroup=vimDefParams,vimCmdSep,vimComment,vim9Comment
+ \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
+
+syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment
+syn match vimDef "\<def\>" skipwhite nextgroup=vimDefBang,vimDefName,vimFunctionPattern,vimCmdSep,vimComment
+
+syn region vimFunctionComment contained
+ \ start=+".*+
+ \ skip=+\n\s*\%(\\\|"\\ \)+
+ \ end="$"
+ \ skipwhite skipempty nextgroup=vimFunctionBody,vimEndfunction
syn region vimDefComment contained
\ start="#.*"
- \ skip=+\n\s*\\\|\n\s*#\\ +
+ \ skip=+\n\s*\%(\\\|#\\ \)+
\ end="$"
\ skipwhite skipempty nextgroup=vimDefBody,vimEnddef
-syn match vimFuncBang contained "!"
-syn match vimFuncSID contained "\c<sid>"
-syn match vimFuncScope contained "\<[sg]:"
-syn keyword vimFuncKey contained fu[nction]
-syn keyword vimDefKey contained def
+syn region vimFunctionParams contained
+ \ matchgroup=Delimiter
+ \ start="("
+ \ skip=+\n\s*\%(\\\|"\\ \)+
+ \ end=")"
+ \ skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
+ \ contains=vimFunctionParam,vimOperParen,@vimContinue
+syn region vimDefParams contained
+ \ matchgroup=Delimiter
+ \ start="("
+ \ end=")"
+ \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals,vimOperParen
+syn match vimFunctionParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFunctionParamEquals
+syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFunctionParamEquals
-syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
-syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals,vimOperParen
-syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
-syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
+syn match vimFunctionParamEquals contained "=" skipwhite nextgroup=@vimExprList
+syn match vimFunctionMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
-syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
-syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
+syn region vimFunctionBody contained
+ \ start="^."
+ \ matchgroup=vimCommand
+ \ end="\<endfu\%[nction]\>"
+ \ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+ \ contains=@vimFunctionBodyList
+syn region vimDefBody contained
+ \ start="^."
+ \ matchgroup=vimCommand
+ \ end="\<enddef\>"
+ \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
+ \ contains=@vimDefBodyList
-syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
-syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
-
-syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
-syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
+syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
- syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
- syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
+ syn region vimFunctionFold
+ \ start="\<fu\%[nction]!"
+ "\ assume no dict literal in curly-brace name expressions
+ \ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*("
+ \ end="^\s*:\=\s*endf\%[unction]\>"
+ \ contains=vimFunction
+ \ extend fold keepend transparent
+ syn region vimDefFold
+ \ start="\<def!"
+ "\ assume no dict literal in curly-brace name expressions
+ \ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+("
+ \ end="^\s*:\=\s*enddef\>"
+ \ contains=vimDef
+ \ extend fold keepend transparent
endif
+syn match vimDelfunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
+syn match vimDelfunction "\<delf\%[unction]\>" skipwhite nextgroup=vimDelfunctionBang,vimFunctionName
+
" Types: {{{2
" =====
@@ -525,18 +567,18 @@
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
- \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn match vim9ConstructorDefName contained "\<_\=new\w*\>"
\ nextgroup=vim9ConstructorDefParams
\ contains=@vim9MethodName
syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
- \ skipwhite nextgroup=vimParamType,vimFuncParamEquals
+ \ skipwhite nextgroup=vimParamType,vimFunctionParamEquals
\ contains=vim9This,vimOper
syn region vim9ConstructorDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError
- \ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vim9ConstructorDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9MethodDefReturnType contained
\ start=":\%(\s\|\n\)\@="
@@ -655,7 +697,7 @@
syn region vim9AbstractDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
- \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9AbstractDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
@@ -751,7 +793,7 @@
" 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
+syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFunctionSID
" 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
@@ -1378,8 +1420,8 @@
" Errors And Warnings: {{{2
" ====================
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
- syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
- syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
+ syn match vimFunctionError contained "[[:space:]!]\@1<=\<[a-z0-9]\w\{-}\ze\s*("
+ syn match vimFunctionError contained "\%(<[sS][iI][dD]>\|[sg]:\)\d\w\{-}\ze\s*("
syn match vimElseIfErr "\<else\s\+if\>"
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
@@ -1486,7 +1528,7 @@
endif
syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
-syn cluster vimFuncBodyList add=vimSyntax
+syn cluster vimFunctionBodyList add=vimSyntax
" Syntax: case {{{2
syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
@@ -2112,11 +2154,14 @@
hi def link vimCount Number
hi def link vimCtrlChar SpecialChar
hi def link vimDebuggreedy vimCommand
+ hi def link vimDef vimCommand
+ hi def link vimDefBang vimBang
hi def link vimDefComment vim9Comment
- hi def link vimDefKey vimCommand
hi def link vimDefParam vimVar
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
+ hi def link vimDelfunction vimCommand
+ hi def link vimDelfunctionBang vimBang
hi def link vimDoautocmd vimCommand
hi def link vimDoautocmdMod Special
hi def link vimEcho vimCommand
@@ -2141,15 +2186,15 @@
hi def link vimForInContinueComment vimContinueComment
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
- hi def link vimFuncBang vimBang
- hi def link vimFuncComment vimComment
- hi def link vimFuncKey vimCommand
+ hi def link vimFunction vimCommand
+ hi def link vimFunctionBang vimBang
+ hi def link vimFunctionComment vimComment
hi def link vimFuncName Function
- hi def link vimFuncMod Special
- hi def link vimFuncParam vimVar
- hi def link vimFuncParamEquals vimOper
- hi def link vimFuncScope vimVarScope
- hi def link vimFuncSID vimNotation
+ hi def link vimFunctionMod Special
+ hi def link vimFunctionParam vimVar
+ hi def link vimFunctionParamEquals vimOper
+ hi def link vimFunctionScope vimVarScope
+ hi def link vimFunctionSID vimNotation
hi def link vimGrep vimCommand
hi def link vimGrepadd vimCommand
hi def link vimGrepBang vimBang
@@ -2200,7 +2245,7 @@
hi def link vimMapBang vimBang
hi def link vimMapLeader vimBracket
hi def link vimMapLeaderKey vimNotation
- hi def link vimMapModKey vimFuncSID
+ hi def link vimMapModKey vimFunctionSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number
diff --git a/runtime/syntax/testdir/dumps/vim_ex_delfunction_00.dump b/runtime/syntax/testdir/dumps/vim_ex_delfunction_00.dump
new file mode 100644
index 0000000..8eb82e7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_delfunction_00.dump
@@ -0,0 +1,20 @@
+>"+0#0000e05#ffffff0| |V|i|m| |:|d|e|l|f|u|n|c|t|i|o|n| |c|o|m@1|a|n|d| +0#0000000&@48
+@75
+@75
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|<+0#e000e06&|S|I|D|>|F+0#0000000&|o@1| @54
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.|b|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @53
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|s+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @53
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r| @55
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|#|b|a|r| @53
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r|.|b|a|z| @51
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|#|b|a|r|.|b|a|z| @49
+@75
+@75
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|<+0#e000e06&|S|I|D|>|F+0#0000000&|o@1| @53
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|f|o@1|.|b|a|r| @54
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @52
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|s+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @52
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_delfunction_01.dump b/runtime/syntax/testdir/dumps/vim_ex_delfunction_01.dump
new file mode 100644
index 0000000..2b8b90e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_delfunction_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|<+0#e000e06&|S|I|D|>|F+0#0000000&|o@1| @53
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|f|o@1|.|b|a|r| @54
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @52
+>d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|s+0#00e0e07&|:|f+0#0000000&|o@1|.|b|a|r| @52
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|f|o@1|#|b|a|r| @54
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|#|b|a|r| @52
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|f|o@1|#|b|a|r|.|b|a|z| @50
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1|#|b|a|r|.|b|a|z| @48
+@75
+@75
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| ||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@46
+|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| |"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|7|4|2|0|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|9|2|7@1|9|8|6|8|7| +0#0000000&@5
+|"+0#0000e05&| |(|a|r|g| |n|a|m|e|d| |/|f|u|%|\|[|n|c|t|i|o|n|]|/|)| +0#0000000&@46
+|| @73
+@57|1|9|,|1| @9|8|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_delfunction_02.dump b/runtime/syntax/testdir/dumps/vim_ex_delfunction_02.dump
new file mode 100644
index 0000000..203e37f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_delfunction_02.dump
@@ -0,0 +1,20 @@
+|+0&#ffffff0| @73
+|s+0#af5f00255&|i|l|e|n|t|!| +0#0000000&|d+0#af5f00255&|e|l|f|u|n|c|!| +0#0000000&|f|u|n|c| @53
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|4|,|0|-|1| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_01.dump b/runtime/syntax/testdir/dumps/vim_ex_function_01.dump
index a14e929..1523d74 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_01.dump
@@ -17,4 +17,4 @@
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|{|"|F|"|}|o|{|"|o|"|}|(+0#e000e06&|)| +0#0000000&@52
-@57|1|9|,|1| @10|6|%|
+@57|1|9|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_02.dump
index e4b5d6a..ebe59a8 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_02.dump
@@ -17,4 +17,4 @@
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@57|3|7|,|0|-|1| @7|1|4|%|
+@57|3|7|,|0|-|1| @7|1|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_03.dump b/runtime/syntax/testdir/dumps/vim_ex_function_03.dump
index 94e2ea1..09c3a54 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_03.dump
@@ -15,6 +15,6 @@
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@52
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|b+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-@57|5@1|,|1| @9|2|3|%|
+@57|5@1|,|1| @9|1|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_04.dump b/runtime/syntax/testdir/dumps/vim_ex_function_04.dump
index 2dbc75b..9e49064 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_04.dump
@@ -1,20 +1,20 @@
| +0&#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|l+0#0000000&|s|(+0#e000e06&|)| +0#0000000&@59
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|w+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
>e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@75
-|"+0#0000e05&| |m|o|d|i|f|i|e|r|s| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@54
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@44
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@54
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|t+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@57|7|3|,|1| @9|3|1|%|
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|g+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@57|7|3|,|1| @9|2|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_05.dump b/runtime/syntax/testdir/dumps/vim_ex_function_05.dump
index 94f265a..2b726b3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_05.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@54
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-> @74
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@55
+| +0&#ffffff0@74
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|v+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@53
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@52
+>f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&@57
+@2|l+0#af5f00255&|e|t| +0#0000000&|l+0#00e0e07&|:|d|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@57
+@2|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|l+0#e000e06&|:|d+0#0000000&|i|c|t|.|B|A|R|(+0#e000e06&|)| +0#0000000&@51
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+@2|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+@2|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|a+0#e000e06&|:|a+0#0000000&|r|g|.|B|A|R|(+0#e000e06&|)| +0#0000000&@52
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+@2|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@52
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@35
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@53
-@57|9|1|,|0|-|1| @7|4|0|%|
+@57|9|1|,|1| @9|3|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_06.dump b/runtime/syntax/testdir/dumps/vim_ex_function_06.dump
index f771e63..ad75d36 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_06.dump
@@ -1,20 +1,20 @@
-|f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@53
+| +0&#ffffff0@74
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|g+0#e000e06&|:|f+0#0000000&|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@50
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@53
-@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+>"+0#0000e05&| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@46
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|l+0#0000000&|s|(+0#e000e06&|)| +0#0000000&@59
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@54
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+@75
+|"+0#0000e05&| |m|o|d|i|f|i|e|r|s| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@54
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@51
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@44
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@34
-@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@57|1|0|9|,|3| @8|4|9|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@54
+@57|1|0|9|,|1| @8|4|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_07.dump b/runtime/syntax/testdir/dumps/vim_ex_function_07.dump
index 325c943..5b68b92 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_07.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-@75
-|"+0#0000e05&| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@51
-@75
->f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+|f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@54
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-@2|"+0#0000e05&| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@51
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@54
+@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@55
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@52
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@75
-@57|1|2|7|,|1| @8|5|7|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@35
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@57|1|2|7|,|3| @8|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_08.dump b/runtime/syntax/testdir/dumps/vim_ex_function_08.dump
index 9239196..e49c5ff 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_08.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
+|e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|,+0#0000000&| |z+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@48
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@53
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
->e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
-@6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64
-@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64
-@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|,+0#0000000&| @64
-@6|\+0#e000e06&| +0#0000000&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@62
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+> @74
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@53
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@40
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@54
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@57|1|4|5|,|1| @8|6@1|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@51
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@34
+@57|1|4|5|,|0|-|1| @6|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_09.dump b/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
index 7171137..19f42e1 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_09.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
-@6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64
-@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @59
-@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@56
-@2>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@34
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
@75
-|"+0#0000e05&| |a|r|g|u|m|e|n|t|s| +0#0000000&@63
+>"+0#0000e05&| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@51
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&|,+0#0000000&| |c+0#00e0e07&|)+0#e000e06&| +0#0000000&@53
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|a| +0#0000000&|a+0#00e0e07&|:|b| +0#0000000&|a+0#00e0e07&|:|c| +0#0000000&@56
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+@2|"+0#0000e05&| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@51
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@57
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0@2| +0#0000000&@62
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0| +0#0000000&@64
-@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5|@+0#4040ff13&@2
-| +0#0000000&@56|1|6|3|,|3| @8|7|4|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
+@57|1|6|3|,|1| @8|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_10.dump b/runtime/syntax/testdir/dumps/vim_ex_function_10.dump
index 9a7eff4..cd29b74 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_10.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5| +0#0000000&|a+0#00e0e07&|:
-|1|6| +0#0000000&|a+0#00e0e07&|:|1|7| +0#0000000&|a+0#00e0e07&|:|1|8| +0#0000000&|a+0#00e0e07&|:|1|9| +0#0000000&|a+0#00e0e07&|:|2|0| +0#0000000&@52
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+|e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
@75
@75
->"+0#0000e05&| |I|s@1|u|e| |#|1|6|2|4|3| |(|V|i|m| |s|c|r|i|p|t| |d|e|f| |p|a|r|a|m|e|t|e|r|s| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t| |i|s| |w|r|o|n|g|)| +0#0000000&@6
+|"+0#0000e05&| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@62
@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]|)| +0#0000000&@29
-|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
-@75
-@75
-|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
-@75
-|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
-@2|"+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@49
-@2|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
+>f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|,+0#0000000&| |z+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@48
@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@57|1|8|0|,|1| @8|8|2|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@62
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
+@8|x+0#00e0e07&|,+0#0000000&| @64
+@57|1|8|1|,|1| @8|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_11.dump b/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
index 98e0c79..6ada5e7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_11.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@74
-@75
-|"+0#0000e05&| |c|o|m@1|a|n|d| |m|o|d|i|f|i|e|r|s| +0#0000000&@55
-@75
-|s+0#af5f00255&|i|l|e|n|t|!| +0#0000000&|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@52
+| +0&#ffffff0@7|x+0#00e0e07&|,+0#0000000&| @64
+@8|y+0#00e0e07&|,+0#0000000&| @64
+@8|z+0#00e0e07&|,+0#0000000&| @64
+@8|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@62
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
>e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@75
-|"+0#0000e05&| |l|e|a|d|i|n|g| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r| +0#0000000&@47
-@75
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@47
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@40
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
+@6|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @64
+@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @59
+@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@56
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-|"+0#0000e05&| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@57
-@75
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @59
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@55
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-@57|1|9|8|,|1| @8|9|1|%|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
+@57|1|9@1|,|1| @8|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_12.dump b/runtime/syntax/testdir/dumps/vim_ex_function_12.dump
index 2e431aa..8968153 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_12.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_12.dump
@@ -1,20 +1,20 @@
-|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @58
-|d+0#af5f00255&|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@55
+|f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@61
+@8|x+0#00e0e07&|,+0#0000000&| @64
+@8|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @59
+@8|z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@56
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+>e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
@75
-|"+0#0000e05&| |I|s@1|u|e| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|7|4|2|0|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|9|2|7@1|9|8|6|8|7| +0#0000000&@5
->"+0#0000e05&| |(|a|r|g| |n|a|m|e|d| |/|f|u|%|\|[|n|c|t|i|o|n|]|/|)| +0#0000000&@46
+|"+0#0000e05&| |a|r|g|u|m|e|n|t|s| +0#0000000&@63
@75
-|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
-|s+0#af5f00255&|i|l|e|n|t|!| +0#0000000&|d+0#af5f00255&|e|l|f|u|n|c|!| +0#0000000&|f+0#af5f00255&|u|n|c| +0#0000000&@53
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&|,+0#0000000&| |c+0#00e0e07&|)+0#e000e06&| +0#0000000&@53
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|a| +0#0000000&|a+0#00e0e07&|:|b| +0#0000000&|a+0#00e0e07&|:|c| +0#0000000&@56
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
@75
-@75
-|"+0#0000e05&| |I|s@1|u|e| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|7|4|2|0|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|9|2|7@1|9|8|6|8|7| +0#0000000&@5
-|"+0#0000e05&| |(|f|u|n|c|t|i|o|n| |n|a|m|e|d| |/|s|:|f|u|%|\|[|n|c|t|i|o|n|]|/|)| +0#0000000&@39
-@75
-|"+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
-|f+0#af5f00255&|u|n|c|!| +0#0000000&|s+0#e000e06&|:|f+0#af5f00255&|u|n|c|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |f+0#00e0e07&|u|n|c|)+0#e000e06&| +0#0000000&@53
-@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a+0#00e0e07&|:|f|u|n|c| +0#0000000&@57
-|e+0#af5f00255&|n|d|f|u|n|c| +0#0000000&@67
-@75
-@57|2|1|6|,|1| @8|B|o|t|
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@57
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0@2| +0#0000000&@62
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0| +0#0000000&@64
+@2|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5| +0#0000000&|a+0#00e0e07&|:
+|1|6| +0#0000000&|a+0#00e0e07&|:|1|7| +0#0000000&|a+0#00e0e07&|:|1|8| +0#0000000&|a+0#00e0e07&|:|1|9| +0#0000000&|a+0#00e0e07&|:|2|0| +0#0000000&@52
+@57|2|1|7|,|1| @8|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_13.dump b/runtime/syntax/testdir/dumps/vim_ex_function_13.dump
new file mode 100644
index 0000000..066f06c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_13.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5| +0#0000000&|a+0#00e0e07&|:
+|1|6| +0#0000000&|a+0#00e0e07&|:|1|7| +0#0000000&|a+0#00e0e07&|:|1|8| +0#0000000&|a+0#00e0e07&|:|1|9| +0#0000000&|a+0#00e0e07&|:|2|0| +0#0000000&@52
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@75
+>"+0#0000e05&| |I|s@1|u|e| |#|1|6|2|4|3| |(|V|i|m| |s|c|r|i|p|t| |d|e|f| |p|a|r|a|m|e|t|e|r|s| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t| |i|s| |w|r|o|n|g|)| +0#0000000&@6
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]|)| +0#0000000&@29
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@75
+|"+0#0000e05&| |c|o|m@1|e|n|t|s| +0#0000000&@64
+@75
+|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60
+@2|"+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@49
+@2|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@58
+@2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@63
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@57|2|3@1|,|1| @8|9|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_14.dump b/runtime/syntax/testdir/dumps/vim_ex_function_14.dump
new file mode 100644
index 0000000..6d0e2d7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_14.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@75
+|"+0#0000e05&| |c|o|m@1|a|n|d| |m|o|d|i|f|i|e|r|s| +0#0000000&@55
+@75
+|s+0#af5f00255&|i|l|e|n|t|!| +0#0000000&|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@52
+>e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@75
+|"+0#0000e05&| |l|e|a|d|i|n|g| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r| +0#0000000&@47
+@75
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@47
+|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|7|4|2|0|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|9|2|7@1|9|8|6|8|7| +0#0000000&@5
+|"+0#0000e05&| |(|f|u|n|c|t|i|o|n| |n|a|m|e|d| |/|s|:|f|u|%|\|[|n|c|t|i|o|n|]|/|)| +0#0000000&@39
+|| @73
+|f+0#af5f00255&|u|n|c|!| +0#0000000&|s+0#e000e06&|:|f+0#0000000&|u|n|c|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |f+0#00e0e07&|u|n|c|)+0#e000e06&| +0#0000000&@53
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a+0#00e0e07&|:|f|u|n|c| +0#0000000&@57
+@57|2|5|1|,|1| @8|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_15.dump b/runtime/syntax/testdir/dumps/vim_ex_function_15.dump
new file mode 100644
index 0000000..df284e0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_15.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a+0#00e0e07&|:|f|u|n|c| +0#0000000&@57
+|e+0#af5f00255&|n|d|f|u|n|c| +0#0000000&@67
+> @74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|6@1|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_01.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_01.dump
index 326df16..ac29b85 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_01.dump
@@ -17,4 +17,4 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o|{|"|o|"|}|(+0#e000e06&|)| +0#0000000&@54
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-@57|1|9|,|0|-|1| @8|4|%|
+@57|1|9|,|0|-|1| @8|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
index 8eb430d..7bb08c7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_02.dump
@@ -17,4 +17,4 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@48
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-@57|3|7|,|1| @9|1@1|%|
+@57|3|7|,|1| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
index 8af7190..b41ea7e 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_03.dump
@@ -17,4 +17,4 @@
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-@57|5@1|,|1| @9|1|8|%|
+@57|5@1|,|1| @9|1|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
index 6a9fd94..f6a6ff3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_04.dump
@@ -1,20 +1,20 @@
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@50
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|b+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@44
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|l+0#0000000&|s|(+0#e000e06&|)| +0#0000000&@57
+|-+0#0000e05#a8a8a8255| >f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|w+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |m|o|d|i|f|i|e|r|s| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@52
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|t+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|g+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@52
-@57|7|3|,|1| @9|2|4|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+@57|7|3|,|1| @9|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
index e0e97ad..b3555a3 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_05.dump
@@ -1,20 +1,20 @@
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@52
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|v+0#e000e06&|:|d+0#0000000&|i|c|t|.|F|o@1|(+0#e000e06&|)| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| >e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|r|g|)+0#e000e06&| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|l+0#00e0e07&|:|d|i|c|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|{+0#e000e06&|}| +0#0000000&@55
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|l+0#e000e06&|:|d+0#0000000&|i|c|t|.|B|A|R|(+0#e000e06&|)| +0#0000000&@49
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@59
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@59
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|a+0#e000e06&|:|a+0#0000000&|r|g|.|B|A|R|(+0#e000e06&|)| +0#0000000&@50
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@59
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@59
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@53
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|f|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@50
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@33
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-@57|9|1|,|3| @9|3|1|%|
+@57|9|1|,|1| @9|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
index 934e311..8a38361 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_06.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@51
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@51
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@52
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|g+0#e000e06&|:|f+0#0000000&|o@1|#|b|a|r|#|F|o@1|(+0#e000e06&|)| +0#0000000&@48
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| >e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |s|a|m|e| |n|a|m|e| |a|s| |a|n| |E|x| |c|o|m@1|a|n|d| +0#0000000&@44
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|s+0#e000e06&|:|l+0#0000000&|s|(+0#e000e06&|)| +0#0000000&@57
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@49
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |m|o|d|i|f|i|e|r|s| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@52
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@32
-@57|1|0|9|,|0|-|1| @6|3|8|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@42
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+@57|1|0|9|,|1| @8|3|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
index fba5b01..3a6a96e 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_07.dump
@@ -1,20 +1,20 @@
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@32
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@52
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@49
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@53
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@49
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@50
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
-@57|1|2|7|,|1| @8|4@1|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@33
+@57|1|2|7|,|0|-|1| @6|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump
index b4007e6..0ee8bbc 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_08.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@60
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| >f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|,+0#0000000&| |z+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@46
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@33
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|,+0#0000000&| @62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@60
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@51
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@38
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&@52
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
-@57|1|4|5|,|1| @8|5|1|%|
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@49
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+@57|1|4|5|,|3| @8|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump
index 47b294c..12e9f33 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_09.dump
@@ -1,20 +1,20 @@
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&|r+0#e000e06&|a|n|g|e| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&|d+0#e000e06&|i|c|t| +0#0000000&|c+0#e000e06&|l|o|s|u|r|e| +0#0000000&@32
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @57
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|e|n|d|f|u|n|c|t|i|o|n| |t|r|a|i|l|i|n|g| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@49
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@48
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|r|g|u|m|e|n|t|s| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&|,+0#0000000&| |c+0#00e0e07&|)+0#e000e06&| +0#0000000&@51
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|a| +0#0000000&|a+0#00e0e07&|:|b| +0#0000000&|a+0#00e0e07&|:|c| +0#0000000&@54
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@55
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0@2| +0#0000000&@60
-@57|1|6|3|,|7| @8|5|7|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+@57|1|6|3|,|0|-|1| @6|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
index dd7f7a1..091bed6 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_10.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0@2| +0#0000000&@60
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0| +0#0000000&@62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5| +0#0000000&
-||+0#0000e05#a8a8a8255| |a+0#00e0e07#ffffff0|:|1|6| +0#0000000&|a+0#00e0e07&|:|1|7| +0#0000000&|a+0#00e0e07&|:|1|8| +0#0000000&|a+0#00e0e07&|:|1|9| +0#0000000&|a+0#00e0e07&|:|2|0| +0#0000000&@48
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |c|o|m@1|e|n|t|s| +0#0000000&@62
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@47
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@56
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@51
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |p|a|r|a|m|e|t|e|r|s| +0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|,+0#0000000&| |z+0#00e0e07&|,+0#0000000&| |.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@46
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@60
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |c|o|m@1|a|n|d| |m|o|d|i|f|i|e|r|s| +0#0000000&@53
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |s+0#af5f00255#ffffff0|i|l|e|n|t|!| +0#0000000&|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@50
-@57|1|8|0|,|0|-|1| @6|6|4|%|
+@57|1|8|1|,|1| @8|5|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
index 631cb21..dc37818 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_11.dump
@@ -1,20 +1,20 @@
-|-+0#0000e05#a8a8a8255| |s+0#af5f00255#ffffff0|i|l|e|n|t|!| +0#0000000&|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@50
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|x+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|y+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|z+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7>.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@60
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |l|e|a|d|i|n|g| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r| +0#0000000&@45
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@45
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| |z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@38
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |d|e|l|e|t|e| |f|u|n|c|t|i|o|n| +0#0000000&@55
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|F|o@1| @57
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@53
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n|!| +0#0000000&|F|o@1| @56
-| +0#0000e05#a8a8a8255@1|d+0#af5f00255#ffffff0|e|l|f|u|n|c|t|i|o|n| +0#0000000&|f|o@1|.+0#af5f00255&|b+0#00e0e07&|a|r| +0#0000000&@53
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@52
-@57|1|9|8|,|0|-|1| @6|7|0|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|x+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @57
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@54
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+@57|1|9@1|,|9| @8|5|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump
index 7fd54b4..ab806b1 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_12.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@52
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|e|n|d|f|u|n|c|t|i|o|n|"| +0#0000000&@52
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|x+0#00e0e07&| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|x+0#00e0e07&|,+0#0000000&| @62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|y+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|,+0#0000000&| @57
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7>z+0#00e0e07&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|z|e|d|"|)+0#e000e06&| +0#0000000&@54
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1|a|p@1|e|n|d| +0#0000000&@64
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-@57|2|1|6|,|0|-|1| @6|7@1|%|
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|r|g|u|m|e|n|t|s| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|a+0#00e0e07&|,+0#0000000&| |b+0#00e0e07&|,+0#0000000&| |c+0#00e0e07&|)+0#e000e06&| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|a| +0#0000000&|a+0#00e0e07&|:|b| +0#0000000&|a+0#00e0e07&|:|c| +0#0000000&@54
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|.+0#00e0e07&@2|)+0#e000e06&| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0@2| +0#0000000&@60
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0| +0#0000000&@62
+@57|2|1|7|,|9| @8|6|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_13.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_13.dump
index e8f41da..96bd8fc 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_13.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_13.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|0| +0#0000000&@62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|a+0#00e0e07&|:|1| +0#0000000&|a+0#00e0e07&|:|2| +0#0000000&|a+0#00e0e07&|:|3| +0#0000000&|a+0#00e0e07&|:|4| +0#0000000&|a+0#00e0e07&|:|5| +0#0000000&|a+0#00e0e07&|:|6| +0#0000000&|a+0#00e0e07&|:|7| +0#0000000&|a+0#00e0e07&|:|8| +0#0000000&|a+0#00e0e07&|:|9| +0#0000000&|a+0#00e0e07&|:|1|0| +0#0000000&|a+0#00e0e07&|:|1@1| +0#0000000&|a+0#00e0e07&|:|1|2| +0#0000000&|a+0#00e0e07&|:|1|3| +0#0000000&|a+0#00e0e07&|:|1|4| +0#0000000&|a+0#00e0e07&|:|1|5| +0#0000000&
+||+0#0000e05#a8a8a8255| |a+0#00e0e07#ffffff0|:|1|6| +0#0000000&|a+0#00e0e07&|:|1|7| +0#0000000&|a+0#00e0e07&|:|1|8| +0#0000000&|a+0#00e0e07&|:|1|9| +0#0000000&|a+0#00e0e07&|:|2|0| +0#0000000&@48
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |I|s@1|u|e| |#|1|6|2|4|3| |(|V|i|m| |s|c|r|i|p|t| |d|e|f| |p|a|r|a|m|e|t|e|r|s| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t| |i|s| |w|r|o|n|g|)| +0#0000000&@4
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|T|e|s|t|(+0#e000e06&|l+0#00e0e07&|i|n|e|s| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|,+0#0000000&| |l+0#00e0e07&|i|n|e|(+0#e000e06&|'+0#e000002&|.|'|)+0#e000e06&|]|)| +0#0000000&@27
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |c|o|m@1|e|n|t|s| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1>c|h|a|n|g|e| +0#0000000&@64
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |L|e|g|a|c|y|-|s|c|r|i|p|t| |c|o|m@1|e|n|t| +0#0000000&@47
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|#| |4+0#e000002&|2| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@56
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|4+0#e000002&|2| +0#0000000&@61
||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
-||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1|i|n|s|e|r|t| +0#0000000&@64
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |:+0#0000000#ffffff0|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |:+0#0000000#ffffff0|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@60
-@57|2|3|4|,|3| @8|8|4|%|
+@57|2|3|4|,|0|-|1| @6|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_14.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_14.dump
index 5459f01..94063c1 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_14.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_14.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| |:+0#0000000#ffffff0|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@60
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |I|s@1|u|e| |#|1|5|6|7|1| +0#0000000&@58
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |N|o| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |:|f|u|n| |o|r| |:|d|e|f| |b|o|d|i|e|s| |c|o|m@1|e|n|c|i|n|g| |w|i|t|h| |e|m|p|t|y| |l|i|n|e|s| |i|f| +0#0000000&@2
-| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |c|o|n|t|a|i|n|s| |"+0#e000002&|f|"| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |c|o|m@1|a|n|d| |m|o|d|i|f|i|e|r|s| +0#0000000&@53
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|A|1|(+0#e000e06&|)| +0#0000000&@63
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+|-+0#0000e05#a8a8a8255| >s+0#af5f00255#ffffff0|i|l|e|n|t|!| +0#0000000&|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|A|2|(+0#e000e06&|)| +0#0000000&@63
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|B|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-@57|2|5|2|,|1| @8|9|0|%|
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |l|e|a|d|i|n|g| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&||| |f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@45
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |I|s@1|u|e| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|p|u|l@1|/|1|7|4|2|0|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|9|2|7@1|9|8|6|8|7| +0#0000000&@3
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |(|f|u|n|c|t|i|o|n| |n|a|m|e|d| |/|s|:|f|u|%|\|[|n|c|t|i|o|n|]|/|)| +0#0000000&@37
+| +0#0000e05#a8a8a8255@1|+0#0000000#ffffff0| @71
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|!| +0#0000000&|s+0#e000e06&|:|f+0#0000000&|u|n|c|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |f+0#00e0e07&|u|n|c|)+0#e000e06&| +0#0000000&@51
+@57|2|5|2|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_15.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_15.dump
index e77a995..02db046 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_15.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_15.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|!| +0#0000000&|s+0#e000e06&|:|f+0#0000000&|u|n|c|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |f+0#00e0e07&|u|n|c|)+0#e000e06&| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|a+0#00e0e07&|:|f|u|n|c| +0#0000000&@55
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c| +0#0000000&@65
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|B|2|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|C|1|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&@62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |f|o|l|d|-|r|e|g|i|o|n| |e|n|d|i|n|g| +0#0000000&@52
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|C|2|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&@62
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|"+0#0000e05&| |e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|D|1|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@56
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-@57|2|7|0|,|5| @8|9|7|%|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|e|n|d|f|u|n|c|t|i|o|n|"| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t| +0#0000000&|x+0#00e0e07&| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+@57|2|7|0|,|1| @8|8|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_16.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_16.dump
index 81c8a8c..e3d9bbd 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_function_fold_16.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_16.dump
@@ -1,20 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1|a|p@1|e|n|d| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3>e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1|c|h|a|n|g|e| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|D|2|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@56
-||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
-||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|2|8@1|,|5| @8|B|o|t|
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#af5f00255#ffffff0@1|i|n|s|e|r|t| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+@57|2|8@1|,|5| @8|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_17.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_17.dump
new file mode 100644
index 0000000..db3157e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_17.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|e|n|d|f|u|n|c|t|i|o|n| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |.+0#af5f00255#ffffff0| +0#0000000&@71
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |:+0#0000000#ffffff0|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@57
+||+0#0000e05#a8a8a8255| >:+0#0000000#ffffff0|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |I|s@1|u|e| |#|1|5|6|7|1| +0#0000000&@58
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |N|o| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |:|f|u|n| |o|r| |:|d|e|f| |b|o|d|i|e|s| |c|o|m@1|e|n|c|i|n|g| |w|i|t|h| |e|m|p|t|y| |l|i|n|e|s| |i|f| +0#0000000&@2
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |c|o|n|t|a|i|n|s| |"+0#e000002&|f|"| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|A|1|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|A|2|(+0#e000e06&|)| +0#0000000&@63
+@57|3|0|6|,|1| @8|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_18.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_18.dump
new file mode 100644
index 0000000..dfdba91
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_18.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|A|2|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|B|1|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@57
+||+0#0000e05#a8a8a8255| > +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|B|2|(+0#e000e06&|)| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|C|1|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&@62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|C|2|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&@62
+@57|3|2|4|,|0|-|1| @6|9|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_function_fold_19.dump b/runtime/syntax/testdir/dumps/vim_ex_function_fold_19.dump
new file mode 100644
index 0000000..6d5f7a8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_function_fold_19.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|C|2|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&@62
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|D|1|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@56
+||+0#0000e05#a8a8a8255| > +0#0000000#ffffff0@72
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n| +0#0000000&|F|D|2|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|a+0#e000e06&|b|o|r|t| +0#0000000&@56
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|3|4|2|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comment_errors.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_function_def_tail_comments.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def.vim b/runtime/syntax/testdir/input/setup/vim_ex_def.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_def.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim b/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function.vim b/runtime/syntax/testdir/input/setup/vim_ex_function.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_function.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comment_errors.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_def_tail_comments.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim b/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_function_fold.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim b/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
index c039651..9dee81d 100644
--- a/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
+++ b/runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
@@ -1,2 +1,2 @@
highlight link vimVar Identifier
-highlight link vimFuncScope Special
+highlight link vimFunctionScope Special
diff --git a/runtime/syntax/testdir/input/vim_ex_delfunction.vim b/runtime/syntax/testdir/input/vim_ex_delfunction.vim
new file mode 100644
index 0000000..18ecd48
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_delfunction.vim
@@ -0,0 +1,34 @@
+" Vim :delfunction command
+
+
+delfunction Foo
+delfunction <SID>Foo
+delfunction foo.bar
+delfunction g:foo.bar
+delfunction s:foo.bar
+delfunction foo#bar
+delfunction g:foo#bar
+delfunction foo#bar.baz
+delfunction g:foo#bar.baz
+
+
+delfunction! Foo
+delfunction! <SID>Foo
+delfunction! foo.bar
+delfunction! g:foo.bar
+delfunction! s:foo.bar
+delfunction! foo#bar
+delfunction! g:foo#bar
+delfunction! foo#bar.baz
+delfunction! g:foo#bar.baz
+
+
+delfunction Foo | echo "Foo"
+delfunction Foo " comment
+
+
+" Issue https://github.com/vim/vim/pull/17420#issuecomment-2927798687
+" (arg named /fu%\[nction]/)
+
+silent! delfunc! func
+
diff --git a/runtime/syntax/testdir/input/vim_ex_function.vim b/runtime/syntax/testdir/input/vim_ex_function.vim
index dc11f39..cf07013 100644
--- a/runtime/syntax/testdir/input/vim_ex_function.vim
+++ b/runtime/syntax/testdir/input/vim_ex_function.vim
@@ -64,10 +64,48 @@
return 42
endfunction
+function b:dict.Foo()
+ return 42
+endfunction
+
+function w:dict.Foo()
+ return 42
+endfunction
+
+function t:dict.Foo()
+ return 42
+endfunction
+
+function g:dict.Foo()
+ return 42
+endfunction
+
+function s:dict.Foo()
+ return 42
+endfunction
+
+function v:dict.Foo()
+ return 42
+endfunction
+
+function Foo(arg)
+ let l:dict = {}
+ function l:dict.BAR()
+ return 42
+ endfunction
+ function a:arg.BAR()
+ return 42
+ endfunction
+endfunction
+
function foo#bar#Foo()
return 42
endfunction
+function g:foo#bar#Foo()
+ return 42
+endfunction
+
" same name as an Ex command
function s:ls()
endfunction
@@ -152,6 +190,14 @@
return 42
endfunction
+function Foo(
+ x,
+ y,
+ z,
+ ...)
+ return 42
+endfunction
+
function Foo(x, y = 42, z = "zed")
return 42
endfunction
@@ -163,6 +209,13 @@
return 42
endfunction
+function Foo(
+ x,
+ y = 42,
+ z = "zed")
+ return 42
+endfunction
+
" arguments
@@ -204,25 +257,9 @@
endfunction
-" delete function
-
-delfunction Foo
-delfunction foo.bar
-delfunction! Foo
-delfunction foo.bar
-
-
-" Issue https://github.com/vim/vim/pull/17420#issuecomment-2927798687
-" (arg named /fu%\[nction]/)
-
-" FIXME
-silent! delfunc! func
-
-
" Issue https://github.com/vim/vim/pull/17420#issuecomment-2927798687
" (function named /s:fu%\[nction]/)
-
-" FIXME
+
func! s:func(_, func)
return a:func
endfunc
diff --git a/runtime/syntax/testdir/input/vim_ex_function_fold.vim b/runtime/syntax/testdir/input/vim_ex_function_fold.vim
index 1be9c25..37a8fa4 100644
--- a/runtime/syntax/testdir/input/vim_ex_function_fold.vim
+++ b/runtime/syntax/testdir/input/vim_ex_function_fold.vim
@@ -66,10 +66,48 @@
return 42
endfunction
+function b:dict.Foo()
+ return 42
+endfunction
+
+function w:dict.Foo()
+ return 42
+endfunction
+
+function t:dict.Foo()
+ return 42
+endfunction
+
+function g:dict.Foo()
+ return 42
+endfunction
+
+function s:dict.Foo()
+ return 42
+endfunction
+
+function v:dict.Foo()
+ return 42
+endfunction
+
+function Foo(arg)
+ let l:dict = {}
+ function l:dict.BAR()
+ return 42
+ endfunction
+ function a:arg.BAR()
+ return 42
+ endfunction
+endfunction
+
function foo#bar#Foo()
return 42
endfunction
+function g:foo#bar#Foo()
+ return 42
+endfunction
+
" same name as an Ex command
function s:ls()
endfunction
@@ -154,6 +192,14 @@
return 42
endfunction
+function Foo(
+ x,
+ y,
+ z,
+ ...)
+ return 42
+endfunction
+
function Foo(x, y = 42, z = "zed")
return 42
endfunction
@@ -165,6 +211,13 @@
return 42
endfunction
+function Foo(
+ x,
+ y = 42,
+ z = "zed")
+ return 42
+endfunction
+
" arguments
@@ -179,6 +232,12 @@
endfunction
+" Issue #16243 (Vim script def parameters syntax highlight is wrong)
+
+function Test(lines = [line('.'), line('.')])
+endfunction
+
+
" comments
function Foo()
@@ -200,12 +259,12 @@
endfunction
-" delete function
-
-delfunction Foo
-delfunction foo.bar
-delfunction! Foo
-delfunction foo.bar
+" Issue https://github.com/vim/vim/pull/17420#issuecomment-2927798687
+" (function named /s:fu%\[nction]/)
+
+func! s:func(_, func)
+ return a:func
+endfunc
" fold-region ending
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index df67b72..fe50133 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 Jun 08
+" Last Change: 2025 Jun 11
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -34,11 +34,11 @@
" regular vim commands {{{2
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang'
syn keyword vimCommand contained abo[veleft] al[l] ar[gs] arga[dd] argd[elete] argdo argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bo[tright] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] bro[wse] buffers bufd[o] bun[load] bw[ipeout] c[hange] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd cdo ce[nter] cex[pr] cf[ile] cfd[o] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] chd[ir] changes che[ckpath] checkt[ime] chi[story] cl[ist] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang
-syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] delf[unction] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang
-syn keyword vimCommand contained keepa[lt] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] nextgroup=vimBang
-syn keyword vimCommand contained pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] rightb[elow] ru[ntime] rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] nextgroup=vimBang
-syn keyword vimCommand contained spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] wn[ext] wp[revious] nextgroup=vimBang
-syn keyword vimCommand contained wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang
+syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] kee[pmarks] keepj[umps] keepp[atterns] keepa[lt] l[ist] nextgroup=vimBang
+syn keyword vimCommand contained lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] pc[lose] ped[it] nextgroup=vimBang
+syn keyword vimCommand contained po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] rightb[elow] ru[ntime] rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] nextgroup=vimBang
+syn keyword vimCommand contained spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] wn[ext] wp[revious] wq wqa[ll] nextgroup=vimBang
+syn keyword vimCommand contained wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang
" Lower priority for _new_ to distinguish constructors from the command.
syn match vimCommand contained "\<new\>(\@!"
@@ -286,7 +286,7 @@
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -477,7 +477,7 @@
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="}" end="$"
\ contains=@vimContinue,@vimExprList,vimLambdaParams
-syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFuncParam
+syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFunctionParam
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParen contained "[()]"
@@ -492,56 +492,98 @@
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
" =========
-syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
+syn cluster vimFunctionBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep
+syn cluster vimFunctionBodyList contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
+syn cluster vimDefBodyList contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,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
-
-syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
-syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
-syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
-
-syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
-syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
-
-syn region vimFuncComment contained
- \ start=+".*+
- \ skip=+\n\s*\\\|\n\s*"\\ +
+syn region vimFunctionPattern contained
+ \ matchgroup=vimOper
+ \ start="/"
\ end="$"
- \ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
+ \ contains=@vimSubstList
+
+syn match vimFunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
+syn match vimDefBang contained "\a\@1<=!" skipwhite nextgroup=vimDefName
+syn match vimFunctionSID contained "\c<sid>"
+syn match vimFunctionScope contained "\<[bwglstav]:"
+syn match vimFunctionName contained
+ \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
+ \ skipwhite nextgroup=vimFunctionParams,vimCmdSep,vimComment,vim9Comment
+ \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
+syn match vimDefName contained
+ \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
+ \ nextgroup=vimDefParams,vimCmdSep,vimComment,vim9Comment
+ \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
+
+syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment
+syn match vimDef "\<def\>" skipwhite nextgroup=vimDefBang,vimDefName,vimFunctionPattern,vimCmdSep,vimComment
+
+syn region vimFunctionComment contained
+ \ start=+".*+
+ \ skip=+\n\s*\%(\\\|"\\ \)+
+ \ end="$"
+ \ skipwhite skipempty nextgroup=vimFunctionBody,vimEndfunction
syn region vimDefComment contained
\ start="#.*"
- \ skip=+\n\s*\\\|\n\s*#\\ +
+ \ skip=+\n\s*\%(\\\|#\\ \)+
\ end="$"
\ skipwhite skipempty nextgroup=vimDefBody,vimEnddef
-syn match vimFuncBang contained "!"
-syn match vimFuncSID contained "\c<sid>"
-syn match vimFuncScope contained "\<[sg]:"
-syn keyword vimFuncKey contained fu[nction]
-syn keyword vimDefKey contained def
+syn region vimFunctionParams contained
+ \ matchgroup=Delimiter
+ \ start="("
+ \ skip=+\n\s*\%(\\\|"\\ \)+
+ \ end=")"
+ \ skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
+ \ contains=vimFunctionParam,vimOperParen,@vimContinue
+syn region vimDefParams contained
+ \ matchgroup=Delimiter
+ \ start="("
+ \ end=")"
+ \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals,vimOperParen
+syn match vimFunctionParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFunctionParamEquals
+syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFunctionParamEquals
-syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
-syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals,vimOperParen
-syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
-syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
+syn match vimFunctionParamEquals contained "=" skipwhite nextgroup=@vimExprList
+syn match vimFunctionMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
-syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
-syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
+syn region vimFunctionBody contained
+ \ start="^."
+ \ matchgroup=vimCommand
+ \ end="\<endfu\%[nction]\>"
+ \ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+ \ contains=@vimFunctionBodyList
+syn region vimDefBody contained
+ \ start="^."
+ \ matchgroup=vimCommand
+ \ end="\<enddef\>"
+ \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
+ \ contains=@vimDefBodyList
-syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
-syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
-
-syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
-syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
+syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
+syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
- syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
- syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
+ syn region vimFunctionFold
+ \ start="\<fu\%[nction]!"
+ "\ assume no dict literal in curly-brace name expressions
+ \ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*("
+ \ end="^\s*:\=\s*endf\%[unction]\>"
+ \ contains=vimFunction
+ \ extend fold keepend transparent
+ syn region vimDefFold
+ \ start="\<def!"
+ "\ assume no dict literal in curly-brace name expressions
+ \ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+("
+ \ end="^\s*:\=\s*enddef\>"
+ \ contains=vimDef
+ \ extend fold keepend transparent
endif
+syn match vimDelfunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
+syn match vimDelfunction "\<delf\%[unction]\>" skipwhite nextgroup=vimDelfunctionBang,vimFunctionName
+
" Types: {{{2
" =====
@@ -578,18 +620,18 @@
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
- \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn match vim9ConstructorDefName contained "\<_\=new\w*\>"
\ nextgroup=vim9ConstructorDefParams
\ contains=@vim9MethodName
syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
- \ skipwhite nextgroup=vimParamType,vimFuncParamEquals
+ \ skipwhite nextgroup=vimParamType,vimFunctionParamEquals
\ contains=vim9This,vimOper
syn region vim9ConstructorDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError
- \ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vim9ConstructorDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9MethodDefReturnType contained
\ start=":\%(\s\|\n\)\@="
@@ -708,7 +750,7 @@
syn region vim9AbstractDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
- \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
+ \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9AbstractDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
@@ -805,7 +847,7 @@
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 filetypecmd 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
+syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFunctionSID
" 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
@@ -1439,8 +1481,8 @@
" Errors And Warnings: {{{2
" ====================
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
- syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
- syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
+ syn match vimFunctionError contained "[[:space:]!]\@1<=\<[a-z0-9]\w\{-}\ze\s*("
+ syn match vimFunctionError contained "\%(<[sS][iI][dD]>\|[sg]:\)\d\w\{-}\ze\s*("
syn match vimElseIfErr "\<else\s\+if\>"
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
@@ -1547,7 +1589,7 @@
endif
syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
-syn cluster vimFuncBodyList add=vimSyntax
+syn cluster vimFunctionBodyList add=vimSyntax
" Syntax: case {{{2
syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
@@ -2173,11 +2215,14 @@
hi def link vimCount Number
hi def link vimCtrlChar SpecialChar
hi def link vimDebuggreedy vimCommand
+ hi def link vimDef vimCommand
+ hi def link vimDefBang vimBang
hi def link vimDefComment vim9Comment
- hi def link vimDefKey vimCommand
hi def link vimDefParam vimVar
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
+ hi def link vimDelfunction vimCommand
+ hi def link vimDelfunctionBang vimBang
hi def link vimDoautocmd vimCommand
hi def link vimDoautocmdMod Special
hi def link vimEcho vimCommand
@@ -2202,15 +2247,15 @@
hi def link vimForInContinueComment vimContinueComment
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
- hi def link vimFuncBang vimBang
- hi def link vimFuncComment vimComment
- hi def link vimFuncKey vimCommand
+ hi def link vimFunction vimCommand
+ hi def link vimFunctionBang vimBang
+ hi def link vimFunctionComment vimComment
hi def link vimFuncName Function
- hi def link vimFuncMod Special
- hi def link vimFuncParam vimVar
- hi def link vimFuncParamEquals vimOper
- hi def link vimFuncScope vimVarScope
- hi def link vimFuncSID vimNotation
+ hi def link vimFunctionMod Special
+ hi def link vimFunctionParam vimVar
+ hi def link vimFunctionParamEquals vimOper
+ hi def link vimFunctionScope vimVarScope
+ hi def link vimFunctionSID vimNotation
hi def link vimGrep vimCommand
hi def link vimGrepadd vimCommand
hi def link vimGrepBang vimBang
@@ -2261,7 +2306,7 @@
hi def link vimMapBang vimBang
hi def link vimMapLeader vimBracket
hi def link vimMapLeaderKey vimNotation
- hi def link vimMapModKey vimFuncSID
+ hi def link vimMapModKey vimFunctionSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number