commit e61880957f6c9e4f290bbf0e5d7a00eeaf0446ea
parent 070f4d3da08c270b5360759a17ac3f210328f985
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon, 27 Oct 2025 16:50:46 +0800
vim-patch:da5b600: runtime(vim): Update base syntax, match :terminal command
Match the full :terminal command syntax.
closes: vim/vim#18367
https://github.com/vim/vim/commit/da5b6007fb75d4a0fb20583ffd298f032acdfc0d
Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Diffstat:
1 file changed, 47 insertions(+), 2 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,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,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
@@ -1594,6 +1594,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 +1651,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]\>"
@@ -2521,6 +2559,13 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSyntax vimCommand
hi def link vimSynType 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