commit 29e093c8f262007dd87412cf4a4c47cefef3c963
parent 070f4d3da08c270b5360759a17ac3f210328f985
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon, 27 Oct 2025 17:22:21 +0800
Merge pull request #36350 from zeertzjq/vim-da5b600
vim-patch: Vim syntax updates
Diffstat:
1 file changed, 62 insertions(+), 3 deletions(-)
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
@@ -232,7 +232,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSynColor,vimSynLink,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl
+syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,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
@@ -1017,7 +1017,13 @@ syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vi
" Complex Repeats: (:h complex-repeat) {{{2
" ===============
syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
-syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
+
+" NOTE: :* as an alias for :@ is not supported, this is considered a :range,
+" see :help cpo-star
+syn match vimAtArg contained +@\@1<=[0-9a-z".=*+:@]+
+syn match vimAt +@[0-9a-z".=*+:@]\ze\s*\%($\|[|"#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment contains=vimAtArg
+" Vim9: avoid LHS assignment mismatching of :@["#]
+syn match vimAt +@\ze\s*\%($\||\|\s["#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
" Set command and associated set-options (vimOptions) with comment {{{2
syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs
@@ -1594,6 +1600,44 @@ syn region vimSortPattern contained
syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError
+" Terminal: {{{2
+" ========
+syn match vimTerminal "\<ter\%[minal]\>" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand
+syn match vimTerminal +\<ter\%[minal]\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimTerminalOptions,vimTerminalCommand,@vimTerminalContinue
+
+syn match vimTerminalContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace
+syn match vimTerminalContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace
+syn cluster vimTerminalContinue contains=vimTerminalContinue,vimTerminalContinueComment
+
+syn region vimTerminalCommand contained
+ \ start="\S"
+ \ skip=+\n\s*\%(\\\|["#]\\ \)+
+ \ end="$"
+ \ contains=@vimContinue
+
+syn region vimTerminalOptions contained
+ \ start="++"
+ \ skip=/\s\+++\|\%(\n\|^\)\s*\%(\\\|["#]\\ \)/
+ \ end="\s"
+ \ end="$"
+ \ skipwhite nextgroup=vimTerminalCommand
+ \ contains=@vimContinue,vimTerminalOption
+ \ transparent
+
+syn match vimTerminalOption contained "++\%(\%(no\)\=close\|open\|curwin\|hidden\|norestore\|shell\)\>"
+syn match vimTerminalOption contained "++kill=" nextgroup=vimTerminalKillOptionArg
+syn match vimTerminalOption contained "++\%(rows\|cols\)=" nextgroup=vimTerminalSizeOptionArg
+syn match vimTerminalOption contained "++eof=" nextgroup=vimTerminalEofOptionArg
+syn match vimTerminalOption contained "++type=" nextgroup=vimTerminalTypeOptionArg
+syn match vimTerminalOption contained "++api=" nextgroup=vimTerminalApiOptionArg
+
+syn match vimTerminalApiOptionArg contained "\<\S\+\>"
+syn match vimTerminalEofOptionArg contained "\<\S\+\>"
+syn match vimTerminalSizeOptionArg contained "\<\d\+\>"
+syn keyword vimTerminalKillOptionArg contained term hup quit int kill
+syn match vimTerminalKillOptionArg contained "\<\d\+\>"
+syn keyword vimTerminalTypeOptionArg contained conpty winpty
+
" Uniq: {{{2
" ====
syn match vimUniq "\<uniq\=\>" skipwhite nextgroup=vimUniqBang,@vimUniqOptions,vimUniqPattern,vimCmdSep
@@ -1613,7 +1657,7 @@ syn cluster vimUniqOptions contains=vimUniqOptions,vimUniqOptionsError
" Wincmd: {{{2
" ======
-syn match vimWincmd "\<winc\%[md]\>" skipwhite nextgroup=vimWincmdArg
+syn match vimWincmd "\<winc\%[md]\>" skipwhite nextgroup=vimWincmdArg
" TODO: consider extracting this list from the help file
syn match vimWincmdArg contained
\ "\<[sSvnqojkhlwWtbpPrRxKJHLTfFz]\>\|[\^:=\-+_<>|\]}]\|\<g\s\+[\]}]\|\<g[fFtT]\>"
@@ -1747,6 +1791,10 @@ syn match vimSyncKey contained "\<groupthere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncGroup contained "\<\h\w*\>" skipwhite nextgroup=vimSynRegPat,vimSyncNone
syn keyword vimSyncNone contained NONE
+" Syntime: {{{2
+" =======
+syn keyword vimSyntimeArg contained on off clear report skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
+syn keyword vimSyntime synti[me] skipwhite nextgroup=vimSyntimeArg
" Additional IsCommand: here by reasons of precedence {{{2
" ====================
syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
@@ -2264,6 +2312,8 @@ if !exists("skip_vim_syntax_inits")
hi def link vimAbb vimCommand
hi def link vimAddress vimMark
+ hi def link vimAt vimCommand
+ hi def link vimAtArg Special
hi def link vimAugroupBang vimBang
hi def link vimAugroupError vimError
hi def link vimAugroupKey vimCommand
@@ -2520,7 +2570,16 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSynSpell Type
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
+ hi def link vimSyntime vimCommand
+ hi def link vimSyntimeArg vimSpecial
hi def link vimTcl vimCommand
+ hi def link vimTerminal vimCommand
+ hi def link vimTerminalContinue vimContinue
+ hi def link vimTerminalContinueComment vimContinueComment
+ hi def link vimTerminalOption vimSpecial
+ hi def link vimTerminalKillOptionArg Constant
+ hi def link vimTerminalSizeOptionArg Constant
+ hi def link vimTerminalTypeOptionArg Constant
hi def link vimThrow vimCommand
hi def link vimTodo Todo
hi def link vimType Type