runtime(vim): Improve heredoc handling for all embedded scripts

Commit: 
https://github.com/vim/vim/commit/95e90781a4c92b7b061213cfa38b35bdbf719cc1
Author: Ken Takata <ken...@csc.jp>
Date:   Thu Aug 22 21:29:39 2024 +0200

    runtime(vim): Improve heredoc handling for all embedded scripts
    
    * Improve heredoc handling
      - Support "trim" for all the embedded scripts.
      - Check the indent of "trim" for "let" and all the embedded scripts.
    * Update missing part of vim.vim.base in the commit
      d164f2a521f8e52e587727657fb1c19e9a25f32a.
    * Update gen_syntax_vim.vim to catch up with 9.1.0685's source code.
    
    closes: #15542
    
    Signed-off-by: K.Takata <ken...@csc.jp>
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/generator/gen_syntax_vim.vim 
b/runtime/syntax/generator/gen_syntax_vim.vim
index ab7c91263..f88792034 100644
--- a/runtime/syntax/generator/gen_syntax_vim.vim
+++ b/runtime/syntax/generator/gen_syntax_vim.vim
@@ -2,7 +2,7 @@
 " Language: Vim script
 " Maintainer: Hirohito Higashi (h_east)
 " URL: https://github.com/vim-jp/syntax-vim-ex
-" Last Change: 2024 Jul 18
+" Last Change: 2024 Aug 21
 " Version: 2.1.1
 
 let s:keepcpo= &cpo
@@ -526,15 +526,15 @@ function! s:parse_vim_complete_name(li)
                new
                exec 'read ' . file_name
                norm! gg
-               exec '/^}\s*command_complete\[\]\s*=\s*$/+1;/^};/-1yank'
+               exec '/^static keyvalue_T command_complete_tab\[] 
=$/+1;/^};$/-1yank'
                %delete _
 
                put
