runtime(vim): Update base-syntax, improve script-interface command highlighting
- Normalise interface heredoc highlighting with that used for
:let-heredocs.
- Remove interface feature testing. The Lua and Python interface
command scripts are now highlighted by default. Loading all syntax
files incurs an undesirable load-time burden so highlighting of the
less popular MzScheme, Perl, Ruby and Tcl interfaces is disabled by
default. g:vimsyn_embed can still be used to customise the supported
interfaces.
- Always highlight interface ex-commands as valid commands, even when
the corresponding command-script highlighting is disabled.
- Highlight simple command-script statements as well as heredocs.
- Remove error highlighting of heredoc and statement command-script
regions when an interface is disabled. These are now highlighted as
plain text.
- Allow indented heredoc end tokens when "trim" is specified.
- Match interface heredocs in :def functions.
- Fix runaway vimEmbedError regions. These regions have been removed.
- Use python2 syntax for :python, and :pythonx when 'pyxversion' is
appropriately set.
closes: #15522
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim
index 07db6fe..f37f046 100644
--- a/runtime/syntax/generator/gen_syntax_vim.vim
+++ b/runtime/syntax/generator/gen_syntax_vim.vim
@@ -1,7 +1,7 @@
" Vim syntax file generator
-" Language: Vim script
-" Maintainer: Hirohito Higashi (h_east)
-" Last Change: 2025 Apr 27
+" Language: Vim script
+" Maintainer: Hirohito Higashi (h_east)
+" Last Change: 2025 May 16
let s:keepcpo= &cpo
set cpo&vim
@@ -301,14 +301,32 @@
lvimgrep
lvimgrepadd
make
+ lua
+ luado
+ luafile
map
mapclear
match
+ mzscheme
+ mzfile
noremap
new
normal
+ perl
+ perldo
popup
public
+ python
+ pyfile
+ pydo
+ python3
+ py3
+ py3do
+ py3file
+ pythonx
+ pyx
+ pyxdo
+ pyxfile
redir
return
set
@@ -321,6 +339,9 @@
static
substitute
syntax
+ tcl
+ tcldo
+ tclfile
this
throw
type
diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base
index 7acda40..4ab45b9 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
-" Last Change: 2025 May 04
+" Last Change: 2025 May 16
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -233,7 +233,7 @@
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -400,7 +400,7 @@
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHeredoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
@@ -899,16 +899,16 @@
\ 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
+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
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 match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHeredoc,vimOper
syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
" Lockvar and Unlockvar: {{{2
@@ -1488,6 +1488,345 @@
" ==================
syn match vimCtrlChar "[--]"
+" Embedded Scripts: {{{2
+" ================
+" perl,ruby : Benoit Cerrina
+" python,tcl : Johannes Zellner
+" mzscheme, lua : Charles Campbell
+
+" Allows users to specify the type of embedded script highlighting
+" they want: (lua/mzscheme/perl/python/ruby/tcl support)
+" g:vimsyn_embed == 0 : don't embed any scripts
+" g:vimsyn_embed =~# 'l' : embed Lua
+" g:vimsyn_embed =~# 'm' : embed MzScheme
+" g:vimsyn_embed =~# 'p' : embed Perl
+" g:vimsyn_embed =~# 'P' : embed Python
+" g:vimsyn_embed =~# 'r' : embed Ruby
+" g:vimsyn_embed =~# 't' : embed Tcl
+
+let s:interfaces = get(g:, "vimsyn_embed", "lP")
+
+" [-- lua --] {{{3
+if s:interfaces =~# 'l'
+ syn include @vimLuaScript syntax/lua.vim
+ unlet b:current_syntax
+ syn clear luaParenError " See issue #11277
+endif
+
+syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement
+syn keyword vimLua luado skipwhite nextgroup=vimLuaStatement
+syn keyword vimLua luafile
+
+syn region vimLuaStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimLuaScript,@vimContinue
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimLuaScript
+
+" [-- mzscheme --] {{{3
+if s:interfaces =~# 'm'
+ let s:iskKeep = &isk
+ syn include @vimMzSchemeScript syntax/scheme.vim
+ unlet b:current_syntax
+ let &isk = s:iskKeep
+endif
+
+syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement
+syn keyword vimMzScheme mzf[ile]
+
+syn region vimMzSchemeStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimMzSchemeScript,@vimContinue
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimMzSchemeScript
+
+" [-- perl --] {{{3
+if s:interfaces =~# 'p'
+ syn include @vimPerlScript syntax/perl.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPerl pe[rl] skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement
+syn keyword vimPerl perld[o] skipwhite nextgroup=vimPerlStatement
+
+syn region vimPerlStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPerlScript,@vimContinue
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPerlScript
+
+" [-- python --] {{{3
+if s:interfaces =~# 'P'
+ syn include @vimPythonScript syntax/python2.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPython py[thon] skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement
+syn keyword vimPython pydo skipwhite nextgroup=vimPythonStatement
+syn keyword vimPython pyfile
+
+syn region vimPythonStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPythonScript,@vimContinue
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPythonScript
+
+" [-- python3 --] {{{3
+if s:interfaces =~# 'P'
+ syn include @vimPython3Script syntax/python.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPython3 python3 py3 skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement
+syn keyword vimPython3 py3do skipwhite nextgroup=vimPython3Statement
+syn keyword vimPython3 py3file
+
+syn region vimPython3Statement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPython3Script,@vimContinue
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPython3Script
+
+" [-- pythonx --] {{{3
+if s:interfaces =~# 'P'
+ if &pyxversion == 2
+ syn cluster vimPythonXScript contains=@vimPythonScript
+ else
+ syn cluster vimPythonXScript contains=@vimPython3Script
+ endif
+endif
+
+syn keyword vimPythonX pythonx pyx skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement
+syn keyword vimPythonX pyxdo skipwhite nextgroup=vimPythonXStatement
+syn keyword vimPythonX pyxfile
+
+syn region vimPythonXStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPythonXScript,@vimContinue
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPythonXScript
+
+" [-- ruby --] {{{3
+if s:interfaces =~# 'r'
+ syn include @vimRubyScript syntax/ruby.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimRuby rub[y] skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement
+syn keyword vimRuby rubyd[o] skipwhite nextgroup=vimRubyStatement
+syn keyword vimRuby rubyf[ile]
+
+syn region vimRubyStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimRubyScript,@vimContinue
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\.$+
+ \ contains=@vimRubyScript
+
+" [-- tcl --] {{{3
+if s:interfaces =~# 't'
+ syn include @vimTclScript syntax/tcl.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimTcl tcl skipwhite nextgroup=vimTclHeredoc,vimTclStatement
+syn keyword vimTcl tcld[o] skipwhite nextgroup=vimTclStatement
+syn keyword vimTcl tclf[ile]
+syn region vimTclStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimTclScript,@vimContinue
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimTclScript
+
+unlet s:interfaces
" Beginners - Patterns that involve ^ {{{2
" =========
Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
@@ -1534,206 +1873,6 @@
syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
endif
-" Embedded Scripts: {{{2
-" ================
-" perl,ruby : Benoit Cerrina
-" python,tcl : Johannes Zellner
-" mzscheme, lua : Charles Campbell
-
-" Allows users to specify the type of embedded script highlighting
-" they want: (perl/python/ruby/tcl support)
-" g:vimsyn_embed == 0 : don't embed any scripts
-" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
-" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
-" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
-" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
-" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
-" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
-if !exists("g:vimsyn_embed")
- let g:vimsyn_embed= "lmpPr"
-endif
-
-" [-- lua --] {{{3
-let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
-if !filereadable(s:luapath)
- for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
- if filereadable(fnameescape(s:luapath))
- let s:luapath= fnameescape(s:luapath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimLuaRegion
- exe "syn include @vimLuaScript ".s:luapath
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
- syn cluster vimFuncBodyList add=vimLuaRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:luapath
-
-" [-- perl --] {{{3
-let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
-if !filereadable(s:perlpath)
- for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
- if filereadable(fnameescape(s:perlpath))
- let s:perlpath= fnameescape(s:perlpath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimPerlRegion
- exe "syn include @vimPerlScript ".s:perlpath
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
- syn cluster vimFuncBodyList add=vimPerlRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:perlpath
-
-" [-- ruby --] {{{3
-let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
-if !filereadable(s:rubypath)
- for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
- if filereadable(fnameescape(s:rubypath))
- let s:rubypath= fnameescape(s:rubypath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
- syn cluster vimFuncBodyList add=vimRubyRegion
- unlet! b:current_syntax
- exe "syn include @vimRubyScript ".s:rubypath
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
- syn cluster vimFuncBodyList add=vimRubyRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:rubypath
-
-" [-- python --] {{{3
-let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
-if !filereadable(s:pythonpath)
- for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
- if filereadable(fnameescape(s:pythonpath))
- let s:pythonpath= fnameescape(s:pythonpath)
- break
- endif
- endfor
-endif
-if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimPythonRegion
- exe "syn include @vimPythonScript ".s:pythonpath
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
- syn cluster vimFuncBodyList add=vimPythonRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:pythonpath
-
-" [-- tcl --] {{{3
-if has("win32") || has("win95") || has("win64") || has("win16")
- " apparently has("tcl") has been hanging vim on some windows systems with cygwin
- let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
-else
- let s:trytcl= 1
-endif
-if s:trytcl
- let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
- if !filereadable(s:tclpath)
- for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
- if filereadable(fnameescape(s:tclpath))
- let s:tclpath= fnameescape(s:tclpath)
- break
- endif
- endfor
- endif
- if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimTclRegion
- exe "syn include @vimTclScript ".s:tclpath
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
- syn cluster vimFuncBodyList add=vimTclScript
- else
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
- endif
- unlet s:tclpath
-else
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:trytcl
-
-" [-- mzscheme --] {{{3
-let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
-if !filereadable(s:mzschemepath)
- for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
- if filereadable(fnameescape(s:mzschemepath))
- let s:mzschemepath= fnameescape(s:mzschemepath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
- unlet! b:current_syntax
- let s:iskKeep= &isk
- syn cluster vimFuncBodyList add=vimMzSchemeRegion
- exe "syn include @vimMzSchemeScript ".s:mzschemepath
- let &isk= s:iskKeep
- unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
- syn cluster vimFuncBodyList add=vimMzSchemeRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:mzschemepath
-
" Synchronize (speed) {{{2
"============
if exists("g:vimsyn_minlines")
@@ -1753,7 +1892,6 @@
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
- hi def link vimEmbedError vimError
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError
@@ -1882,11 +2020,12 @@
hi def link vimLambdaBrace Delimiter
hi def link vimLambdaOperator vimOper
hi def link vimLet vimCommand
- hi def link vimLetHereDoc vimString
- hi def link vimLetHereDocStart Special
- hi def link vimLetHereDocStop Special
+ hi def link vimLetHeredoc vimString
+ hi def link vimLetHeredocStart Special
+ hi def link vimLetHeredocStop Special
hi def link vimLetRegister vimRegister
hi def link vimLineComment vimComment
+ hi def link vimLua vimCommand
hi def link vimMake vimCommand
hi def link vimMakeadd vimCommand
hi def link vimMakeBang vimBang
@@ -1912,6 +2051,8 @@
hi def link vimMenutranslateComment vimComment
hi def link vim9MethodName vimFuncName
hi def link vimMtchComment vimComment
+ hi def link vimMzScheme vimCommand
+ hi def link vimNonText NonText
hi def link vimNormal vimCommand
hi def link vimNotation Special
hi def link vimNotFunc vimCommand
@@ -1931,8 +2072,12 @@
hi def link vimPatSepZone vimString
hi def link vimPatSepZ vimPatSep
hi def link vimPattern Type
+ hi def link vimPerl vimCommand
hi def link vimPlainMark vimMark
hi def link vimPlainRegister vimRegister
+ hi def link vimPython vimCommand
+ hi def link vimPython3 vimCommand
+ hi def link vimPythonX vimCommand
hi def link vimQuoteEscape vimEscape
hi def link vimRedir vimCommand
hi def link vimRedirBang vimBang
@@ -1942,7 +2087,10 @@
hi def link vimRedirEnd Special
hi def link vimRedirRegister vimRegister
hi def link vimRegister SpecialChar
+ hi def link vimRuby vimCommand
hi def link vimScriptDelim Comment
+ hi def link vimScriptHeredocStart vimLetHeredocStart
+ hi def link vimScriptHeredocStop vimLetHeredocStop
hi def link vimSearch vimString
hi def link vimSearchDelim Delimiter
hi def link vimSep Delimiter
@@ -2007,6 +2155,7 @@
hi def link vimSynSpell Type
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
+ hi def link vimTcl vimCommand
hi def link vimThrow vimCommand
hi def link vimTodo Todo
hi def link vimType Type
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump
new file mode 100644
index 0000000..d2f0702
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|l|u|a|,| |:|l|u|a|d|o| |a|n|d| |:|l|u|a|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@32
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|l|"| +0#0000000&@31
+| +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&|f|l|"| +0#0000000&@28
+| +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| |l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump
new file mode 100644
index 0000000..6e9e4e8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @53
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @40
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @41
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+@57|1|9|,|3| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump
new file mode 100644
index 0000000..93e67aa
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_02.dump
@@ -0,0 +1,20 @@
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+@57|3|7|,|7| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump
new file mode 100644
index 0000000..5c68059
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|0|-|1| @7|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump
new file mode 100644
index 0000000..2e8168c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+@57|7|3|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump
new file mode 100644
index 0000000..fe494cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump
new file mode 100644
index 0000000..b031e67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+@57|1|0|9|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump
new file mode 100644
index 0000000..3073769
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump b/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump
new file mode 100644
index 0000000..7e70c98
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_lua_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|4|5|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump
new file mode 100644
index 0000000..736e6d8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@36
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|m|"| +0#0000000&@31
+| +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&|f|m|"| +0#0000000&@28
+| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump
new file mode 100644
index 0000000..900e143
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+@57|1|9|,|3| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump
new file mode 100644
index 0000000..ee29fa2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)+0#0000000&| @43
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+@57|3|7|,|7| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump
new file mode 100644
index 0000000..403b9d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_03.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d+0#00e0e07&|i|s|p|l|a|y| +0#0000000&|"+0#e000002&|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @28
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|0|-|1| @7|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump
new file mode 100644
index 0000000..2e8168c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+@57|7|3|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump
new file mode 100644
index 0000000..fe494cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump
new file mode 100644
index 0000000..b031e67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+@57|1|0|9|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump
new file mode 100644
index 0000000..3073769
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump
new file mode 100644
index 0000000..7e70c98
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_mzscheme_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|4|5|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump
new file mode 100644
index 0000000..4af9df1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| |c|o|m@1|a|n|d|s| +0#0000000&@40
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|p|"| +0#0000000&@31
+| +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&|f|p|"| +0#0000000&@28
+| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump
new file mode 100644
index 0000000..900e143
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+@57|1|9|,|3| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump
new file mode 100644
index 0000000..aa39d8f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+@57|3|7|,|7| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump
new file mode 100644
index 0000000..7624326
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|c|r|i|p|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @48
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|0|-|1| @7|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump
new file mode 100644
index 0000000..ce18b19
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+@57|7|3|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump
new file mode 100644
index 0000000..fe494cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump
new file mode 100644
index 0000000..b031e67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+@57|1|0|9|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump
new file mode 100644
index 0000000..3073769
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump b/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump
new file mode 100644
index 0000000..7e70c98
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_perl_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|4|5|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump
new file mode 100644
index 0000000..a83df79
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o|,| |:|p|y|x|f|i|l|e| +0#0000000&@40
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31
+| +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&|f|P|"| +0#0000000&@28
+| +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| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@58
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump
new file mode 100644
index 0000000..dfb52d4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_01.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @45
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @36
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @37
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+@57|1|9|,|5| @9|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump
new file mode 100644
index 0000000..29b34d5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p|y| +0#0000000&@58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@46
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+@57|3|7|,|0|-|1| @7|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump
new file mode 100644
index 0000000..bd69d5b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|d|o| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@44
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|f|i|l|e| |f|o@1|.|l|u|a| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@43
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|f|i|l|e| |f|o@1|.|r|k|t| +0#0000000#ffffff0@58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+@57|5@1|,|0|-|1| @7|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump
new file mode 100644
index 0000000..bd85be0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| +0#0000000#ffffff0@48
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@41
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l|d|o| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@39
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+@57|7|3|,|7| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump
new file mode 100644
index 0000000..7242a31
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @47
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+@57|9|1|,|0|-|1| @7|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump
new file mode 100644
index 0000000..32f27e0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1>p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| +0#0000000#ffffff0@52
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|d|o| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@43
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|f|i|l|e| |f|o@1|.|r|b| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+@57|1|0|9|,|3| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump b/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump
new file mode 100644
index 0000000..dd5076e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python3_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| +0#0000000#ffffff0@53
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@47
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|d|o| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|f|i|l|e| |f|o@1|.|t|c|l| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|7|,|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_00.dump b/runtime/syntax/testdir/dumps/vim_ex_python_00.dump
new file mode 100644
index 0000000..181e58f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@31
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@28
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@28
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31
+| +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&|f|P|"| +0#0000000&@28
+| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_01.dump b/runtime/syntax/testdir/dumps/vim_ex_python_01.dump
new file mode 100644
index 0000000..0c19078
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1>.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+@57|1|9|,|1| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_02.dump b/runtime/syntax/testdir/dumps/vim_ex_python_02.dump
new file mode 100644
index 0000000..d0df28f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+@57|3|7|,|1| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_03.dump b/runtime/syntax/testdir/dumps/vim_ex_python_03.dump
new file mode 100644
index 0000000..6efefda
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@57|5@1|,|7| @9|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_04.dump b/runtime/syntax/testdir/dumps/vim_ex_python_04.dump
new file mode 100644
index 0000000..e110c12
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41
+@57|7|3|,|7| @9|4|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_05.dump b/runtime/syntax/testdir/dumps/vim_ex_python_05.dump
new file mode 100644
index 0000000..d8a7ca0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @47
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+@57|9|1|,|0|-|1| @7|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_06.dump b/runtime/syntax/testdir/dumps/vim_ex_python_06.dump
new file mode 100644
index 0000000..4eb24b9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @47
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+@57|1|0|9|,|0|-|1| @6|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_07.dump b/runtime/syntax/testdir/dumps/vim_ex_python_07.dump
new file mode 100644
index 0000000..43d833f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_08.dump b/runtime/syntax/testdir/dumps/vim_ex_python_08.dump
new file mode 100644
index 0000000..e181dd6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+@57|1|4|5|,|0|-|1| @6|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_python_09.dump b/runtime/syntax/testdir/dumps/vim_ex_python_09.dump
new file mode 100644
index 0000000..4382132
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_python_09.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|5|9|,|0|-|1| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump
new file mode 100644
index 0000000..5c5ae91
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o|,| |:|p|y|x|f|i|l|e| +0#0000000&@40
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|P|"| +0#0000000&@31
+| +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&|f|P|"| +0#0000000&@28
+| +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| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@58
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump
new file mode 100644
index 0000000..aaaf631
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_01.dump
@@ -0,0 +1,20 @@
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| +0#0000000&@62
+||+0#0000e05#a8a8a8255| |p+0#00e0e07#ffffff0|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @49
+||+0#0000e05#a8a8a8255| |.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3>p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)+0#0000000&| @45
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)+0#0000000&| @36
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#af5f00255&|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@51
+|2+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)+0#0000000&| @37
+|2+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+@57|1|9|,|5| @9|1@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump
new file mode 100644
index 0000000..e2b10d7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @32
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p|y| +0#0000000&@58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@46
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+@57|3|7|,|0|-|1| @7|2|6|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump
new file mode 100644
index 0000000..bd69d5b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|d|o| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@44
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@36
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#ffffff16#ff404010|u|a|f|i|l|e| |f|o@1|.|l|u|a| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@51
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| +0#0000000#ffffff0@43
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|s|c|h|e|m|e| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| +0#0000000#ffffff0@28
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#ffffff16#ff404010|z|f|i|l|e| |f|o@1|.|r|k|t| +0#0000000#ffffff0@58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+@57|5@1|,|0|-|1| @7|4|2|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump
new file mode 100644
index 0000000..bd85be0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| +0#0000000#ffffff0@48
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@41
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#ffffff16#ff404010|e|r|l|d|o| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| +0#0000000#ffffff0@39
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| +0#0000000#ffffff0@33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|c|r|i|p|t|"|)+0#0000000&| @48
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+@57|7|3|,|7| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump
new file mode 100644
index 0000000..bf180f7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)+0#0000000&| @33
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)+0#0000000&| @47
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+@57|9|1|,|0|-|1| @7|7|3|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump
new file mode 100644
index 0000000..521c2ae
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#00e0e07&|r|i|n|t|(+0#0000000&|"+0#e000002&|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)+0#0000000&| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@55
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1>p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| +0#0000000#ffffff0@52
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|d|o| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@43
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#ffffff16#ff404010|u|b|y|f|i|l|e| |f|o@1|.|r|b| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+@57|1|0|9|,|3| @8|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump b/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump
new file mode 100644
index 0000000..dd5076e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_pythonx_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |<@1| |t|r|i|m| |E|O|F| | +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@1|p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| +0#0000000#ffffff0@53
+| +0#0000e05#a8a8a8255@1|E+0#ffffff16#ff404010|O|F| +0#0000000#ffffff0@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@47
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5>"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|d|o| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| +0#0000000#ffffff0@45
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|"|\| |c|o|m@1|e|n|t| +0#0000000#ffffff0@56
+| +0#0000e05#a8a8a8255@1| +0#ffffff16#ff404010@5|\| |p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000#ffffff0@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#ffffff16#ff404010|c|l|f|i|l|e| |f|o@1|.|t|c|l| +0#0000000#ffffff0@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2|7|,|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump
new file mode 100644
index 0000000..14dc87e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@29
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|r|"| +0#0000000&@31
+| +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&|f|r|"| +0#0000000&@28
+| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump
new file mode 100644
index 0000000..900e143
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+@57|1|9|,|3| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump
new file mode 100644
index 0000000..aa39d8f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+@57|3|7|,|7| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump
new file mode 100644
index 0000000..5c68059
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|0|-|1| @7|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump
new file mode 100644
index 0000000..2e8168c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+@57|7|3|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump
new file mode 100644
index 0000000..fe494cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump
new file mode 100644
index 0000000..b031e67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+@57|1|0|9|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump
new file mode 100644
index 0000000..2e87ddb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| >r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|c|r|i|p|t|"+0#e000e06&| +0#0000000&@52
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t|"+0#e000e06&|;+0#0000000&| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"+0#e000e06&| +0#0000000&@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t|"+0#e000e06&|;+0#0000000&| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"+0#e000e06&|R+0#e000002&|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"+0#e000e06&| +0#0000000&@37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump b/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump
new file mode 100644
index 0000000..7e70c98
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_ruby_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>p|u|t|s| |"|T|C|L| |s|c|r|i|p|t|"| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|4|5|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump
new file mode 100644
index 0000000..958ae82
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_00.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |V|i|m| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| |c|o|m@1|a|n|d|s| +0#0000000&@32
+| +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|_|e|m|b|e|d| |=| |"+0#e000002&|t|"| +0#0000000&@31
+| +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&|f|t|"| +0#0000000&@28
+| +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@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| |E|O|F| +0#0000000&@62
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump
new file mode 100644
index 0000000..900e143
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_01.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|<+0#e000e06&@1| +0#0000000&@66
+| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @53
+| +0#0000e05#a8a8a8255@1|.+0#e000e06#ffffff0| +0#0000000&@71
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1>l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| +0#0000000&@59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t|"|)| @49
+| +0#0000e05#a8a8a8255@1| +0#e000e06#ffffff0@1|.| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |f+0#af5f00255#ffffff0|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@58
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|f|u|n|c|"|)| @40
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d|f|u|n|c|t|i|o|n| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@48
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |d+0#af5f00255#ffffff0|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@63
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|l+0#af5f00255&|u|a| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@55
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@3|p|r|i|n|t|(|"|L|u|a| |s|c|r|i|p|t| |i|n| |:|d|e|f|"|)| @41
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+@57|1|9|,|3| @10|9|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump
new file mode 100644
index 0000000..aa39d8f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_02.dump
@@ -0,0 +1,20 @@
+||+0#0000e05#a8a8a8255| | +0#e000e06#ffffff0@1|E|O|F| +0#0000000&@67
+||+0#0000e05#a8a8a8255| |e+0#af5f00255#ffffff0|n|d@1|e|f| +0#0000000&||| |c+0#af5f00255&|a|l@1| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @46
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5>\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|d|o| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t|"|)| @44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|L|u|a| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @36
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|l+0#af5f00255#ffffff0|u|a|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|l+0#0000000&|u|a| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|m|z|s|c|h|e|m|e| |a|n|d| |:|m|z|f|i|l|e| +0#0000000&@49
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@52
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|c|r|i|p|t|"|)| @43
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+@57|3|7|,|7| @9|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump
new file mode 100644
index 0000000..5c68059
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|s|c|h|e|m|e| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|(|d|i|s|p|l|a|y| |"|M|z|S|c|h|e|m|e| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @28
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|m+0#af5f00255#ffffff0|z|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|k|t| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|e|r|l| |a|n|d| |:|p|e|r|l|d|o| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|e|r|l| |s|c|r|i|p|t|\|n|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|5@1|,|0|-|1| @7|3|5|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump
new file mode 100644
index 0000000..2e8168c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_04.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|e|r|l|d|o| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t|\|n|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|e|r|l| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|\|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|,| |:|p|y|d|o| |a|n|d| |:|p|y|f|i|l|e| +0#0000000&@44
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@54
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|c|r|i|p|t|"|)| @48
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t|"|)|;| @41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+@57|7|3|,|0|-|1| @7|4|8|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump
new file mode 100644
index 0000000..fe494cd
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_05.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"|)| @33
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @59
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>"+0&#ffffff0| |:|p|y|t|h|o|n|3|,| |:|p|y|3|d|o| |a|n|d| |:|p|y|3|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|3| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|3| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|9|1|,|1| @9|6|1|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump
new file mode 100644
index 0000000..b031e67
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_06.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|3|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|p|y|t|h|o|n|x|,| |:|p|y|x|d|o| |a|n|d| |:|p|y|x|f|i|l|e| +0#0000000&@41
+| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@53
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|c|r|i|p|t|"|)| @47
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|t|h|o|n|x| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|d|o| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)|;| @39
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|r|i|n|t|(|"|P|y|t|h|o|n|X| |s|t|a|t|e|m|e|n|t|"|)| @38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+@57|1|0|9|,|0|-|1| @6|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump
new file mode 100644
index 0000000..3073769
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_07.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|p+0#af5f00255#ffffff0|y|x|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|p+0#0000000&|y| @58
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|r|u|b|y|,| |:|r|u|b|y|d|o| |a|n|d| |:|r|u|b|y|f|i|l|e| +0#0000000&@42
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1>r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|p|u|t|s| |"|R|u|b|y| |s|c|r|i|p|t|"| @52
+| +0#0000e05#a8a8a8255@1|E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|d|o| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t|"|;| @43
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p|u|t|s| |"|R|u|b|y| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| @37
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|r+0#af5f00255#ffffff0|u|b|y|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|r+0#0000000&|b| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+@57|1|2|7|,|1| @8|8|7|%|
diff --git a/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump b/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump
new file mode 100644
index 0000000..3a29c20
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_ex_tcl_08.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |:|t|c|l|,| |:|t|c|l|d|o| |a|n|d| |:|t|c|l|f|i|l|e| +0#0000000&@45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|-+0#0000e05#a8a8a8255| |t+0#af5f00255#ffffff0|c|l| +0#0000000&|<+0#e000e06&@1| |t|r|i|m| |E|O|F| +0#0000000&@57
+||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1>p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|c|r|i|p|t|"| +0#0000000&@53
+||+0#0000e05#a8a8a8255| |E+0#e000e06#ffffff0|O|F| +0#0000000&@69
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t|"|;+0#0000000&| @47
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000&@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|d|o| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t|"|;+0#0000000&| @45
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|"+0#0000e05&|\| |c|o|m@1|e|n|t| +0#0000000&@56
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|\+0#e000e06&| +0#0000000&|p+0#af5f00255&|u|t|s| +0#0000000&|"+0#e000002&|T|C|L| |s|t|a|t|e|m|e|n|t| |a|g|a|i|n|"| +0#0000000&@38
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+| +0#0000e05#a8a8a8255@1|t+0#af5f00255#ffffff0|c|l|f|i|l|e| +0#0000000&|f|o@1|.+0#af5f00255&|t+0#0000000&|c|l| @57
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
+|~+0#4040ff13&| @73
+| +0#0000000&@56|1|4|5|,|3| @8|B|o|t|
diff --git a/runtime/syntax/testdir/input/vim_ex_lua.vim b/runtime/syntax/testdir/input/vim_ex_lua.vim
new file mode 100644
index 0000000..55d151e
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_lua.vim
@@ -0,0 +1,157 @@
+" Vim :lua, :luado and :luafile commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "l"
+" VIM_TEST_SETUP let g:vimsyn_folding = "fl"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/testdir/input/vim_ex_mzscheme.vim b/runtime/syntax/testdir/input/vim_ex_mzscheme.vim
new file mode 100644
index 0000000..6844c49
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_mzscheme.vim
@@ -0,0 +1,157 @@
+" Vim :mzscheme and :mzfile commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "m"
+" VIM_TEST_SETUP let g:vimsyn_folding = "fm"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/testdir/input/vim_ex_perl.vim b/runtime/syntax/testdir/input/vim_ex_perl.vim
new file mode 100644
index 0000000..cccab18
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_perl.vim
@@ -0,0 +1,157 @@
+" Vim :perl and :perldo commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "p"
+" VIM_TEST_SETUP let g:vimsyn_folding = "fp"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/testdir/input/vim_ex_python.vim b/runtime/syntax/testdir/input/vim_ex_python.vim
new file mode 100644
index 0000000..8adc0e7
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_python.vim
@@ -0,0 +1,159 @@
+" Vim :python, :pydo and :pyfile commands
+" Vim :python3, :py3do and :py3file commands
+" Vim :pythonx, :pyxdo and :pyxfile commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "P"
+" VIM_TEST_SETUP let g:vimsyn_folding = "fP"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/testdir/input/vim_ex_ruby.vim b/runtime/syntax/testdir/input/vim_ex_ruby.vim
new file mode 100644
index 0000000..32a39de
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_ruby.vim
@@ -0,0 +1,157 @@
+" Vim :ruby, :rubydo and :rubyfile commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "r"
+" VIM_TEST_SETUP let g:vimsyn_folding = "fr"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/testdir/input/vim_ex_tcl.vim b/runtime/syntax/testdir/input/vim_ex_tcl.vim
new file mode 100644
index 0000000..2558bb8
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_tcl.vim
@@ -0,0 +1,157 @@
+" Vim :tcl, :tcldo and :tclfile commands
+" VIM_TEST_SETUP let g:vimsyn_embed = "t"
+" VIM_TEST_SETUP let g:vimsyn_folding = "ft"
+" VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
+
+
+lua << EOF
+print("Lua script")
+EOF
+
+ lua << trim EOF
+ print("Lua script")
+ EOF
+
+lua <<
+print("Lua script")
+.
+
+ lua << trim
+ print("Lua script")
+ .
+
+function Foo()
+ lua << trim EOF
+ print("Lua script in :func")
+ EOF
+endfunction | call Foo()
+
+def Bar()
+ lua << trim EOF
+ print("Lua script in :def")
+ EOF
+enddef | call Bar()
+
+lua print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luado print("Lua statement")
+ "\ comment
+ \ print("Lua statement again")
+
+luafile foo.lua
+
+
+" :mzscheme and :mzfile
+
+mzscheme << trim EOF
+ (display "MzScheme script")
+EOF
+
+mzscheme (display "MzScheme statement")
+ "\ comment
+ \ (display "MzScheme statement again")
+
+mzfile foo.rkt
+
+
+" :perl and :perldo
+
+perl << trim EOF
+ print("Perl script\n")
+EOF
+
+perl print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+perldo print("Perl statement\n");
+ "\ comment
+ \ print("Perl statement again\n")
+
+
+" :python, :pydo and :pyfile
+
+python << trim EOF
+ print("Python script")
+EOF
+
+python print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pydo print("Python statement");
+ "\ comment
+ \ print("Python statement again")
+
+pyfile foo.py
+
+
+" :python3, :py3do and :py3file
+
+python3 << trim EOF
+ print("Python3 script")
+EOF
+
+python3 print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3do print("Python3 statement");
+ "\ comment
+ \ print("Python3 statement")
+
+py3file foo.py
+
+
+" :pythonx, :pyxdo and :pyxfile
+
+pythonx << trim EOF
+ print("PythonX script")
+EOF
+
+pythonx print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxdo print("PythonX statement");
+ "\ comment
+ \ print("PythonX statement")
+
+pyxfile foo.py
+
+
+" :ruby, :rubydo and :rubyfile
+
+ruby << trim EOF
+ puts "Ruby script"
+EOF
+
+ruby puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubydo puts "Ruby statement";
+ "\ comment
+ \ puts "Ruby statement again"
+
+rubyfile foo.rb
+
+
+" :tcl, :tcldo and :tclfile
+
+tcl << trim EOF
+ puts "TCL script"
+EOF
+
+tcl puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tcldo puts "TCL statement";
+ "\ comment
+ \ puts "TCL statement again"
+
+tclfile foo.tcl
+
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 9512ccc..debed2b 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
-" Last Change: 2025 May 14
+" Last Change: 2025 May 16
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -35,10 +35,10 @@
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang'
syn keyword vimCommand contained abo[veleft] al[l] ar[gs] arga[dd] argd[elete] argdo argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bo[tright] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] bro[wse] buffers bufd[o] bun[load] bw[ipeout] c[hange] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd cdo ce[nter] cex[pr] cf[ile] cfd[o] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] chd[ir] changes che[ckpath] checkt[ime] chi[story] cl[ist] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] co[py] col[der] colo[rscheme] com[mand] comc[lear] comp[iler] con[tinue] conf[irm] nextgroup=vimBang
syn keyword vimCommand contained cons[t] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] d[elete] delm[arks] deb[ug] defc[ompile] defe[r] delf[unction] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ev[al] ex exi[t] exu[sage] f[ile] files filet[ype] fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] hi[ghlight] hid[e] his[tory] hor[izontal] ij[ump] il[ist] imp[ort] int[ro] ip[ut] is[earch] isp[lit] j[oin] ju[mps] k kee[pmarks] keepj[umps] keepp[atterns] nextgroup=vimBang
-syn keyword vimCommand contained keepa[lt] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lua luad[o] luaf[ile] lw[indow] ls m[ove] ma[rk] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] mz[scheme] mzf[ile] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] nextgroup=vimBang
-syn keyword vimCommand contained p[rint] pa[ckadd] packl[oadall] pb[uffer] pc[lose] pe[rl] perld[o] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] prof[ile] profd[el] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] py[thon] pyd[o] pyf[ile] py3 py3d[o] python3 py3f[ile] pyx pyxd[o] pythonx pyxf[ile] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] rightb[elow] ru[ntime] rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] nextgroup=vimBang
-syn keyword vimCommand contained scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] tcl tcld[o] tclf[ile] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] nextgroup=vimBang
-syn keyword vimCommand contained uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang
+syn keyword vimCommand contained keepa[lt] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lefta[bove] lex[pr] leg[acy] lf[ile] lfd[o] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lgr[ep] lgrepa[dd] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] ma[rk] marks menut[ranslate] mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noa[utocmd] noh[lsearch] nos[wapfile] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] nextgroup=vimBang
+syn keyword vimCommand contained pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] prof[ile] profd[el] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] rightb[elow] ru[ntime] rub[y] rubyd[o] rubyf[ile] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] san[dbox] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sil[ent] sla[st] sn[ext] so[urce] sp[lit] spe[llgood] spelld[ump] nextgroup=vimBang
+syn keyword vimCommand contained spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sw[apname] synti[me] sync[bind] smi[le] t tN[ext] ta[g] tags tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] te[aroff] ter[minal] tf[irst] tj[ump] tl[ast] tn[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] uns[ilent] up[date] v[global] ve[rsion] verb[ose] vert[ical] vi[sual] vie[w] vim9[cmd] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] winc[md] wind[o] winp[os] nextgroup=vimBang
+syn keyword vimCommand contained wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang
" Lower priority for _new_ to distinguish constructors from the command.
syn match vimCommand contained "\<new\>(\@!"
@@ -286,7 +286,7 @@
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -453,7 +453,7 @@
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
-syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
+syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHeredoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
@@ -954,16 +954,16 @@
\ 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
+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
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 match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHeredoc,vimOper
syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
" Lockvar and Unlockvar: {{{2
@@ -1549,6 +1549,345 @@
" ==================
syn match vimCtrlChar "[--]"
+" Embedded Scripts: {{{2
+" ================
+" perl,ruby : Benoit Cerrina
+" python,tcl : Johannes Zellner
+" mzscheme, lua : Charles Campbell
+
+" Allows users to specify the type of embedded script highlighting
+" they want: (lua/mzscheme/perl/python/ruby/tcl support)
+" g:vimsyn_embed == 0 : don't embed any scripts
+" g:vimsyn_embed =~# 'l' : embed Lua
+" g:vimsyn_embed =~# 'm' : embed MzScheme
+" g:vimsyn_embed =~# 'p' : embed Perl
+" g:vimsyn_embed =~# 'P' : embed Python
+" g:vimsyn_embed =~# 'r' : embed Ruby
+" g:vimsyn_embed =~# 't' : embed Tcl
+
+let s:interfaces = get(g:, "vimsyn_embed", "lP")
+
+" [-- lua --] {{{3
+if s:interfaces =~# 'l'
+ syn include @vimLuaScript syntax/lua.vim
+ unlet b:current_syntax
+ syn clear luaParenError " See issue #11277
+endif
+
+syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement
+syn keyword vimLua luado skipwhite nextgroup=vimLuaStatement
+syn keyword vimLua luafile
+
+syn region vimLuaStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimLuaScript,@vimContinue
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimLuaScript
+VimFoldl syn region vimLuaHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimLuaScript
+
+" [-- mzscheme --] {{{3
+if s:interfaces =~# 'm'
+ let s:iskKeep = &isk
+ syn include @vimMzSchemeScript syntax/scheme.vim
+ unlet b:current_syntax
+ let &isk = s:iskKeep
+endif
+
+syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement
+syn keyword vimMzScheme mzf[ile]
+
+syn region vimMzSchemeStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimMzSchemeScript,@vimContinue
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimMzSchemeScript
+VimFoldm syn region vimMzSchemeHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimMzSchemeScript
+
+" [-- perl --] {{{3
+if s:interfaces =~# 'p'
+ syn include @vimPerlScript syntax/perl.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPerl pe[rl] skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement
+syn keyword vimPerl perld[o] skipwhite nextgroup=vimPerlStatement
+
+syn region vimPerlStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPerlScript,@vimContinue
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPerlScript
+VimFoldp syn region vimPerlHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPerlScript
+
+" [-- python --] {{{3
+if s:interfaces =~# 'P'
+ syn include @vimPythonScript syntax/python2.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPython py[thon] skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement
+syn keyword vimPython pydo skipwhite nextgroup=vimPythonStatement
+syn keyword vimPython pyfile
+
+syn region vimPythonStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPythonScript,@vimContinue
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPythonScript
+VimFoldP syn region vimPythonHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPythonScript
+
+" [-- python3 --] {{{3
+if s:interfaces =~# 'P'
+ syn include @vimPython3Script syntax/python.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimPython3 python3 py3 skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement
+syn keyword vimPython3 py3do skipwhite nextgroup=vimPython3Statement
+syn keyword vimPython3 py3file
+
+syn region vimPython3Statement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPython3Script,@vimContinue
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPython3Script
+VimFoldP syn region vimPython3Heredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPython3Script
+
+" [-- pythonx --] {{{3
+if s:interfaces =~# 'P'
+ if &pyxversion == 2
+ syn cluster vimPythonXScript contains=@vimPythonScript
+ else
+ syn cluster vimPythonXScript contains=@vimPython3Script
+ endif
+endif
+
+syn keyword vimPythonX pythonx pyx skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement
+syn keyword vimPythonX pyxdo skipwhite nextgroup=vimPythonXStatement
+syn keyword vimPythonX pyxfile
+
+syn region vimPythonXStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimPythonXScript,@vimContinue
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimPythonXScript
+VimFoldP syn region vimPythonXHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimPythonXScript
+
+" [-- ruby --] {{{3
+if s:interfaces =~# 'r'
+ syn include @vimRubyScript syntax/ruby.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimRuby rub[y] skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement
+syn keyword vimRuby rubyd[o] skipwhite nextgroup=vimRubyStatement
+syn keyword vimRuby rubyf[ile]
+
+syn region vimRubyStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimRubyScript,@vimContinue
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimRubyScript
+VimFoldr syn region vimRubyHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\.$+
+ \ contains=@vimRubyScript
+
+" [-- tcl --] {{{3
+if s:interfaces =~# 't'
+ syn include @vimTclScript syntax/tcl.vim
+ unlet b:current_syntax
+endif
+
+syn keyword vimTcl tcl skipwhite nextgroup=vimTclHeredoc,vimTclStatement
+syn keyword vimTcl tcld[o] skipwhite nextgroup=vimTclStatement
+syn keyword vimTcl tclf[ile]
+syn region vimTclStatement contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimTclScript,@vimContinue
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\s*\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+<<\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\.$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\z2$+
+ \ contains=@vimTclScript
+VimFoldt syn region vimTclHeredoc contained
+ \ matchgroup=vimScriptHeredocStart
+ \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
+ \ matchgroup=vimScriptHeredocStop
+ \ end=+^\z1\=\.$+
+ \ contains=@vimTclScript
+
+unlet s:interfaces
" Beginners - Patterns that involve ^ {{{2
" =========
Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
@@ -1595,206 +1934,6 @@
syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
endif
-" Embedded Scripts: {{{2
-" ================
-" perl,ruby : Benoit Cerrina
-" python,tcl : Johannes Zellner
-" mzscheme, lua : Charles Campbell
-
-" Allows users to specify the type of embedded script highlighting
-" they want: (perl/python/ruby/tcl support)
-" g:vimsyn_embed == 0 : don't embed any scripts
-" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
-" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
-" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
-" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
-" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
-" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
-if !exists("g:vimsyn_embed")
- let g:vimsyn_embed= "lmpPr"
-endif
-
-" [-- lua --] {{{3
-let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
-if !filereadable(s:luapath)
- for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
- if filereadable(fnameescape(s:luapath))
- let s:luapath= fnameescape(s:luapath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimLuaRegion
- exe "syn include @vimLuaScript ".s:luapath
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
- syn cluster vimFuncBodyList add=vimLuaRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:luapath
-
-" [-- perl --] {{{3
-let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
-if !filereadable(s:perlpath)
- for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
- if filereadable(fnameescape(s:perlpath))
- let s:perlpath= fnameescape(s:perlpath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimPerlRegion
- exe "syn include @vimPerlScript ".s:perlpath
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
- syn cluster vimFuncBodyList add=vimPerlRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:perlpath
-
-" [-- ruby --] {{{3
-let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
-if !filereadable(s:rubypath)
- for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
- if filereadable(fnameescape(s:rubypath))
- let s:rubypath= fnameescape(s:rubypath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
- syn cluster vimFuncBodyList add=vimRubyRegion
- unlet! b:current_syntax
- exe "syn include @vimRubyScript ".s:rubypath
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
- VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
- syn cluster vimFuncBodyList add=vimRubyRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:rubypath
-
-" [-- python --] {{{3
-let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
-if !filereadable(s:pythonpath)
- for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
- if filereadable(fnameescape(s:pythonpath))
- let s:pythonpath= fnameescape(s:pythonpath)
- break
- endif
- endfor
-endif
-if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimPythonRegion
- exe "syn include @vimPythonScript ".s:pythonpath
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
- syn cluster vimFuncBodyList add=vimPythonRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:pythonpath
-
-" [-- tcl --] {{{3
-if has("win32") || has("win95") || has("win64") || has("win16")
- " apparently has("tcl") has been hanging vim on some windows systems with cygwin
- let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
-else
- let s:trytcl= 1
-endif
-if s:trytcl
- let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
- if !filereadable(s:tclpath)
- for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
- if filereadable(fnameescape(s:tclpath))
- let s:tclpath= fnameescape(s:tclpath)
- break
- endif
- endfor
- endif
- if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
- unlet! b:current_syntax
- syn cluster vimFuncBodyList add=vimTclRegion
- exe "syn include @vimTclScript ".s:tclpath
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
- VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
- syn cluster vimFuncBodyList add=vimTclScript
- else
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
- endif
- unlet s:tclpath
-else
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:trytcl
-
-" [-- mzscheme --] {{{3
-let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
-if !filereadable(s:mzschemepath)
- for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
- if filereadable(fnameescape(s:mzschemepath))
- let s:mzschemepath= fnameescape(s:mzschemepath)
- break
- endif
- endfor
-endif
-if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
- unlet! b:current_syntax
- let s:iskKeep= &isk
- syn cluster vimFuncBodyList add=vimMzSchemeRegion
- exe "syn include @vimMzSchemeScript ".s:mzschemepath
- let &isk= s:iskKeep
- unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
- syn cluster vimFuncBodyList add=vimMzSchemeRegion
-else
- syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
- syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
-endif
-unlet s:mzschemepath
-
" Synchronize (speed) {{{2
"============
if exists("g:vimsyn_minlines")
@@ -1814,7 +1953,6 @@
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
- hi def link vimEmbedError vimError
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError
@@ -1943,11 +2081,12 @@
hi def link vimLambdaBrace Delimiter
hi def link vimLambdaOperator vimOper
hi def link vimLet vimCommand
- hi def link vimLetHereDoc vimString
- hi def link vimLetHereDocStart Special
- hi def link vimLetHereDocStop Special
+ hi def link vimLetHeredoc vimString
+ hi def link vimLetHeredocStart Special
+ hi def link vimLetHeredocStop Special
hi def link vimLetRegister vimRegister
hi def link vimLineComment vimComment
+ hi def link vimLua vimCommand
hi def link vimMake vimCommand
hi def link vimMakeadd vimCommand
hi def link vimMakeBang vimBang
@@ -1973,6 +2112,8 @@
hi def link vimMenutranslateComment vimComment
hi def link vim9MethodName vimFuncName
hi def link vimMtchComment vimComment
+ hi def link vimMzScheme vimCommand
+ hi def link vimNonText NonText
hi def link vimNormal vimCommand
hi def link vimNotation Special
hi def link vimNotFunc vimCommand
@@ -1992,8 +2133,12 @@
hi def link vimPatSepZone vimString
hi def link vimPatSepZ vimPatSep
hi def link vimPattern Type
+ hi def link vimPerl vimCommand
hi def link vimPlainMark vimMark
hi def link vimPlainRegister vimRegister
+ hi def link vimPython vimCommand
+ hi def link vimPython3 vimCommand
+ hi def link vimPythonX vimCommand
hi def link vimQuoteEscape vimEscape
hi def link vimRedir vimCommand
hi def link vimRedirBang vimBang
@@ -2003,7 +2148,10 @@
hi def link vimRedirEnd Special
hi def link vimRedirRegister vimRegister
hi def link vimRegister SpecialChar
+ hi def link vimRuby vimCommand
hi def link vimScriptDelim Comment
+ hi def link vimScriptHeredocStart vimLetHeredocStart
+ hi def link vimScriptHeredocStop vimLetHeredocStop
hi def link vimSearch vimString
hi def link vimSearchDelim Delimiter
hi def link vimSep Delimiter
@@ -2068,6 +2216,7 @@
hi def link vimSynSpell Type
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
+ hi def link vimTcl vimCommand
hi def link vimThrow vimCommand
hi def link vimTodo Todo
hi def link vimType Type