Merge pull request #34075 from zeertzjq/vim-a577e42

vim-patch: Vim syntax updates
This commit is contained in:
zeertzjq
2025-05-18 07:06:55 +08:00
committed by GitHub
2 changed files with 377 additions and 228 deletions

View File

@ -3507,6 +3507,7 @@ names whose syntax definitions will be included in Typst files. Example: >
VIM *vim.vim* *ft-vim-syntax*
*g:vimsyn_minlines* *g:vimsyn_maxlines*
There is a trade-off between more accurate syntax highlighting versus screen
updating speed. To improve accuracy, you may wish to increase the
g:vimsyn_minlines variable. The g:vimsyn_maxlines variable may be used to
@ -3525,18 +3526,19 @@ embedded script highlighting they wish to have. >
g:vimsyn_embed == 0 : disable (don't embed any scripts)
g:vimsyn_embed == 'lpPr' : support embedded Lua, Perl, Python and Ruby
<
This option is disabled by default.
By default, g:vimsyn_embed is unset, and embedded Lua scripts are supported.
*g:vimsyn_folding*
Some folding is now supported with when 'foldmethod' is set to "syntax": >
g:vimsyn_folding == 0 or doesn't exist: no syntax-based folding
g:vimsyn_folding =~ 'a' : fold augroups
g:vimsyn_folding =~ 'f' : fold functions
g:vimsyn_folding =~ 'h' : fold heredocs
g:vimsyn_folding =~ 'l' : fold Lua script
g:vimsyn_folding =~ 'p' : fold Perl script
g:vimsyn_folding =~ 'P' : fold Python script
g:vimsyn_folding =~ 'r' : fold Ruby script
g:vimsyn_folding =~ 'h' : fold let heredocs
g:vimsyn_folding =~ 'l' : fold Lua heredocs
g:vimsyn_folding =~ 'p' : fold Perl heredocs
g:vimsyn_folding =~ 'P' : fold Python heredocs
g:vimsyn_folding =~ 'r' : fold Ruby heredocs
<
By default, g:vimsyn_folding is unset. Concatenate the indicated characters

View File

@ -209,17 +209,17 @@ Vim9 syn keyword vim9Boolean true false
" Numbers {{{2
" =======
syn case ignore
syn match vimNumber '\<\d\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<\d\+\.\d\+\%(e[+-]\=\d\+\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscript,vimGlobal,vimSubst1
syn match vimNumber "\<\d\+\%('\d\+\)*\.\d\+\%(e[+-]\=\d\+\)\=" skipwhite nextgroup=@vimComment
syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscript
syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscript
syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscript
syn match vimNumber '\<0z\>' skipwhite nextgroup=@vimComment
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscript
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
@ -386,7 +386,7 @@ syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgrou
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,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
@ -887,16 +887,16 @@ syn region vimUnletVars contained
\ nextgroup=vimCmdSep,vimComment
\ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' contains=@vimStringInterpolation extend
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
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
@ -1483,6 +1483,347 @@ syn region vimHiLink contained matchgroup=Type start="\%(\<hi\%[ghlight]!\=\s\+\
" ==================
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", "l")
" [-- 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'
let s:foldmethod = &l:foldmethod
syn include @vimRubyScript syntax/ruby.vim
let &l:foldmethod = s:foldmethod
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
@ -1529,210 +1870,6 @@ if s:vim9script
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
" 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
if !exists("g:vimsyn_embed")
let g:vimsyn_embed = 'l'
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' && 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' && filereadable(s:perlpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPerlRegion
let s:foldmethod = &l:foldmethod
exe "syn include @vimPerlScript ".s:perlpath
let &l:foldmethod = s:foldmethod
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' && filereadable(s:rubypath)
syn cluster vimFuncBodyList add=vimRubyRegion
unlet! b:current_syntax
let s:foldmethod = &l:foldmethod
exe "syn include @vimRubyScript ".s:rubypath
let &l:foldmethod = s:foldmethod
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' && 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' && 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' && 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")
@ -1752,7 +1889,6 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
hi def link vimEmbedError Normal
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError
@ -1882,11 +2018,12 @@ if !exists("skip_vim_syntax_inits")
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 +2049,8 @@ if !exists("skip_vim_syntax_inits")
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 +2070,12 @@ if !exists("skip_vim_syntax_inits")
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 +2085,10 @@ if !exists("skip_vim_syntax_inits")
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 +2153,7 @@ if !exists("skip_vim_syntax_inits")
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