-               g!/^\s*{.*"\w\+"\s*}\s*,.*$/d
+               g!/^\s*KEYVALUE_ENTRY(/d
                g/"custom\(list\)\?"/d
 
                for line in getline(1, line('$'))
-                       let list = matchlist(line, '^\s*{.*"\(\w\+\)"\s*}\s*,')
+                       let list = matchlist(line, 
'^\s*KEYVALUE_ENTRY(EXPAND_\w\+,\s*"\(\w\+\)"')
                        let item.name = list[1]
                        call add(a:li, copy(item))
                endfor
diff --git a/runtime/syntax/generator/vim.vim.base 
b/runtime/syntax/generator/vim.vim.base
index 883056bf3..169fe20f6 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -3,7 +3,7 @@
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkea...@gmail.com>
 " URL:    https://github.com/vim-jp/syntax-vim-ex
-" Last Change:    2024 Aug 16
+" Last Change:    2024 Aug 21
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -441,11 +441,12 @@ syn match vimEscape       contained       
"\\o\{1,3}\|\[xX]\x\{1,2}\|\u\x\{1,4}\|\U\x\{1
 syn match      vimEscape       contained       "\<" contains=vimNotation
 syn match      vimEscape       contained       "\<\*[^>]*>\=>"
 
-syn region     vimString       oneline start=+$'+ skip=+''+ end=+'+ 
contains=vimStringInterpolationBrace,vimStringInterpolationExpr
-syn region     vimString       oneline start=+$"+ end=+"+ 
contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
+syn region     vimString       oneline start=+$'+ skip=+''+ end=+'+ 
contains=@vimStringInterpolation
+syn region     vimString       oneline start=+$"+ end=+"+ 
contains=@vimStringGroup,@vimStringInterpolation
 syn region     vimStringInterpolationExpr  oneline contained matchgroup=vimSep 
start=+{+ end=+}+ contains=@vimExprList
 syn match      vimStringInterpolationBrace contained "{{"
 syn match      vimStringInterpolationBrace contained "}}"
+syn cluster    vimStringInterpolation 
contains=vimStringInterpolationExpr,vimStringInterpolationBrace
 
 " Substitutions: {{{2
 " =============
@@ -525,13 +526,10 @@ VimL syn keyword  vimUnlet        unl[et]         
skipwhite nextgroup=vimUnletBang,vimUnletVars
 syn match      vimUnletBang    contained       "!"     skipwhite 
nextgroup=vimUnletVars
 syn region     vimUnletVars    contained       start="$\I\|\h" skip="
\s*\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
 
-" Note: This incorrectly matches end markers with leading whitespace even if
-"       "trim" was not specified.  Matching :let indent for "trim" indented
-"       end markers would require a contained :let that cannot be restricted
-"       to the start pattern.  A common internal testing use of heredocs is to
-"       specify code blocks where :let commonly appears in the heredoc text.
-VimFoldh syn region vimLetHereDoc      matchgroup=vimLetHereDocStart 
start='=<<\s*\%(trim\s\+\)\=\z(\L\S*\)'                        
matchgroup=vimLetHereDocStop end='^\s*\z1$' extend
-VimFoldh syn region vimLetHereDoc      matchgroup=vimLetHereDocStart 
start='=<<\s*\%(trim\s\+\)\=eval\s\+\|eval\s\+\%(trim\s\+\)\=\z(\L\S*\)' 
matchgroup=vimLetHereDocStop end='^\s*\z1$' 
contains=vimStringInterpolationExpr,vimStringInterpolationBrace 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
@@ -934,12 +932,16 @@ 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=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+    contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim 
start=+lua\s*<<\s*$+ end=+\.$+     contains=@vimLuaScript
+ 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=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -957,12 +959,16 @@ 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=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ 
end=+^\z1\ze\(\s*[#"].*\)\=$+        contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion     matchgroup=vimScriptDelim 
start=+pe\%[rl]\s*<<\s*$+ end=+\.$+                   contains=@vimPerlScript
+ 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=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -980,12 +986,16 @@ 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=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+     
contains=@vimRubyScript
- syn region vimRubyRegion      matchgroup=vimScriptDelim 
start=+rub[y]\s*<<\s*$+ end=+\.$+                     contains=@vimRubyScript
+ 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=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1003,14 +1013,18 @@ 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=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ 
end=+^\z1\ze\(\s*".*\)\=$+       contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+                       
        contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ 
end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+                       
        contains=@vimPythonScript
+ 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=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1035,17 +1049,23 @@ if s:trytcl
   unlet! b:current_syntax
   syn cluster vimFuncBodyList  add=vimTclRegion
   exe "syn include @vimTclScript ".s:tclpath
-  VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim 
start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+       contains=@vimTclScript
-  VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim 
start=+tc[l]\=\s*<<\s*$+ end=+\.$+        contains=@vimTclScript
+  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=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
-  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+  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=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1066,12 +1086,16 @@ if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && 
filereadable(s:mzschemepath)
  exe "syn include @vimMzSchemeScript ".s:mzschemepath
  let &isk= s:iskKeep
  unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim 
start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+      
contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim 
start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+               
contains=@vimMzSchemeScript
+ 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=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
+ 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
 
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 441f74f8b..1ae39cf33 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -3,7 +3,7 @@
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkea...@gmail.com>
 " URL:    https://github.com/vim-jp/syntax-vim-ex
-" Last Change:    2024 Aug 16
+" Last Change:    2024 Aug 21
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -418,7 +418,7 @@ endif
 syn case ignore
 syn keyword    vimUserAttrbKey   contained     bar     ban[g]  cou[nt] ra[nge] 
com[plete]      n[args] re[gister]
 " GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt 
contained', END_STR=''
-syn keyword vimUserAttrbCmplt contained arglist augroup behave buffer color 
command compiler cscope diff_buffer dir environment event expression file 
file_in_path filetype function help highlight history keymap locale mapclear 
mapping menu messages syntax syntime option packadd runtime shellcmd sign tag 
tag_listfiles user var breakpoint scriptnames dir_in_path
+syn keyword vimUserAttrbCmplt contained arglist augroup behave breakpoint 
buffer color command compiler cscope diff_buffer dir dir_in_path environment 
event expression file file_in_path filetype function help highlight history 
keymap locale mapclear mapping menu messages option packadd runtime scriptnames 
shellcmd sign syntax syntime tag tag_listfiles user var
 syn keyword    vimUserAttrbCmplt contained     custom customlist 
nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
 syn match      vimUserAttrbCmpltFunc contained 
",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 
nextgroup=vimUserCmdError
 
@@ -565,13 +565,10 @@ VimL syn keyword  vimUnlet        unl[et]         
skipwhite nextgroup=vimUnletBang,vimUnletVars
 syn match      vimUnletBang    contained       "!"     skipwhite 
nextgroup=vimUnletVars
 syn region     vimUnletVars    contained       start="$\I\|\h" skip="
\s*\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
 
-" Note: This incorrectly matches end markers with leading whitespace even if
-"       "trim" was not specified.  Matching :let indent for "trim" indented
-"       end markers would require a contained :let that cannot be restricted
-"       to the start pattern.  A common internal testing use of heredocs is to
-"       specify code blocks where :let commonly appears in the heredoc text.
-VimFoldh syn region vimLetHereDoc      matchgroup=vimLetHereDocStart 
start='=<<\s*\%(trim\s\+\)\=\z(\L\S*\)'                   
matchgroup=vimLetHereDocStop end='^\s*\z1$' extend
-VimFoldh syn region vimLetHereDoc      matchgroup=vimLetHereDocStart 
start='=<<\s*\%(\%(trim\s\+\)\=eval\s\+\|eval\s\+\%(trim\s\+\)\=\)\z(\L\S*\)' 
matchgroup=vimLetHereDocStop end='^\s*\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
@@ -980,12 +977,16 @@ 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=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+    contains=@vimLuaScript
- VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim 
start=+lua\s*<<\s*$+ end=+\.$+     contains=@vimLuaScript
+ 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=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1003,12 +1004,16 @@ 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=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ 
end=+^\z1\ze\(\s*[#"].*\)\=$+        contains=@vimPerlScript
- VimFoldp syn region vimPerlRegion     matchgroup=vimScriptDelim 
start=+pe\%[rl]\s*<<\s*$+ end=+\.$+                   contains=@vimPerlScript
+ 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=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1026,12 +1031,16 @@ 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=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+     
contains=@vimRubyScript
- syn region vimRubyRegion      matchgroup=vimScriptDelim 
start=+rub[y]\s*<<\s*$+ end=+\.$+                     contains=@vimRubyScript
+ 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=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1049,14 +1058,18 @@ 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=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ 
end=+^\z1\ze\(\s*".*\)\=$+       contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+                       
        contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ 
end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
- VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim 
start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+                       
        contains=@vimPythonScript
+ 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=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1081,17 +1094,23 @@ if s:trytcl
   unlet! b:current_syntax
   syn cluster vimFuncBodyList  add=vimTclRegion
   exe "syn include @vimTclScript ".s:tclpath
-  VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim 
start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+       contains=@vimTclScript
-  VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim 
start=+tc[l]\=\s*<<\s*$+ end=+\.$+        contains=@vimTclScript
+  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=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
-  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+  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=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ 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
 
@@ -1112,12 +1131,16 @@ if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && 
filereadable(s:mzschemepath)
  exe "syn include @vimMzSchemeScript ".s:mzschemepath
  let &isk= s:iskKeep
  unlet s:iskKeep
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim 
start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+      
contains=@vimMzSchemeScript
- VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim 
start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+               
contains=@vimMzSchemeScript
+ 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=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
- syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
+ 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
 

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1shDjy-001N5w-Tb%40256bit.org.

Raspunde prin e-mail lui