runtime(vim): Update base-syntax, contain let-heredocs
Commit:
https://github.com/vim/vim/commit/274efcc7e697cebdfc5fce911fe09e8618e11264
Author: Doug Kearns <[email protected]>
Date: Tue Jun 10 21:02:43 2025 +0200
runtime(vim): Update base-syntax, contain let-heredocs
Limit heredoc matches to assignment statements. Matching these at the
top level is very slow.
closes: #17473
Signed-off-by: Doug Kearns <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/syntax/generator/vim.vim.base
b/runtime/syntax/generator/vim.vim.base
index 0cfa300ad..b94c5bed7 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 <[email protected]>
-" Last Change: 2025 Jun 07
+" Last Change: 2025 Jun 08
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -258,15 +258,16 @@ syn match vimVimVar "\<v:"
nextgroup=vimSubscript,vimVimVarName,vimVarNameError
syn match vimOptionVar "&\%([lg]:\)\="
nextgroup=vimSubscript,vimOptionVarName,vimVarNameError
syn cluster vimSpecialVar
contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->"
contains=vim9Super,vim9This
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\["
nextgroup=vimSubscript
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\."
nextgroup=vimOper contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
+Vim9 syn match vim9LhsVariable "\s\=\%([bwgt]:\)\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
skipwhite nextgroup=vimLetHeredoc contains=vimVarScope
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\["
nextgroup=vimSubscript
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\."
nextgroup=vimOper contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->"
contains=vim9Super,vim9This
-Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\=="
contains=vimVar,@vimSpecialVar
-Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.="
contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\=="
contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+=<<" skipwhite
nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.="
contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
@@ -441,7 +442,7 @@ syn match vim9LambdaOperatorComment contained "#.*"
skipwhite skipempty nextgrou
syn cluster vimFuncList
contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList
contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHeredoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+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
@@ -968,11 +969,20 @@ syn match vimSetMod contained "
\@1<=\%(&vim\=\|[!&?<]\)"
" Variable Declarations: {{{2
" =====================
-VimL syn keyword vimLet let skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList
-VimL syn keyword vimConst cons[t] skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList
+VimL syn keyword vimLet let skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
+VimL syn keyword vimConst cons[t] skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
syn region vimVarList contained
\ start="\[" end="]"
+ \ skipwhite nextgroup=vimLetHeredoc
\ contains=@vimContinue,@vimSpecialVar,vimVar
+syn match vimLetVar contained
"\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite
nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript
+hi link vimLetVar vimVar
+syn region vimLetVarSubscript contained
+ \ matchgroup=vimSubscriptBracket
+ \ start="\S\@1<=\["
+ \ end="]"
+ \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc
+ \ contains=@vimExprList
VimL syn keyword vimUnlet unl[et] skipwhite
nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained " \@1<=!" skipwhite
nextgroup=vimUnletVars
@@ -981,17 +991,68 @@ syn region vimUnletVars contained
\ nextgroup=vimCmdSep,vimComment
\ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1\=\z2$' extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop
end='^\z1$' extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1\=\z2$' contains=@vimStringInterpolation
extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1$' contains=@vimStringInterpolation extend
+" TODO: type error after register or environment variables (strings)
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1\=\z2$"
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="=<<\%(\s*\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop end="^\z1$"
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \
start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1\=\z2$"
+ \ contains=@vimStringInterpolation
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1$"
+ \ contains=@vimStringInterpolation
+ \ extend
Vim9 syn keyword vim9Const const skipwhite
nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Final final skipwhite
nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Var var skipwhite
nextgroup=vim9Variable,vim9VariableList
-syn match vim9Variable contained "\<\h\w*\>" skipwhite
nextgroup=vimTypeSep,vimLetHeredoc,vimOper
-syn region vim9VariableList contained start="\[" end="]"
contains=@vimContinue,@vimSpecialVar,vim9Variable
+syn match vim9Variable contained "\<\h\w*\>" skipwhite
nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper
+syn region vim9VariableList contained start="\[" end="]"
contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite
nextgroup=vimLetHeredoc
+
+syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|
\)\@=" skipwhite nextgroup=@vim9VariableType
+syn keyword vim9VariableType contained any blob bool
channel float job number string void skipwhite nextgroup=vimLetHeredoc
+syn match vim9VariableType contained "\<\%(func\)\>"
skipwhite nextgroup=vimLetHeredoc
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<func("
+ \ end=")"
+ \ skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc
+ \ contains=@vim9Continue,@vim9VariableType
+ \ transparent
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<tuple<"
+ \ end=">"
+ \ skipwhite nextgroup=vimLetHeredoc
+ \ contains=@vim9Continue,@vim9VariableType
+ \ transparent
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<\%(list\|dict\)<"
+ \ end=">"
+ \ skipwhite nextgroup=vimLetHeredoc
+ \ contains=@vim9VariableType
+ \ oneline
+ \ transparent
+syn match vim9VariableUserType contained
"\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc
+
+syn cluster vim9VariableType
contains=vim9VariableType,vim9VariableCompoundType,vim9VariableUserType
" Lockvar and Unlockvar: {{{2
" =====================
@@ -2358,6 +2419,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vim9Type vimCommand
hi def link vim9TypeEquals vimOper
hi def link vim9Variable vimVar
+ hi def link vim9VariableType vimType
hi def link vim9Var vimCommand
hi def link vim9Vim9ScriptArg Special
hi def link vim9Vim9Script vimCommand
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_00.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_00.dump
new file mode 100644
index 000000000..2901ba96e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t|
+0#0000000&@62
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|
|g|:|v|i|m|s|y|n|_|f|o|l|d|i|n|g| |=| |"+0#e000002&|h|"| +0#0000000&@29
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l|
|f|d|c|=|2| |f|d|l|=|9@1| |f|d|m|=|s|y|n|t|a|x| +0#0000000&@27
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_01.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_01.dump
new file mode 100644
index 000000000..753103163
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_01.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|v+0#af5f00255#ffffff0|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&|
+0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @61
+@57|1|9|,|1| @10|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_02.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_02.dump
new file mode 100644
index 000000000..d4012e70d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_02.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @61
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|\+0#e000e06&|
+0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|i|g|n|m|e|n|t| +0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#00e0e07#ffffff0|o@1|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0| +0#00e0e07&|f|o@1|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |g+0#00e0e07#ffffff0|:|f|o@1|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
+@57|3|7|,|0|-|1| @7|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_03.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_03.dump
new file mode 100644
index 000000000..63446dd91
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_03.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |g+0#00e0e07#ffffff0|:|f|o@1|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@59
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0| +0#00e0e07&>g|:|f|o@1|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |[+0#0000000#ffffff0|f+0#00e0e07&|o@1|,+0#0000000&|
|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@54
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |
+0#0000000#ffffff0@1|[|f+0#00e0e07&|o@1|,+0#0000000&|
|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+@57|5@1|,|3| @9|1|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_04.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_04.dump
new file mode 100644
index 000000000..579e5a606
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_04.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|[+0#0000000#ffffff0|f+0#00e0e07&|o@1|,+0#0000000&| @67
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\|
|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|
+0#0000000#ffffff0@1|[|f+0#00e0e07&|o@1|,+0#0000000&| @65
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|\|
|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255|
|[+0#0000000#ffffff0|g+0#00e0e07&|:|f|o@1|,+0#0000000&|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|7|3|,|1| @9|2|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_05.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_05.dump
new file mode 100644
index 000000000..18924f895
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |
+0#0000000#ffffff0@1|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|
+0#0000e05#a8a8a8255@1|[+0#0000000#ffffff0|g+0#00e0e07&|:|f|o@1|,+0#0000000&|
@65
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|
+0#0000000#ffffff0@1|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&| @63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|\|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|0|-|1| @7|3|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_06.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_06.dump
new file mode 100644
index 000000000..1ed846b53
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |t|y|p|e|d| +0#0000000&@65
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1|:+0#0000000&| |l+0#00e0003&|i|s|t|<|s|t|r|i|n|g|>|
+0#0000000&|=+0#e000e06&|<@1| |E|N|D| +0#0000000&@43
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|[|f+0#00e0e07&|o@1|:+0#0000000&|
|s+0#00e0003&|t|r|i|n|g|,+0#0000000&| |b+0#00e0e07&|a|r|:+0#0000000&|
|s+0#00e0003&|t|r|i|n|g|]+0#0000000&| |=+0#e000e06&|<@1| |E|N|D| +0#0000000&@34
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|i|g|n|m|e|n|t| +0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |t|r|i|m| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|1| +0#0000000&@65
+@57|1|0|9|,|1| @8|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_07.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_07.dump
new file mode 100644
index 000000000..0e8fac149
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_07.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|1| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|2| +0#0000000&@65
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3>l|i|n|e|1| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|2| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+@57|1|2|7|,|5| @8|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_08.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_08.dump
new file mode 100644
index 000000000..b0423b32d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_08.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1>l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
|(|e|s|c|a|p|e|d| |{| |a|n|d| |}|)| +0#0000000&@36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
+@57|1|4|5|,|3| @8|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_09.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_09.dump
new file mode 100644
index 000000000..937493194
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_09.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255|
>l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@55
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|6|3|,|1| @8|5|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_10.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_10.dump
new file mode 100644
index 000000000..3ab0bf731
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_10.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| >l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+@57|1|8|1|,|1| @8|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_11.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_11.dump
new file mode 100644
index 000000000..65d18b6d1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_11.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +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| |m|a|r|k|e|r| |m|u|s|t| |n|o|t|
|b|e| |f|o|l@1|o|w|e|d| |b|y| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@25
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"| |E|N|D| |"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| | +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+@57|1|9@1|,|0|-|1| @6|6|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_12.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_12.dump
new file mode 100644
index 000000000..fe42476c9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_12.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|E|N|D| | +0#0000000&@66
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +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| |m|a|r|k|e|r| |m|u|s|t| |b|e|
|v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|v|a|r| |(|i|f|
|p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
+| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D|"|]|)| +0#0000000&@44
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|E|N|D| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|2|1|7|,|1| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_13.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_13.dump
new file mode 100644
index 000000000..4456c104b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_13.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+@57|2|3|4|,|0|-|1| @6|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_14.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_14.dump
new file mode 100644
index 000000000..f8547b185
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_14.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4>E|N|D| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| | +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+@57|2|5|2|,|6| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_15.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_15.dump
new file mode 100644
index 000000000..7260f7eba
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_15.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>#+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|v+0#af5f00255&|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@2|E|N|D| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +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| |m|a|r|k|e|r|s| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |!+0#e000e06#ffffff0|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+@57|2|7|0|,|3| @8|9|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_16.dump
b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_16.dump
new file mode 100644
index 000000000..66baedcd0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim9_ex_let_heredoc_16.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |0+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| >v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|A|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |A+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|#+0&#ffffff0| |e|r@1|o|r| |-| |l|e|a|d|i|n|g|
|l|o|w|e|r|c|a|s|e| |c|h|a|r|a|c|t|e|r| +0#0000000&@35
+| +0#0000e05#a8a8a8255@1|v+0#af5f00255#ffffff0|a|r|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1|
+0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@47
+| +0#0000e05#a8a8a8255@1|l+0#00e0e07#ffffff0|i|n|e|1| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|2| @67
+|
+0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|8@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
index d7bfb6b15..bce766239 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_00.dump
@@ -13,8 +13,8 @@
||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|i|m| +0#0000000&@66
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
index 623dc27aa..0ac68d2e2 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_01.dump
@@ -1,20 +1,20 @@
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|i|m| +0#0000000&@66
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| |b+0#00e0e07&|a|r|]+0#0000000&|
|=+0#e000e06&|<@1| |E|O|S| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| >l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|1| +0#0000000&@65
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|2| +0#0000000&@65
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|1| +0#0000000&@63
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|2| +0#0000000&@63
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@57
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&|
+0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
-@57|1|9|,|1| @10|7|%|
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @61
+@57|1|9|,|1| @10|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
index 913566685..16ccba8cc 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_02.dump
@@ -1,20 +1,20 @@
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|[|f+0#00e0e07&|o@1|,+0#0000000&| @61
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|\+0#e000e06&|
+0#0000000&|b+0#00e0e07&|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|g+0#00e0e07&|:|f|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@53
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@59
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@59
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-@57|3|7|,|3| @9|1|7|%|
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@46
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+@57|3|7|,|0|-|1| @7|1|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
index 4bd285758..705cafca7 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_03.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
|(|e|s|c|a|p|e|d| |{| |a|n|d| |}|)| +0#0000000&@36
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&|
|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S| +0#0000000&@44
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255|
>l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
-||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&| @61
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@5|\+0#e000e06&|
+0#0000000&|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
-||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@57
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-@57|5@1|,|1| @9|2|7|%|
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|[|g+0#00e0e07&|:|f|o@1|,+0#0000000&| @59
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@7|\+0#e000e06&|
+0#0000000&|g+0#00e0e07&|:|b|a|r|]+0#0000000&| |=+0#e000e06&|<@1| |E|O|S|
+0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
+@57|5@1|,|1| @9|2|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
index b763e642f..af1ff53a8 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_04.dump
@@ -1,20 +1,20 @@
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|S| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@55
-||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@55
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@54
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|i|m| +0#0000000&@66
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
+|-+0#0000e05#a8a8a8255| >l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|1| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|2| +0#0000000&@65
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@55
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|1| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|2| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@57
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-@57|7|3|,|0|-|1| @7|3|7|%|
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
+@57|7|3|,|1| @9|2|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
index e7b8a550a..ae0c3159f 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_05.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@59
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@59
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-| +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| |m|a|r|k|e|r| |m|u|s|t| |n|o|t|
|b|e| |f|o|l@1|o|w|e|d| |b|y| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@25
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@59
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-@57|9|1|,|0|-|1| @7|4|8|%|
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|0+0#e000002&|}+0#e000e06&|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&|1+0#e000002&|
+0#0000000&|++0#af5f00255&| +0#0000000&|1+0#e000002&|}+0#e000e06&|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+@57|9|1|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
index 6ed3eb501..ca53c5f74 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_06.dump
@@ -1,20 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"| |E|N|D| |"|]|)| +0#0000000&@42
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| | +0#0000000&@67
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|E|N|D| | +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
|(|e|s|c|a|p|e|d| |{| |a|n|d| |}|)| +0#0000000&@36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255|
>l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |e|v|a|l| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |0|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255|
|l+0#e000002#ffffff0|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+| |1|}+0#e000e06&@1|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@1|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e|
|v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f|
|p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
-| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
-@57|1|0|9|,|0|-|1| @6|5|7|%|
+@57|1|0|9|,|1| @8|4@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
index 85bb2f327..be981200a 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_07.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e|
|v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f|
|p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
-| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D|"|]|)| +0#0000000&@44
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1>E|N|D| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |e|v|a|l|
|E|N|D| +0#0000000&@45
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|0|}+0#e000e06&@1| +0#0000000&@55
+||+0#0000e05#a8a8a8255| |
+0#e000002#ffffff0@3|l|i|n|e|{+0#e000e06&@1|1+0#e000002&| |+|
|1|}+0#e000e06&@1| +0#0000000&@55
||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |n|o| |i|n|t|e|r|p|o|l|a|t|i|o|n|
+0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
-||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@55
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |0|}|
+0#0000000&@61
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|{|1| |+| |1|}|
+0#0000000&@61
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
-@57|1|2|5|,|3| @8|6|7|%|
+@57|1|2|7|,|0|-|1| @6|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
index 16149fede..e4f3f1e76 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_08.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@59
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |0|}|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|l|i|n|e|{|1| |+| |1|}|
+0#0000000&@57
||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| +0#0000000&@64
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| | +0#0000000&@63
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-@57|1|4|3|,|3| @8|7@1|%|
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |n|o|t|
|b|e| |f|o|l@1|o|w|e|d| |b|y| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@25
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|4|5|,|0|-|1| @6|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
index fbb7d9df9..611d6aa73 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_09.dump
@@ -1,20 +1,20 @@
-||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
-||+0#0000e05#a8a8a8255| >E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
-|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"| |E|N|D| |"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |E|N|D|
+0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| | +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1|E|N|D| | +0#0000000&@66
||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
-||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@2|E|N|D| +0#0000000&@66
-||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +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| |m|a|r|k|e|r|s| +0#0000000&@59
-@57|1|6|1|,|1| @8|8|7|%|
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e|
|v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f|
|p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
+| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
+@57|1|6|3|,|0|-|1| @6|6|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
index f85f860b4..bdd6e5c37 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_10.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r|s| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r| |m|u|s|t| |b|e|
|v|e|r|t|i|c|a|l@1|y| |a|l|i|g|n|e|d| |w|i|t|h| |:|l|e|t| |(|i|f|
|p|r|e|c|e|d|e|d| |b|y| |w|h|i|t|e|s|p
+| +0&#a8a8a8255@1|a+0&#ffffff0|c|e|)| +0#0000000&@68
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@48
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
-||+0#0000e05#a8a8a8255| >!+0#e000e06#ffffff0|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@60
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D|"|]|)| +0#0000000&@44
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@1>E|N|D| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |0+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|A|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
-||+0#0000e05#a8a8a8255| |A+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,|
|[|"|E|N|D| |"|]|)| +0#0000000&@43
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@52
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|r@1|o|r| |-| |l|e|a|d|i|n|g|
|l|o|w|e|r|c|a|s|e| |c|h|a|r|a|c|t|e|r| +0#0000000&@35
-| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1|
+0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@47
-@57|1|7|9|,|1| @8|9|7|%|
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+@57|1|7|9|,|3| @8|7|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
index 6e0a5fb2d..e8904f326 100644
--- a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_11.dump
@@ -1,20 +1,20 @@
-| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1|
+0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@47
-| +0#0000e05#a8a8a8255@1|l+0#00e0e07#ffffff0|i|n|e|1| +0#0000000&@67
-| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|2| @67
-|
+0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@59
-| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|1|9|6|,|0|-|1| @6|B|o|t|
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| +0#0000000&@65
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@3|E|N|D| | +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| +0#0000000&@64
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@4|E|N|D| | +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+@57|1|9|7|,|3| @8|8|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_12.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_12.dump
new file mode 100644
index 000000000..2c69f9ef1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_12.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|N|D| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D| |"|]|)| +0#0000000&@41
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| |E+0#e000002#ffffff0|N|D| | +0#0000000&@68
+||+0#0000e05#a8a8a8255| >E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0|E|N|D| +0#0000000&@68
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|"+0#0000e05&|
|a|s@1|e|r|t|_|e|q|u|a|l|(|f|o@1|,| |[|"|E|N|D|"|]|)| +0#0000000&@42
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1| |t|r|i|m| |E|N|D|
+0#0000000&@50
+||+0#0000e05#a8a8a8255| | +0#e000002#ffffff0@2|E|N|D| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|N|D| +0#0000000&@69
+| +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| |m|a|r|k|e|r|s| +0#0000000&@59
+@57|2|1|5|,|1| @8|9|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_13.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_13.dump
new file mode 100644
index 000000000..12ff7d5b9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_13.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|n|d| |m|a|r|k|e|r|s| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@48
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| >!+0#e000e06#ffffff0|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@60
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|0|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |0+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#e000e06&|<@1|
|A|!|@|#|$|%|^|&|*|(|)|_|+| +0#0000000&@47
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|1| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |l+0#e000002#ffffff0|i|n|e|2| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |A+0#e000e06#ffffff0|!|@|#|$|%|^|&|*|(|)|_|+|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |e|r@1|o|r| |-| |l|e|a|d|i|n|g|
|l|o|w|e|r|c|a|s|e| |c|h|a|r|a|c|t|e|r| +0#0000000&@35
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1|
+0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@47
+@57|2|3@1|,|1| @8|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_14.dump
b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_14.dump
new file mode 100644
index 000000000..9e1273f37
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_let_heredoc_14.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|e|t|
+0#0000000&|f+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&|<@1|
+0#0000000&|a+0#00e0e07&|!+0#0000000&|@|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@47
+| +0#0000e05#a8a8a8255@1|l+0#00e0e07#ffffff0|i|n|e|1| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e|2| @67
+|
+0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|!|@+0#0000000&|#|$|%+0#af5f00255&|^+0#0000000&|&+0#00e0e07&|*+0#af5f00255&|(+0#e000e06&|)|_+0#0000000&|++0#af5f00255&|
+0#0000000&@59
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|2|5|0|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/input/setup/vim9_ex_let_heredoc.vim
b/runtime/syntax/testdir/input/setup/vim9_ex_let_heredoc.vim
new file mode 100644
index 000000000..3a0ec2dae
--- /dev/null
+++ b/runtime/syntax/testdir/input/setup/vim9_ex_let_heredoc.vim
@@ -0,0 +1,2 @@
+highlight link vimVar Identifier
+
diff --git a/runtime/syntax/testdir/input/vim9_ex_let_heredoc.vim
b/runtime/syntax/testdir/input/vim9_ex_let_heredoc.vim
new file mode 100644
index 000000000..f20d4b942
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_ex_let_heredoc.vim
@@ -0,0 +1,298 @@
+vim9script
+# VIM_TEST_SETUP let g:vimsyn_folding = "h"
+# VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+var foo =<< END
+line1
+line2
+END
+
+ var foo =<< END
+line1
+line2
+END
+
+var [foo, bar] =<< EOS
+line1
+line2
+EOS
+
+ var [foo, bar] =<< EOS
+line1
+line2
+EOS
+
+var [foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+ var [foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+# assignment
+
+foo =<< END
+line1
+line2
+END
+
+ foo =<< END
+line1
+line2
+END
+
+g:foo =<< END
+line1
+line2
+END
+
+ g:foo =<< END
+line1
+line2
+END
+
+[foo, bar] =<< EOS
+line1
+line2
+EOS
+
+ [foo, bar] =<< EOS
+line1
+line2
+EOS
+
+[foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+ [foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+[g:foo, g:bar] =<< EOS
+line1
+line2
+EOS
+
+ [g:foo, g:bar] =<< EOS
+line1
+line2
+EOS
+
+[g:foo,
+ \ g:bar] =<< EOS
+line1
+line2
+EOS
+
+ [g:foo,
+ \ g:bar] =<< EOS
+line1
+line2
+EOS
+
+
+# typed
+
+var foo: list<string> =<< END
+line1
+line2
+END
+
+var [foo: string, bar: string] =<< END
+line1
+line2
+END
+
+# assignment
+
+# trim
+
+var foo =<< trim END
+ line1
+ line2
+END
+
+ var foo =<< trim END
+ line1
+ line2
+ END
+
+
+# interpolation
+
+var foo =<< eval END
+line{1 + 0}
+line{1 + 1}
+END
+
+ var foo =<< eval END
+line{1 + 0}
+line{1 + 1}
+END
+
+var foo =<< trim eval END
+ line{1 + 0}
+ line{1 + 1}
+END
+
+ var foo =<< trim eval END
+ line{1 + 0}
+ line{1 + 1}
+ END
+
+# no interpolation (escaped { and })
+
+var foo =<< eval END
+line{{1 + 0}}
+line{{1 + 1}}
+END
+
+ var foo =<< eval END
+line{{1 + 0}}
+line{{1 + 1}}
+END
+
+var foo =<< trim eval END
+ line{{1 + 0}}
+ line{{1 + 1}}
+END
+
+ var foo =<< trim eval END
+ line{{1 + 0}}
+ line{{1 + 1}}
+ END
+
+
+# no interpolation
+
+var foo =<< END
+line{1 + 0}
+line{1 + 1}
+END
+
+ var foo =<< END
+line{1 + 0}
+line{1 + 1}
+END
+
+var foo =<< trim END
+ line{1 + 0}
+ line{1 + 1}
+END
+
+ var foo =<< trim END
+ line{1 + 0}
+ line{1 + 1}
+ END
+
+
+# end marker must not be followed by whitespace
+
+# assert_equal(foo, ["END "])
+var foo =<< END
+END
+END
+
+# assert_equal(foo, [" END "])
+var foo =<< END
+ END
+END
+
+# assert_equal(foo, ["END "])
+var foo =<< trim END
+ END
+END
+
+# assert_equal(foo, ["END "])
+ var foo =<< trim END
+ END
+ END
+
+
+# end marker must be vertically aligned with :var (if preceded by whitespace)
+
+# assert_equal(foo, ["END"])
+var foo =<< trim END
+ END
+END
+
+ # assert_equal(foo, ["END"])
+ var foo =<< trim END
+ END
+ END
+
+# assert_equal(foo, ["END "])
+var foo =<< trim END
+END
+END
+
+ # assert_equal(foo, ["END"])
+ var foo =<< trim END
+ END
+ END
+
+ # assert_equal(foo, ["END "])
+ var foo =<< trim END
+ END
+ END
+
+ # assert_equal(foo, ["END"])
+ var foo =<< trim END
+ END
+ END
+
+ # assert_equal(foo, ["END "])
+ var foo =<< trim END
+ END
+ END
+
+ # assert_equal(foo, ["END "])
+ var foo =<< trim END
+END
+END
+
+ # assert_equal(foo, ["END"])
+ var foo =<< trim END
+ END
+END
+
+ # assert_equal(foo, ["END"])
+ var foo =<< trim END
+ END
+END
+
+
+# end markers
+
+var foo =<< !@#$%^&*()_+
+line1
+line2
+!@#$%^&*()_+
+
+var foo =<< 0!@#$%^&*()_+
+line1
+line2
+0!@#$%^&*()_+
+
+var foo =<< A!@#$%^&*()_+
+line1
+line2
+A!@#$%^&*()_+
+
+# error - leading lowercase character
+var foo =<< a!@#$%^&*()_+
+line1
+line2
+a!@#$%^&*()_+
+
diff --git a/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
b/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
index 2f88f938e..adc59e675 100644
--- a/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
+++ b/runtime/syntax/testdir/input/vim_ex_let_heredoc.vim
@@ -13,6 +13,60 @@ line1
line2
END
+let [foo, bar] =<< EOS
+line1
+line2
+EOS
+
+ let [foo, bar] =<< EOS
+line1
+line2
+EOS
+
+let [foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+ let [foo,
+ \ bar] =<< EOS
+line1
+line2
+EOS
+
+let g:foo =<< END
+line1
+line2
+END
+
+ let g:foo =<< END
+line1
+line2
+END
+
+let [g:foo, g:bar] =<< EOS
+line1
+line2
+EOS
+
+ let [g:foo, g:bar] =<< EOS
+line1
+line2
+EOS
+
+let [g:foo,
+ \ g:bar] =<< EOS
+line1
+line2
+EOS
+
+ let [g:foo,
+ \ g:bar] =<< EOS
+line1
+line2
+EOS
+
" trim
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 2d7493a8e..df67b72ea 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 <[email protected]>
-" Last Change: 2025 Jun 07
+" Last Change: 2025 Jun 08
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -311,15 +311,16 @@ syn match vimVimVar "\<v:"
nextgroup=vimSubscript,vimVimVarName,vimVarNameError
syn match vimOptionVar "&\%([lg]:\)\="
nextgroup=vimSubscript,vimOptionVarName,vimVarNameError
syn cluster vimSpecialVar
contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->"
contains=vim9Super,vim9This
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\["
nextgroup=vimSubscript
-Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\."
nextgroup=vimOper contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
+Vim9 syn match vim9LhsVariable "\s\=\%([bwgt]:\)\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
skipwhite nextgroup=vimLetHeredoc contains=vimVarScope
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\["
nextgroup=vimSubscript
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\."
nextgroup=vimOper contains=vim9Super,vim9This
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->"
contains=vim9Super,vim9This
-Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\=="
contains=vimVar,@vimSpecialVar
-Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.="
contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\=="
contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+=<<" skipwhite
nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.="
contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
@@ -494,7 +495,7 @@ syn match vim9LambdaOperatorComment contained "#.*"
skipwhite skipempty nextgrou
syn cluster vimFuncList
contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList
contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHeredoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+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
@@ -1023,11 +1024,20 @@ syn match vimSetMod contained "
\@1<=\%(&vim\=\|[!&?<]\)"
" Variable Declarations: {{{2
" =====================
-VimL syn keyword vimLet let skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList
-VimL syn keyword vimConst cons[t] skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList
+VimL syn keyword vimLet let skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
+VimL syn keyword vimConst cons[t] skipwhite
nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
syn region vimVarList contained
\ start="\[" end="]"
+ \ skipwhite nextgroup=vimLetHeredoc
\ contains=@vimContinue,@vimSpecialVar,vimVar
+syn match vimLetVar contained
"\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite
nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript
+hi link vimLetVar vimVar
+syn region vimLetVarSubscript contained
+ \ matchgroup=vimSubscriptBracket
+ \ start="\S\@1<=\["
+ \ end="]"
+ \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc
+ \ contains=@vimExprList
VimL syn keyword vimUnlet unl[et] skipwhite
nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained " \@1<=!" skipwhite
nextgroup=vimUnletVars
@@ -1036,17 +1046,68 @@ syn region vimUnletVars contained
\ nextgroup=vimCmdSep,vimComment
\ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1\=\z2$' extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop
end='^\z1$' extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1\=\z2$' contains=@vimStringInterpolation
extend
-VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart
start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)'
matchgroup=vimLetHeredocStop end='^\z1$' contains=@vimStringInterpolation extend
+" TODO: type error after register or environment variables (strings)
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1\=\z2$"
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="=<<\%(\s*\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop end="^\z1$"
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \
start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1\=\z2$"
+ \ contains=@vimStringInterpolation
+ \ extend
+VimFoldh syn region vimLetHeredoc contained
+ \ matchgroup=vimLetHeredocStart
+ \ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)"
+ \ matchgroup=vimLetHeredocStop
+ \ end="^\z1$"
+ \ contains=@vimStringInterpolation
+ \ extend
Vim9 syn keyword vim9Const const skipwhite
nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Final final skipwhite
nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Var var skipwhite
nextgroup=vim9Variable,vim9VariableList
-syn match vim9Variable contained "\<\h\w*\>" skipwhite
nextgroup=vimTypeSep,vimLetHeredoc,vimOper
-syn region vim9VariableList contained start="\[" end="]"
contains=@vimContinue,@vimSpecialVar,vim9Variable
+syn match vim9Variable contained "\<\h\w*\>" skipwhite
nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper
+syn region vim9VariableList contained start="\[" end="]"
contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite
nextgroup=vimLetHeredoc
+
+syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|
\)\@=" skipwhite nextgroup=@vim9VariableType
+syn keyword vim9VariableType contained any blob bool
channel float job number string void skipwhite nextgroup=vimLetHeredoc
+syn match vim9VariableType contained "\<\%(func\)\>"
skipwhite nextgroup=vimLetHeredoc
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<func("
+ \ end=")"
+ \ skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc
+ \ contains=@vim9Continue,@vim9VariableType
+ \ transparent
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<tuple<"
+ \ end=">"
+ \ skipwhite nextgroup=vimLetHeredoc
+ \ contains=@vim9Continue,@vim9VariableType
+ \ transparent
+syn region vim9VariableCompoundType contained
+ \ matchgroup=vim9VariableType
+ \ start="\<\%(list\|dict\)<"
+ \ end=">"
+ \ skipwhite nextgroup=vimLetHeredoc
+ \ contains=@vim9VariableType
+ \ oneline
+ \ transparent
+syn match vim9VariableUserType contained
"\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc
+
+syn cluster vim9VariableType
contains=vim9VariableType,vim9VariableCompoundType,vim9VariableUserType
" Lockvar and Unlockvar: {{{2
" =====================
@@ -2419,6 +2480,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vim9Type vimCommand
hi def link vim9TypeEquals vimOper
hi def link vim9Variable vimVar
+ hi def link vim9VariableType vimType
hi def link vim9Var vimCommand
hi def link vim9Vim9ScriptArg Special
hi def link vim9Vim9Script vimCommand
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uP4R7-00BsWx-Ak%40256bit.org.