]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(vim): Fix heredoc triggering misidentifcation of Vim9 script
authorDoug Kearns <dougkearns@gmail.com>
Sun, 28 Jun 2026 17:22:16 +0000 (17:22 +0000)
committerChristian Brabandt <cb@256bit.org>
Sun, 28 Jun 2026 17:22:16 +0000 (17:22 +0000)
The following let-heredoc can cause legacy scripts to be misidentified
as Vim9 script if it appears early in the file.  Only match :vim9script
at the start of a line where it sensibly belongs.

let x =<< trim LINES
  vim9script
  ...
LINES

fixes:  #20647 (reported by Maxim Kim).
closes: #20654

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/ftplugin/vim.vim
runtime/syntax/generator/vim.vim.base
runtime/syntax/vim.vim

index 21ca040fa637399be9b20ef576f7c2b32bb48d80..b54cb48f02ae6a296c3aee288648247d8f3e3e47 100644 (file)
@@ -6,7 +6,7 @@
 "                    @Konfekt
 "                    @tpope (s:Help())
 "                    @lacygoill
-" Last Change:       2026 May 31
+" Last Change:       2026 Jun 27
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -107,7 +107,7 @@ command! -buffer -nargs=1 VimKeywordPrg :exe 'help' s:Help(<q-args>)
 setlocal keywordprg=:VimKeywordPrg
 
 " Comments starts with # in Vim9 script.  We have to guess which one to use.
-if "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
+if "\n" .. getline(1, 32)->join("\n") =~# '\nvim9s\%[cript]\>'
   setlocal commentstring=#\ %s
   " Set 'comments' to format dashed lists in comments, for Vim9 script.
   setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:#\\\ ,:#
index 309ef2a9ba13f147dd82d8342e6aa524f548a740..5b20d1ddff9f29274abb82b71692269df1f350ba 100644 (file)
@@ -2,7 +2,7 @@
 " Language:       Vim script
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkearns@gmail.com>
-" Last Change:    2026 Jun 12
+" Last Change:    2026 Jun 27
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -19,7 +19,7 @@ set cpo&vim
 " Feature testing {{{1
 
 " NOTE: vimsyn_force_vim9 for internal use only
-let s:vim9script = get(b:, "vimsyn_force_vim9", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
+let s:vim9script = get(b:, "vimsyn_force_vim9", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\nvim9s\%[cript]\>'
 
 function s:has(feature)
   return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1
index 08d2a2b85b287c933a3e5c61d98a1ee43feb1c13..60e584dccb9de0bbc1aea2bc58f67a3dd075489d 100644 (file)
@@ -2,7 +2,7 @@
 " Language:       Vim script
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkearns@gmail.com>
-" Last Change:    2026 Jun 12
+" Last Change:    2026 Jun 27
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -19,7 +19,7 @@ set cpo&vim
 " Feature testing {{{1
 
 " NOTE: vimsyn_force_vim9 for internal use only
-let s:vim9script = get(b:, "vimsyn_force_vim9", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
+let s:vim9script = get(b:, "vimsyn_force_vim9", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\nvim9s\%[cript]\>'
 
 function s:has(feature)
   return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1