2024-02-13 21:09:22 +01:00
" Vim syntax file
2024-03-28 20:06:03 +11:00
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
2025-03-15 09:29:31 +01:00
" Last Change: 2025 Mar 13
2024-02-19 20:37:11 +01:00
" Former Maintainer: Charles E. Campbell
2024-02-13 21:09:22 +01:00
" DO NOT CHANGE DIRECTLY.
" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
" (Search string "GEN_SYN_VIM:" in this file)
2025-03-09 16:30:28 +01:00
" Quit when a syntax file was already loaded {{{1
2024-02-13 21:09:22 +01:00
if exists("b:current_syntax")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
2025-03-09 16:30:28 +01:00
" Feature testing {{{1
2024-04-11 06:18:37 +10:00
let s:vim9script = "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
2025-03-09 16:30:28 +01:00
function s:has(feature)
return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1
endfunction
" Automatically generated keyword lists: {{{1
2024-02-13 21:09:22 +01:00
" vimTodo: contains common special-notices for comments {{{2
" Use the vimCommentGroup cluster to add your own.
syn keyword vimTodo contained COMBAK FIXME TODO XXX
syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
2025-01-08 18:20:47 +01:00
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang'
2024-02-13 21:09:22 +01:00
2024-02-18 21:02:14 +03:00
" Lower priority for _new_ to distinguish constructors from the command.
syn match vimCommand contained "\<new\>(\@!"
2024-02-13 21:09:22 +01:00
syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man Over Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns
" vimOptions are caught only when contained in a vimSet {{{2
2024-07-24 20:21:22 +02:00
" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
2024-02-13 21:09:22 +01:00
" vimOptions: These are the turn-off setting variants {{{2
" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
" vimOptions: These are the invertible variants {{{2
" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
" termcap codes (which can also be set) {{{2
2024-07-24 20:21:22 +02:00
" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
2024-02-13 21:09:22 +01:00
" term key codes
syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
syn match vimOption contained "t_%1"
syn match vimOption contained "t_#2"
syn match vimOption contained "t_#4"
syn match vimOption contained "t_@7"
syn match vimOption contained "t_*7"
syn match vimOption contained "t_&8"
syn match vimOption contained "t_%i"
syn match vimOption contained "t_k;"
2025-03-09 16:30:28 +01:00
" vimOptions: These are the variable names {{{2
" GEN_SYN_VIM: vimOption normal variable, START_STR='syn keyword vimOptionVarName contained', END_STR=''
" GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR=''
syn keyword vimOptionVarName contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
syn match vimOptionVarName contained "t_%1"
syn match vimOptionVarName contained "t_#2"
syn match vimOptionVarName contained "t_#4"
syn match vimOptionVarName contained "t_@7"
syn match vimOptionVarName contained "t_*7"
syn match vimOptionVarName contained "t_&8"
syn match vimOptionVarName contained "t_%i"
syn match vimOptionVarName contained "t_k;"
2024-02-13 21:09:22 +01:00
" unsupported settings: some were supported by vi but don't do anything in vim {{{2
" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
" AutoCmd Events {{{2
syn case ignore
" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
" Highlight commonly used Groupnames {{{2
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
" Default highlighting groups {{{2
" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
2024-05-27 22:40:25 +09:00
syn match vimHLGroup contained "\<Conceal\>"
2024-02-13 21:09:22 +01:00
syn case match
" Function Names {{{2
" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
2025-03-09 16:30:28 +01:00
" Predefined variable names {{{2
" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR=''
"--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim ---
2024-02-13 21:09:22 +01:00
" Special Vim Highlighting (not automatic) {{{1
2025-03-09 16:30:28 +01:00
" Neovim keyword list additions {{{2
if s:has("nvim")
syn keyword vimOptionVarName contained channel inccommand mousescroll pumblend redrawdebug scrollback shada shadafile statuscolumn termpastefilter termsync winbar winblend winhighlight
syn keyword vimVimVarName contained lua msgpack_types relnum stderr termrequest virtnum
endif
2024-07-17 19:34:14 +02:00
" Set up commands for this syntax highlighting file {{{2
com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
2024-10-06 17:00:48 +02:00
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]'
2024-02-13 21:09:22 +01:00
if g:vimsyn_folding =~# 'a'
com! -nargs=* VimFolda <args> fold
else
com! -nargs=* VimFolda <args>
endif
2024-10-06 17:00:48 +02:00
if g:vimsyn_folding =~# 'c'
com! -nargs=* VimFoldc <args> fold
else
com! -nargs=* VimFoldc <args>
endif
if g:vimsyn_folding =~# 'e'
com! -nargs=* VimFolde <args> fold
else
com! -nargs=* VimFolde <args>
endif
2024-02-13 21:09:22 +01:00
if g:vimsyn_folding =~# 'f'
com! -nargs=* VimFoldf <args> fold
else
com! -nargs=* VimFoldf <args>
endif
if g:vimsyn_folding =~# 'h'
com! -nargs=* VimFoldh <args> fold
else
com! -nargs=* VimFoldh <args>
endif
2024-04-13 18:24:01 +02:00
if g:vimsyn_folding =~# 'H'
com! -nargs=* VimFoldH <args> fold
else
com! -nargs=* VimFoldH <args>
endif
2024-10-06 17:00:48 +02:00
if g:vimsyn_folding =~# 'i'
com! -nargs=* VimFoldi <args> fold
else
com! -nargs=* VimFoldi <args>
endif
2024-02-13 21:09:22 +01:00
if g:vimsyn_folding =~# 'l'
com! -nargs=* VimFoldl <args> fold
else
com! -nargs=* VimFoldl <args>
endif
if g:vimsyn_folding =~# 'm'
com! -nargs=* VimFoldm <args> fold
else
com! -nargs=* VimFoldm <args>
endif
if g:vimsyn_folding =~# 'p'
com! -nargs=* VimFoldp <args> fold
else
com! -nargs=* VimFoldp <args>
endif
if g:vimsyn_folding =~# 'P'
com! -nargs=* VimFoldP <args> fold
else
com! -nargs=* VimFoldP <args>
endif
if g:vimsyn_folding =~# 'r'
com! -nargs=* VimFoldr <args> fold
else
com! -nargs=* VimFoldr <args>
endif
if g:vimsyn_folding =~# 't'
com! -nargs=* VimFoldt <args> fold
else
com! -nargs=* VimFoldt <args>
endif
else
com! -nargs=* VimFolda <args>
2024-10-06 17:00:48 +02:00
com! -nargs=* VimFoldc <args>
com! -nargs=* VimFolde <args>
2024-02-13 21:09:22 +01:00
com! -nargs=* VimFoldf <args>
2024-10-06 17:00:48 +02:00
com! -nargs=* VimFoldi <args>
2024-02-13 21:09:22 +01:00
com! -nargs=* VimFoldh <args>
2024-04-13 18:24:01 +02:00
com! -nargs=* VimFoldH <args>
2024-02-13 21:09:22 +01:00
com! -nargs=* VimFoldl <args>
com! -nargs=* VimFoldm <args>
com! -nargs=* VimFoldp <args>
com! -nargs=* VimFoldP <args>
com! -nargs=* VimFoldr <args>
com! -nargs=* VimFoldt <args>
endif
" Deprecated variable options {{{2
if exists("g:vim_minlines")
let g:vimsyn_minlines= g:vim_minlines
endif
if exists("g:vim_maxlines")
let g:vimsyn_maxlines= g:vim_maxlines
endif
if exists("g:vimsyntax_noerror")
let g:vimsyn_noerror= g:vimsyntax_noerror
endif
" Variable options {{{2
if exists("g:vim_maxlines")
let s:vimsyn_maxlines= g:vim_maxlines
else
let s:vimsyn_maxlines= 60
endif
2024-07-17 19:34:14 +02:00
" Nulls {{{2
" =====
Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
" Booleans {{{2
" ========
Vim9 syn keyword vim9Boolean true false
2024-02-13 21:09:22 +01:00
" Numbers {{{2
" =======
2024-03-12 07:40:58 +11:00
syn case ignore
2025-02-10 22:00:27 +01:00
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
2025-01-19 14:02:06 +01:00
syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
2025-02-10 22:00:27 +01:00
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
2024-03-12 07:40:58 +11:00
syn case match
2024-02-13 21:09:22 +01:00
" All vimCommands are contained by vimIsCommand. {{{2
2025-02-23 15:48:52 +01:00
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
2025-01-03 17:32:54 +01:00
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
2025-02-27 19:15:20 +01:00
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
2025-02-03 18:59:09 +01:00
syn match vimCount contained "\d\+"
2025-01-08 18:20:47 +01:00
syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
2024-09-02 10:03:37 +02:00
syn match vimBang contained "!"
2024-02-13 21:09:22 +01:00
2025-02-10 22:00:27 +01:00
syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList
syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This
2025-03-09 16:30:28 +01:00
syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope
syn match vimVar "\<a:\%(000\|1\=[0-9]\|20\)\>" nextgroup=vimSubscript contains=vimVarScope
syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope
" match the scope prefix independently of the retrofitted scope dictionary
syn match vimVarScope contained "\<[bwglstav]:"
syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscript
syn match vimVarNameError contained "\<\h\w*\>"
syn match vimVimVar "\<v:" nextgroup=vimSubscript,vimVimVarName,vimVarNameError
syn match vimOptionVar "&\%([lg]:\)\=" nextgroup=vimSubscript,vimOptionVarName,vimVarNameError
2025-02-10 22:00:27 +01:00
syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript
Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This
Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
syn cluster vimExprList contains=@vimSpecialVar,vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
syn cluster vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null
2024-02-28 05:59:30 +11:00
2024-02-13 21:09:22 +01:00
" Insertions And Appends: insert append {{{2
" (buftype != nofile test avoids having append, change, insert show up in the command window)
" =======================
if &buftype != 'nofile'
2024-04-15 04:32:56 +10:00
syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend
syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend
syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend
2024-02-13 21:09:22 +01:00
endif
" Behave! {{{2
" =======
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
syn match vimBehaveError contained "[^ ]\+"
endif
2024-02-14 21:17:43 +01:00
syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
syn keyword vimBehaveModel contained mswin xterm
2024-02-13 21:09:22 +01:00
2024-07-18 20:45:19 +02:00
" Call {{{2
" ====
syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
2025-02-12 20:44:17 +01:00
" Debuggreedy {{{2
2025-02-03 18:59:09 +01:00
" ===========
" TODO: special-cased until generalised range/count support is implemented
syn match vimDebuggreedy "\<0\=debugg\%[reedy]\>" contains=vimCount
2024-06-14 01:48:10 +10:00
" Exception Handling {{{2
syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
2024-10-06 17:00:48 +02:00
" Export {{{2
" ======
if s:vim9script
syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
endif
2024-02-13 21:09:22 +01:00
" Filetypes {{{2
" =========
syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
syn match vimFTError contained "\I\i*"
endif
syn keyword vimFTCmd contained filet[ype]
syn keyword vimFTOption contained detect indent off on plugin
" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
2025-02-10 22:00:27 +01:00
syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
2024-03-04 02:42:47 +11:00
syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
2024-02-13 21:09:22 +01:00
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
2024-03-04 02:42:47 +11:00
syn region vimAugroup fold start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
2024-02-13 21:09:22 +01:00
else
2024-03-04 02:42:47 +11:00
syn region vimAugroup start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite nextgroup=vimAugroupEnd
2024-02-13 21:09:22 +01:00
endif
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
2024-03-04 02:42:47 +11:00
syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
2024-02-13 21:09:22 +01:00
endif
2024-03-04 02:42:47 +11:00
syn match vimAutoCmdGroup contained "\S\+"
syn match vimAugroupEnd contained "\c\<END\>"
syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
2024-02-13 21:09:22 +01:00
" Operators: {{{2
" =========
2025-02-12 20:44:17 +01:00
syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment
2025-02-10 22:00:27 +01:00
syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
2025-01-20 21:53:01 +01:00
" distinguish ternary : from ex-colon
2025-02-10 22:00:27 +01:00
syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup nextgroup=vimSubscript
syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
syn region vimOperParen contained matchgroup=vimSep start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
syn match vimOperError ")"
endif
2025-02-10 22:00:27 +01:00
syn match vimOperContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
syn match vimOperContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
" Lambda Expressions: {{{2
" ==================
syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams
syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParamsParen contained "[()]"
syn region vim9LambdaParams contained
\ matchgroup=vim9LambdaParamsParen
\ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
\ start="(\ze\s*\n
"\ line continuations
\\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s*
"\ parameter names
\\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
\ end=")\ze\%(:\s\|\s\+=>\)"
\ matchgroup=vimContinue
\ end="^\s*\\\ze\s\+=>"
\ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
\ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen
syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent
syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
2024-04-15 04:32:56 +10:00
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
2024-02-13 21:09:22 +01:00
" =========
2025-02-10 22:00:27 +01:00
syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
2024-04-15 04:32:56 +10:00
2025-02-16 16:40:12 +01:00
syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
2025-02-10 22:00:27 +01:00
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
2024-03-22 06:41:10 +11:00
syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
2024-10-06 17:00:48 +02:00
syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
2024-03-22 06:41:10 +11:00
2024-09-19 19:51:59 +02:00
syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
2024-03-22 06:41:10 +11:00
syn match vimFuncBang contained "!"
syn match vimFuncSID contained "\c<sid>"
2025-02-10 22:00:27 +01:00
syn match vimFuncScope contained "\<[sg]:"
2024-03-22 06:41:10 +11:00
syn keyword vimFuncKey contained fu[nction]
syn keyword vimDefKey contained def
2024-12-26 10:13:45 +01:00
syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals,vimOperParen
2024-03-22 06:41:10 +11:00
syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
2024-09-19 19:51:59 +02:00
syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
2024-03-22 06:41:10 +11:00
2024-09-19 19:51:59 +02:00
syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
2024-03-22 06:41:10 +11:00
2024-06-22 11:20:36 +02:00
syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
2024-02-13 21:09:22 +01:00
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
2024-10-06 17:00:48 +02:00
syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
2024-02-13 21:09:22 +01:00
endif
2024-03-22 06:41:10 +11:00
2024-02-13 21:09:22 +01:00
syn match vimFuncBlank contained "\s\+"
2024-03-22 06:41:10 +11:00
" Types: {{{2
" =====
2024-07-17 19:34:14 +02:00
2024-09-19 19:51:59 +02:00
syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError contains=vimTypeSep transparent
2024-07-17 19:34:14 +02:00
syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
2024-03-22 06:41:10 +11:00
syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained any blob bool channel float job number string void
syn match vimType contained "\<func\>"
syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
syn match vimUserType contained "\<\u\w*\>"
syn cluster vimType contains=vimType,vimCompoundType,vimUserType
2024-02-13 21:09:22 +01:00
2024-10-06 17:00:48 +02:00
" Classes, Enums And Interfaces: {{{2
" =============================
if s:vim9script
" Methods {{{3
2025-02-10 22:00:27 +01:00
syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName
2024-10-06 17:00:48 +02:00
syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFuncParamEquals
2025-02-10 22:00:27 +01:00
syn match vim9ConstructorDefName contained "\<new\w*\>"
\ nextgroup=vim9ConstructorDefParams
\ contains=@vim9MethodName
syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
\ skipwhite nextgroup=vimParamType,vimFuncParamEquals
\ contains=vim9This,vimOper
syn region vim9ConstructorDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vimCommentError
\ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
2024-10-06 17:00:48 +02:00
syn region vim9MethodDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
\ contains=vimTypeSep
\ transparent
syn region vim9MethodDefBody contained
\ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
\ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
\ contains=@vim9MethodDefBodyList
syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
endif
2025-02-10 22:00:27 +01:00
syn match vim9MethodName contained "\<new\w*\>"
2024-10-06 17:00:48 +02:00
syn keyword vim9MethodName contained empty len string
syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
syn region vim9MethodDefFold contained start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
syn region vim9MethodDefFold contained start="^\s*:\=def\s\+new\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
endif
syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
" Classes {{{3
syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
syn keyword vim9Static contained static
2025-02-10 22:00:27 +01:00
" FIXME: don't match as dictionary keys, remove when operators are not
" shared between Vim9 and legacy script
syn match vim9This contained "\.\@1<!\<this\>:\@!"
" super must be folowed by '.'
syn match vim9Super contained "\.\@1<!\<super\.\@="
2024-10-06 17:00:48 +02:00
VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
" Enums {{{3
syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,vim9Implements,@vim9MethodDef,vim9Const,vim9Final,vim9Var
syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
" Interfaces {{{3
" TODO: limit to decl only - no init values
syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams contains=@vim9MethodName
syn region vim9AbstractDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFuncParamEquals
syn region vim9AbstractDefReturnType contained
\ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
\ contains=vimTypeSep
\ transparent
VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
2025-02-10 22:00:27 +01:00
" Type Aliases {{{3
2024-10-06 17:00:48 +02:00
syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
2025-02-10 22:00:27 +01:00
syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals
2024-10-06 17:00:48 +02:00
endif
endif
2025-02-10 22:00:27 +01:00
" Blocks: {{{2
" ======
Vim9 syn region vim9Block matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
2024-04-11 06:18:37 +10:00
" Keymaps: {{{2
2024-02-13 21:09:22 +01:00
" =======
2024-04-11 06:18:37 +10:00
syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
2024-02-13 21:09:22 +01:00
syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
syn match vimKeymapTailComment "\S.*" contained
2024-04-11 06:18:37 +10:00
" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
if s:vim9script
syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
else
syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
endif
syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
2024-02-13 21:09:22 +01:00
2024-08-23 18:37:55 +02:00
syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
2024-02-13 21:09:22 +01:00
" Special Filenames, Modifiers, Extension Removal: {{{2
" ===============================================
2024-02-27 07:10:18 +11:00
syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
2024-02-13 21:09:22 +01:00
syn match vimSpecFileMod "\(:[phtre]\)\+" contained
" User-Specified Commands: {{{2
" =======================
2024-04-11 06:18:37 +10:00
syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
2024-09-02 10:03:37 +02:00
syn keyword vimUserCmdKey contained com[mand]
syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttrNargs contained "[01*?+]"
syn match vimUserCmdAttrRange contained "%"
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
syn match vimUserCmdError contained "\S\+\>"
endif
2024-09-02 10:03:37 +02:00
syn case ignore
syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
syn match vimUserCmdAttrAddr contained "?"
2024-02-13 21:09:22 +01:00
syn case match
2025-02-10 22:00:27 +01:00
syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
2024-04-11 06:18:37 +10:00
2024-09-02 10:03:37 +02:00
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
syn match vimDelcommandAttr contained "-buffer\>"
2024-02-13 21:09:22 +01:00
" Lower Priority Comments: after some vim commands... {{{2
" =======================
2024-06-12 04:18:08 +10:00
if get(g:, "vimsyn_comment_strings", 1)
2024-09-19 19:51:59 +02:00
syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
2024-06-12 04:18:08 +10:00
endif
2024-04-11 06:18:37 +10:00
if s:vim9script
syn cluster vimComment contains=vim9Comment
else
syn cluster vimComment contains=vimComment
endif
2024-02-13 21:09:22 +01:00
2024-09-19 19:51:59 +02:00
VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
2024-07-17 19:34:14 +02:00
" Vim9 comments - TODO: might be highlighted while they don't work
2024-09-19 19:51:59 +02:00
Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
2024-07-17 19:34:14 +02:00
" Vim9 comment inside expression
2024-09-19 19:51:59 +02:00
Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
2024-07-17 19:34:14 +02:00
2024-06-22 11:20:36 +02:00
syn match vim9CommentError contained "#.*"
syn match vimCommentError contained +".*+
2024-02-13 21:09:22 +01:00
" Environment Variables: {{{2
" =====================
syn match vimEnvvar "\$\I\i*"
syn match vimEnvvar "\${\I\i*}"
2025-02-16 16:40:12 +01:00
" Strings {{{2
" =======
" In-String Specials:
2024-02-13 21:09:22 +01:00
" Try to catch strings, if nothing else matches (therefore it must precede the others!)
" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
syn match vimPatSepErr contained "\\)"
syn match vimPatSep contained "\\|"
syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
syn match vimNotPatSep contained "\\\\"
syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
2025-02-10 22:00:27 +01:00
syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
2024-02-13 21:09:22 +01:00
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
2025-01-10 20:02:17 +01:00
2024-02-13 21:09:22 +01:00
syn match vimEscape contained "\\."
" syn match vimEscape contained +\\[befnrt\"]+
syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
syn match vimEscape contained "\\<" contains=vimNotation
syn match vimEscape contained "\\<\*[^>]*>\=>"
2025-01-10 20:02:17 +01:00
syn match vimQuoteEscape contained "''"
2024-02-13 21:09:22 +01:00
2025-02-10 22:00:27 +01:00
syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape,@vimStringInterpolation extend
syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringGroup,@vimStringInterpolation extend
2024-02-28 05:59:30 +11:00
syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
syn match vimStringInterpolationBrace contained "{{"
syn match vimStringInterpolationBrace contained "}}"
2024-08-22 21:29:39 +02:00
syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
2024-02-13 21:09:22 +01:00
" Substitutions: {{{2
" =============
syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
syn cluster vimSubstList add=vimCollection
2024-06-05 19:45:43 +02:00
syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
2024-02-27 07:10:18 +11:00
" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
" : # is allowed but "not recommended" (see :h pattern-delimiter)
syn region vimSubstPat contained matchgroup=vimSubstDelim start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1 contains=@vimSubstList nextgroup=vimSubstRep4 oneline
syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
syn match vimCollClassErr contained "\[:.\{-\}:\]"
syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
syn match vimSubstSubstr contained "\\z\=\d"
syn match vimSubstTwoBS contained "\\\\"
syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
2024-02-13 21:09:22 +01:00
2024-06-05 19:45:43 +02:00
" Vi compatibility
syn match vimSubstDelim contained "\\"
syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
2024-02-13 21:09:22 +01:00
" Marks, Registers, Addresses, Filters: {{{2
2024-02-27 07:10:18 +11:00
syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
2024-08-31 16:57:32 +02:00
syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
2024-02-27 07:10:18 +11:00
syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
2024-02-13 21:09:22 +01:00
syn match vimPlainMark contained "'[a-zA-Z0-9]"
syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
syn match vimRegister '@"'
syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
2025-02-12 20:44:17 +01:00
syn match vimLetRegister contained '@["0-9\-a-zA-Z:.%#=*+~_/]'
2024-02-13 21:09:22 +01:00
syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
" 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]\>\)'
" Set command and associated set-options (vimOptions) with comment {{{2
2025-03-07 18:49:11 +01:00
syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs
syn region vimSetArgs contained start="\S" skip=+\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep
2024-07-24 20:21:22 +02:00
syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
syn keyword vimSetAll contained all nextgroup=vimSetMod
syn keyword vimSetTermcap contained termcap
syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
2024-02-13 21:09:22 +01:00
syn match vimSetSep contained "[,:]"
2024-07-24 20:21:22 +02:00
syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
2024-02-13 21:09:22 +01:00
2024-07-17 19:34:14 +02:00
" Variable Declarations: {{{2
" =====================
2025-02-10 22:00:27 +01:00
VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
syn region vimVarList contained
\ start="\[" end="]"
\ contains=@vimContinue,@vimSpecialVar,vimVar
VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars
syn region vimUnletVars contained
\ start="$\I\|\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
\ nextgroup=vimCmdSep,vimComment
2025-03-09 16:30:28 +01:00
\ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar
2024-02-13 21:09:22 +01:00
2024-08-23 18:01:35 +02:00
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
2024-08-22 21:29:39 +02:00
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
2024-08-23 18:01:35 +02:00
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
2024-08-22 21:29:39 +02:00
VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
2024-07-17 19:34:14 +02:00
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
2024-10-06 17:00:48 +02:00
syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
2025-02-10 22:00:27 +01:00
syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
" Lockvar and Unlockvar: {{{2
" =====================
syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars
syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars
syn region vimLockvarVars contained
\ start="\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
\ nextgroup=vimCmdSep,vimComment
\ contains=@vimContinue,vimVar
hi def link vimLockvar vimCommand
hi def link vimUnlockvar vimCommand
hi def link vimLockvarBang vimBang
hi def link vimLockvarDepth vimNumber
2024-02-13 21:09:22 +01:00
" For: {{{2
" ===
2025-02-10 22:00:27 +01:00
" handles Vim9 and legacy for now
syn region vimFor
\ matchgroup=vimCommand
\ start="\<for\>" end="\<in\>"
\ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList
\ contains=@vimContinue,vimVar,vimVarList,vim9VariableList
\ transparent
syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList
syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment
2024-03-23 05:55:25 +11:00
2024-02-13 21:09:22 +01:00
" Abbreviations: {{{2
" =============
" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
2024-03-28 20:06:03 +11:00
" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
2024-02-13 21:09:22 +01:00
" Autocmd: {{{2
" =======
2025-01-08 18:20:47 +01:00
syn match vimAutoCmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoEventList
syn match vimAutoEventList contained "\%(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
2024-02-13 21:09:22 +01:00
syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
2024-04-11 06:18:37 +10:00
syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
2025-01-08 18:20:47 +01:00
syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
2024-04-11 06:18:37 +10:00
syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
2025-02-10 22:00:27 +01:00
syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
2024-02-13 21:09:22 +01:00
" Echo And Execute: -- prefer strings! {{{2
" ================
2024-03-15 23:45:48 +11:00
" NOTE: No trailing comments
syn region vimEcho
\ matchgroup=vimCommand
\ start="\<ec\%[ho]\>"
\ start="\<echoe\%[rr]\>"
\ start="\<echom\%[sg]\>"
\ start="\<echoc\%[onsole]\>"
\ start="\<echon\>"
\ start="\<echow\%[indow]\>"
\ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
\ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
2024-02-13 21:09:22 +01:00
syn case ignore
2024-03-15 23:45:48 +11:00
syn keyword vimEchohlNone contained none
2024-02-13 21:09:22 +01:00
syn case match
2024-03-22 06:41:10 +11:00
syn cluster vimEcho contains=vimEcho,vimEchohl
2024-03-15 23:45:48 +11:00
syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
2024-02-28 05:59:30 +11:00
2024-02-13 21:09:22 +01:00
" Maps: {{{2
" ====
2024-07-18 20:45:19 +02:00
" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
2024-02-23 05:45:05 +11:00
" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
2024-07-18 20:45:19 +02:00
syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
2025-03-07 18:49:11 +01:00
syn match vimMapLhs contained "\%( .\|\S\)\+" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite nextgroup=vimMapRhs
syn match vimMapLhs contained "\%( .\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite skipnl nextgroup=vimMapRhsContinue
2024-03-10 04:01:22 +11:00
syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
2025-03-07 18:49:11 +01:00
syn match vimMapMod contained "\%#=1<\%(buffer\|expr\|nowait\|script\|silent\|special\|unique\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
syn region vimMapRhs contained start="\S" skip=+\\|\| \@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader skipnl nextgroup=vimMapRhsContinue
2024-03-10 04:01:22 +11:00
" assume a continuation comment introduces the RHS
2025-03-07 18:49:11 +01:00
syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\| \@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader
syn match vimMapLeader contained "\%#=1\c<\%(local\)\=leader>" contains=vimMapLeaderKey
syn keyword vimMapModKey contained buffer expr nowait script silent special unique
2024-02-13 21:09:22 +01:00
syn case ignore
2025-03-07 18:49:11 +01:00
syn keyword vimMapLeaderKey contained leader localleader
2024-02-13 21:09:22 +01:00
syn case match
" Menus: {{{2
" =====
2024-03-10 03:43:28 +11:00
" NOTE: tail comments disallowed
" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
2024-03-20 04:04:42 +11:00
syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
2024-03-10 03:43:28 +11:00
syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
syn region vimMenutranslate
\ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
\ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
\ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
\ contains=@vimContinue,vimMenutranslateName keepend transparent
" oneline is sufficient to match the current formatting in runtime/lang/*.vim
syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
2024-02-13 21:09:22 +01:00
" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
" ======================
syn case ignore
2025-02-16 16:40:12 +01:00
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
syn match vimNotation contained '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
syn match vimNotation contained '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
2024-02-13 21:09:22 +01:00
syn match vimBracket contained "[\\<>]"
syn case match
" User Function Highlighting: {{{2
" (following Gautam Iyer's suggestion)
" ==========================
2025-02-10 22:00:27 +01:00
syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vim9MethodName,vim9Super,vim9This
2024-03-19 05:19:51 +11:00
syn keyword vimFuncEcho contained ec ech echo
2024-02-13 21:09:22 +01:00
2024-07-18 20:45:19 +02:00
syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
2024-02-13 21:09:22 +01:00
" User Command Highlighting: {{{2
syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
2025-02-23 15:48:52 +01:00
" Vim user commands
" Compiler plugins
2025-03-07 18:49:11 +01:00
syn match vimCompilerSet "\<CompilerSet\>" skipwhite nextgroup=vimSetArgs
2025-02-23 15:48:52 +01:00
" runtime/makemenu.vim
syn match vimSynMenu "\<SynMenu\>" skipwhite nextgroup=vimSynMenuPath
syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation
syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName
syn match vimSynMenuName contained "\w\+"
syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynMenu
2024-02-13 21:09:22 +01:00
" Errors And Warnings: {{{2
" ====================
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
2024-10-06 17:00:48 +02:00
syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
2024-02-13 21:09:22 +01:00
syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
syn match vimElseIfErr "\<else\s\+if\>"
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
2025-02-16 16:40:12 +01:00
syn match vimNotFunc "\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>" skipwhite nextgroup=@vimExprList,vimNotation
2024-02-13 21:09:22 +01:00
2024-07-07 20:45:37 +02:00
" Match: {{{2
" =====
syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
syn case ignore
syn keyword vimMatchNone contained none
syn case match
syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
2024-11-09 19:11:25 +01:00
" Normal: {{{2
" ======
syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
2024-02-13 21:09:22 +01:00
2024-06-14 20:16:35 +02:00
" Sleep: {{{2
" =====
syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
2024-02-13 21:09:22 +01:00
" Syntax: {{{2
"=======
syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
syn region vimGroupList contained start=/^\s*["#]\\ \|^\s*\\\|[^[:space:],]\+\s*,/ skip=/\s*\n\s*\\\|\s*\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ / end=/[^[:space:],]\s*$\|[^[:space:],]\ze\s\+\w/ contains=@vimContinue,vimGroupSpecial
syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
syn match vimSynError contained "\i\+"
syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
endif
syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
if has("conceal")
" no whitespace allowed after '='
syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
syn match vimSynCcharValue contained "\S"
endif
2024-04-11 06:18:37 +10:00
syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimSyntax
" Syntax: case {{{2
syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
syn match vimSynCaseError contained "\i\+"
endif
syn keyword vimSynCase contained ignore match
" Syntax: clear {{{2
syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
" Syntax: cluster {{{2
syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
2025-03-10 21:04:53 +01:00
" Syntax: conceal {{{2
syn match vimSynType contained "\<conceal\>" skipwhite nextgroup=vimSynConceal,vimSynConcealError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynconcealerror")
syn match vimSynConcealError contained "\i\+"
endif
syn keyword vimSynConceal contained on off
2024-02-13 21:09:22 +01:00
" Syntax: foldlevel {{{2
2025-03-10 21:04:53 +01:00
syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldlevel,vimSynFoldlevelError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldlevelerror")
syn match vimSynFoldlevelError contained "\i\+"
2024-02-13 21:09:22 +01:00
endif
2025-03-10 21:04:53 +01:00
syn keyword vimSynFoldlevel contained start minimum
2024-02-13 21:09:22 +01:00
" Syntax: iskeyword {{{2
2025-03-10 21:04:53 +01:00
syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimSynIskeyword
syn keyword vimSynIskeyword contained clear
syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep
syn match vimSynIskeywordSep contained ","
2024-02-13 21:09:22 +01:00
" Syntax: include {{{2
syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
" Syntax: keyword {{{2
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
2025-03-10 21:04:53 +01:00
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
2024-02-13 21:09:22 +01:00
" Syntax: match {{{2
syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
2025-03-10 21:04:53 +01:00
syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
2024-02-13 21:09:22 +01:00
" Syntax: off and on {{{2
syn keyword vimSynType contained enable list manual off on reset
" Syntax: region {{{2
syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
2025-03-10 21:04:53 +01:00
syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup
syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
2024-02-13 21:09:22 +01:00
syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
2025-03-10 21:04:53 +01:00
syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\="
syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\=," nextgroup=vimSynPatMod
2024-02-13 21:09:22 +01:00
syn match vimSynPatMod contained "lc=\d\+"
syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
syn match vimSynNotPatRange contained "\\\\\|\\\["
syn match vimMtchComment contained '"[^"]\+$'
2025-03-10 21:04:53 +01:00
" Syntax: spell {{{2
syn keyword vimSynType contained spell skipwhite nextgroup=vimSynSpell,vimSynSpellError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynspellerror")
syn match vimSynSpellError contained "\i\+"
endif
syn keyword vimSynSpell contained default notoplevel toplevel
2024-02-13 21:09:22 +01:00
" Syntax: sync {{{2
" ============
2025-03-10 21:04:53 +01:00
syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncClear,vimSyncMatch,vimSyncError,vimSyncRegion,vimSyncArgs
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
syn match vimSyncError contained "\i\+"
endif
2025-03-10 21:04:53 +01:00
syn region vimSyncArgs contained start="\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=vimSyncLines,vimSyncLinebreak,vimSyncLinecont,vimSyncFromstart,vimSyncCcomment
syn keyword vimSyncCcomment contained ccomment skipwhite nextgroup=vimGroupName
syn keyword vimSyncClear contained clear skipwhite nextgroup=vimSyncGroupName
syn keyword vimSyncFromstart contained fromstart
2024-02-13 21:09:22 +01:00
syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
2025-03-15 09:29:31 +01:00
syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynRegion
2025-03-10 21:04:53 +01:00
syn match vimSyncLinebreak contained "\<linebreaks=" nextgroup=vimNumber
2024-02-13 21:09:22 +01:00
syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
2025-03-10 21:04:53 +01:00
syn match vimSyncLines contained "\<lines=" nextgroup=vimNumber
syn match vimSyncLines contained "\<minlines=" nextgroup=vimNumber
syn match vimSyncLines contained "\<maxlines=" nextgroup=vimNumber
syn match vimSyncGroupName contained "\<\h\w*\>" skipwhite nextgroup=vimSyncKey
syn match vimSyncKey contained "\<grouphere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncKey contained "\<groupthere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncGroup contained "\<\h\w*\>" skipwhite nextgroup=vimSynRegPat,vimSyncNone
2024-02-13 21:09:22 +01:00
syn keyword vimSyncNone contained NONE
" Additional IsCommand: here by reasons of precedence {{{2
" ====================
syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
" Highlighting: {{{2
" ============
2024-04-11 06:18:37 +10:00
syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
syn match vimHiCtermError contained "\D\i*"
endif
syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
2024-03-19 05:19:51 +11:00
syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
2024-02-13 21:09:22 +01:00
syn match vimHiGroup contained "\i\+"
syn case ignore
2025-03-10 21:04:53 +01:00
syn keyword vimHiNone contained NONE
2024-02-13 21:09:22 +01:00
syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
syn keyword vimFgBgAttrib contained none bg background fg foreground
syn case match
syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
syn case ignore
syn keyword vimHiCtermColor contained black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey grey40 grey50 grey90 lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred lightyellow magenta red seagreen white yellow
syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
syn case match
2025-03-10 21:04:53 +01:00
2024-02-13 21:09:22 +01:00
syn match vimHiFontname contained "[a-zA-Z\-*]\+"
syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
syn match vimHiGuiRgb contained "#\x\{6}"
" Highlighting: hi group key=arg ... {{{2
2025-03-10 21:04:53 +01:00
syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiNone,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
2024-03-19 05:19:51 +11:00
syn region vimHiKeyList contained start="\i\+" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
syn match vimHiKeyError contained "\i\+="he=e-1
endif
syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
2024-03-19 05:19:51 +11:00
syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
2024-02-13 21:09:22 +01:00
syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
syn match vimHiTermcap contained "\S\+" contains=vimNotation
syn match vimHiNmbr contained '\d\+'
" Highlight: clear {{{2
2024-03-19 05:19:51 +11:00
syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
2024-02-13 21:09:22 +01:00
" Highlight: link {{{2
" see tst24 (hi def vs hi) (Jul 06, 2018)
"syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
2024-03-19 05:19:51 +11:00
" TODO: simplify and allow line continuations --djk
syn region vimHiLink contained matchgroup=Type start="\%(\<hi\%[ghlight]!\=\s\+\)\@<=\%(\%(def\%[ault]\s\+\)\=link\>\|\<def\%[ault]\>\)" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
2024-02-13 21:09:22 +01:00
" Control Characters: {{{2
" ==================
syn match vimCtrlChar "[ - - ]"
" Beginners - Patterns that involve ^ {{{2
" =========
2024-09-19 19:51:59 +02:00
Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
2024-07-17 19:34:14 +02:00
2024-02-13 21:09:22 +01:00
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
2024-04-11 06:18:37 +10:00
syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup
2024-06-12 03:27:53 +10:00
2024-06-15 23:06:17 +10:00
" allowed anywhere in the file
if !s:vim9script
syn match vimShebangError "^\s*\zs#!.*" display
endif
syn match vimShebang "\%^#!.*" display
2024-02-13 21:09:22 +01:00
syn match vimContinue "^\s*\zs\\"
2025-02-13 20:24:42 +01:00
syn match vimContinueComment '^\s*\zs["#]\\ .*' extend
syn match vim9ContinueComment "^\s*\zs#\\ .*" extend
2024-10-06 17:00:48 +02:00
syn cluster vimContinue contains=vimContinue,vimContinueComment
syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
2024-02-13 21:09:22 +01:00
syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
2024-04-11 06:18:37 +10:00
syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
2024-02-13 21:09:22 +01:00
" Searches And Globals: {{{2
" ====================
2025-01-20 21:53:01 +01:00
VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
2024-02-13 21:09:22 +01:00
syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
2025-01-20 21:53:01 +01:00
Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim
syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep
2024-02-27 07:10:18 +11:00
syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
2024-02-13 21:09:22 +01:00
2024-04-11 06:18:37 +10:00
" Vim9 Script Regions: {{{2
" ==================
if s:vim9script
2024-04-13 18:24:01 +02:00
syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
2024-04-11 06:18:37 +10:00
2024-04-13 18:24:01 +02:00
syn keyword vim9Vim9ScriptArg noclear contained
syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
2024-04-11 06:18:37 +10:00
endif
2024-02-13 21:09:22 +01:00
" 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
2024-06-17 18:12:30 +02:00
" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
2024-02-13 21:09:22 +01:00
if !exists("g:vimsyn_embed")
let g:vimsyn_embed= "lmpPr"
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' && has("lua")) && filereadable(s:luapath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimLuaRegion
exe "syn include @vimLuaScript ".s:luapath
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimLuaRegion
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
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' && has("perl")) && filereadable(s:perlpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPerlRegion
exe "syn include @vimPerlScript ".s:perlpath
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimPerlRegion
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
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' && has("ruby")) && filereadable(s:rubypath)
syn cluster vimFuncBodyList add=vimRubyRegion
unlet! b:current_syntax
exe "syn include @vimRubyScript ".s:rubypath
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimRubyRegion
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
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' && has("pythonx") && filereadable(s:pythonpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimPythonRegion
exe "syn include @vimPythonScript ".s:pythonpath
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimPythonRegion
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
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' && has("tcl")) && filereadable(s:tclpath)
unlet! b:current_syntax
syn cluster vimFuncBodyList add=vimTclRegion
exe "syn include @vimTclScript ".s:tclpath
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimTclScript
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
endif
unlet s:tclpath
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
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' && has("mzscheme")) && 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
2024-08-22 21:29:39 +02:00
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
2024-02-13 21:09:22 +01:00
syn cluster vimFuncBodyList add=vimMzSchemeRegion
else
2024-08-22 21:29:39 +02:00
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=+^\.$+
2024-02-13 21:09:22 +01:00
endif
unlet s:mzschemepath
" Synchronize (speed) {{{2
"============
if exists("g:vimsyn_minlines")
exe "syn sync minlines=".g:vimsyn_minlines
endif
exe "syn sync maxlines=".s:vimsyn_maxlines
syn sync linecont "^\s\+\\"
2024-03-10 03:43:28 +11:00
syn sync linebreaks=1
2024-02-13 21:09:22 +01:00
syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
" ====================
" Highlighting Settings {{{2
" ====================
if !exists("skip_vim_syntax_inits")
if !exists("g:vimsyn_noerror")
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
hi def link vimEmbedError vimError
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError
hi def link vimHiAttribList vimError
hi def link vimHiCtermError vimError
hi def link vimHiKeyError vimError
hi def link vimMapModErr vimError
2024-06-15 23:06:17 +10:00
hi def link vimShebangError vimError
2024-02-13 21:09:22 +01:00
hi def link vimSubstFlagErr vimError
hi def link vimSynCaseError vimError
2025-03-10 21:04:53 +01:00
hi def link vimSyncError vimError
hi def link vimSynConcealError vimError
hi def link vimSynError vimError
hi def link vimSynFoldlevelError vimError
hi def link vimSynIskeywordError vimError
hi def link vimSynSpellError vimError
2024-02-13 21:09:22 +01:00
hi def link vimBufnrWarn vimWarn
2024-10-06 17:00:48 +02:00
hi def link vim9TypeAliasError vimError
2024-02-13 21:09:22 +01:00
endif
hi def link vimAbb vimCommand
hi def link vimAddress vimMark
2024-03-04 02:42:47 +11:00
hi def link vimAugroupBang vimBang
2024-02-13 21:09:22 +01:00
hi def link vimAugroupError vimError
hi def link vimAugroupKey vimCommand
hi def link vimAutoCmd vimCommand
2025-01-08 18:20:47 +01:00
hi def link vimAutoCmdBang vimBang
2024-02-13 21:09:22 +01:00
hi def link vimAutoEvent Type
hi def link vimAutoCmdMod Special
hi def link vimBang vimOper
2024-02-27 07:10:18 +11:00
hi def link vimBehaveBang vimBang
2024-02-13 21:09:22 +01:00
hi def link vimBehaveModel vimBehave
hi def link vimBehave vimCommand
hi def link vimBracket Delimiter
2024-07-18 20:45:19 +02:00
hi def link vimCall vimCommand
2024-06-14 01:48:10 +10:00
hi def link vimCatch vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimCmplxRepeat SpecialChar
hi def link vimCommand Statement
hi def link vimComment Comment
2024-06-22 11:20:36 +02:00
hi def link vimCommentError vimError
2024-02-13 21:09:22 +01:00
hi def link vimCommentString vimString
hi def link vimCommentTitle PreProc
hi def link vimCondHL vimCommand
hi def link vimConst vimCommand
hi def link vimContinue Special
hi def link vimContinueComment vimComment
2025-02-03 18:59:09 +01:00
hi def link vimCount Number
2024-02-13 21:09:22 +01:00
hi def link vimCtrlChar SpecialChar
2025-02-03 18:59:09 +01:00
hi def link vimDebuggreedy vimCommand
2024-06-22 11:20:36 +02:00
hi def link vimDefComment vim9Comment
2024-03-22 06:41:10 +11:00
hi def link vimDefKey vimCommand
2025-02-10 22:00:27 +01:00
hi def link vimDefParam vimVar
2024-09-02 10:03:37 +02:00
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
2024-02-28 05:59:30 +11:00
hi def link vimEcho vimCommand
2024-03-15 23:45:48 +11:00
hi def link vimEchohlNone vimGroup
hi def link vimEchohl vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimElseIfErr Error
2024-03-22 06:41:10 +11:00
hi def link vimEndfunction vimCommand
hi def link vimEnddef vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimEnvvar PreProc
hi def link vimError Error
hi def link vimEscape Special
hi def link vimFBVar vimVar
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimFuncEcho vimCommand
hi def link vimFor vimCommand
2025-02-10 22:00:27 +01:00
hi def link vimForInContinue vimContinue
hi def link vimForInContinueComment vimContinueComment
2024-02-13 21:09:22 +01:00
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
2024-03-22 06:41:10 +11:00
hi def link vimFuncBang vimBang
hi def link vimFuncComment vimComment
2024-02-13 21:09:22 +01:00
hi def link vimFuncKey vimCommand
hi def link vimFuncName Function
2024-03-22 06:41:10 +11:00
hi def link vimFuncMod Special
hi def link vimFuncParam vimVar
hi def link vimFuncParamEquals vimOper
2025-03-09 16:30:28 +01:00
hi def link vimFuncScope vimVarScope
2025-02-10 22:00:27 +01:00
hi def link vimFuncSID vimNotation
2024-02-13 21:09:22 +01:00
hi def link vimGroupAdd vimSynOption
2025-03-10 21:04:53 +01:00
hi def link vimGroupName Normal
2024-02-13 21:09:22 +01:00
hi def link vimGroupRem vimSynOption
hi def link vimGroupSpecial Special
hi def link vimGroup Type
hi def link vimHiAttrib PreProc
hi def link vimHiBang vimBang
2024-03-19 05:19:51 +11:00
hi def link vimHiClear Type
hi def link vimHiCtermColor Constant
2024-02-13 21:09:22 +01:00
hi def link vimHiCtermFgBg vimHiTerm
2024-03-19 05:19:51 +11:00
hi def link vimHiCtermfont vimHiTerm
hi def link vimHiCtermul vimHiTerm
2024-02-13 21:09:22 +01:00
hi def link vimHiCTerm vimHiTerm
hi def link vimHighlight vimCommand
hi def link vimHiGroup vimGroupName
hi def link vimHiGuiFgBg vimHiTerm
hi def link vimHiGuiFont vimHiTerm
hi def link vimHiGuiRgb vimNumber
hi def link vimHiGui vimHiTerm
hi def link vimHiNmbr Number
2025-03-10 21:04:53 +01:00
hi def link vimHiNone vimGroup
2024-02-13 21:09:22 +01:00
hi def link vimHiStartStop vimHiTerm
hi def link vimHiTerm Type
hi def link vimHLGroup vimGroup
hi def link vimInsert vimString
2024-04-11 06:18:37 +10:00
hi def link vim9KeymapLineComment vimKeymapLineComment
2024-02-13 21:09:22 +01:00
hi def link vimKeymapLineComment vimComment
hi def link vimKeymapTailComment vimComment
2025-02-10 22:00:27 +01:00
hi def link vimLambdaOperator vimOper
2024-02-13 21:09:22 +01:00
hi def link vimLet vimCommand
hi def link vimLetHereDoc vimString
hi def link vimLetHereDocStart Special
hi def link vimLetHereDocStop Special
hi def link vimLetRegister Special
hi def link vimLineComment vimComment
hi def link vimMapBang vimBang
2025-03-07 18:49:11 +01:00
hi def link vimMapLeader vimBracket
hi def link vimMapLeaderKey vimNotation
2024-02-13 21:09:22 +01:00
hi def link vimMapModKey vimFuncSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark Number
hi def link vimMarkNumber vimNumber
2024-07-07 20:45:37 +02:00
hi def link vimMatch vimCommand
hi def link vimMatchGroup vimGroup
hi def link vimMatchNone vimGroup
2024-02-13 21:09:22 +01:00
hi def link vimMenuBang vimBang
2024-03-10 03:43:28 +11:00
hi def link vimMenuClear Special
2024-02-13 21:09:22 +01:00
hi def link vimMenuMod vimMapMod
hi def link vimMenuName PreProc
2024-03-10 03:43:28 +11:00
hi def link vimMenu vimCommand
hi def link vimMenuNotation vimNotation
hi def link vimMenuPriority Number
hi def link vimMenuStatus Special
hi def link vimMenutranslateComment vimComment
2024-10-06 17:00:48 +02:00
hi def link vim9MethodName vimFuncName
2024-02-13 21:09:22 +01:00
hi def link vimMtchComment vimComment
2024-11-09 19:11:25 +01:00
hi def link vimNormal vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimNotation Special
hi def link vimNotFunc vimCommand
hi def link vimNotPatSep vimString
hi def link vimNumber Number
hi def link vimOperError Error
hi def link vimOper Operator
2025-02-10 22:00:27 +01:00
hi def link vimOperContinue vimContinue
hi def link vimOperContinueComment vimContinueComment
2024-02-13 21:09:22 +01:00
hi def link vimOption PreProc
2025-02-10 22:00:27 +01:00
hi def link vimOptionVar Identifier
2025-03-09 16:30:28 +01:00
hi def link vimOptionVarName Identifier
2024-02-13 21:09:22 +01:00
hi def link vimParenSep Delimiter
hi def link vimPatSepErr vimError
hi def link vimPatSepR vimPatSep
hi def link vimPatSep SpecialChar
hi def link vimPatSepZone vimString
hi def link vimPatSepZ vimPatSep
hi def link vimPattern Type
hi def link vimPlainMark vimMark
hi def link vimPlainRegister vimRegister
2025-01-10 20:02:17 +01:00
hi def link vimQuoteEscape vimEscape
2024-02-13 21:09:22 +01:00
hi def link vimRegister SpecialChar
hi def link vimScriptDelim Comment
hi def link vimSearch vimString
2025-01-20 21:53:01 +01:00
hi def link vimSearchDelim Delimiter
2024-02-13 21:09:22 +01:00
hi def link vimSep Delimiter
2024-07-24 20:21:22 +02:00
hi def link vimSet vimCommand
hi def link vimSetAll vimOption
hi def link vimSetBang vimBang
2024-02-13 21:09:22 +01:00
hi def link vimSetMod vimOption
2024-07-24 20:21:22 +02:00
hi def link vimSetSep vimSep
2024-02-13 21:09:22 +01:00
hi def link vimSetString vimString
2024-07-24 20:21:22 +02:00
hi def link vimSetTermcap vimOption
2024-06-15 23:06:17 +10:00
hi def link vimShebang PreProc
2024-06-14 20:16:35 +02:00
hi def link vimSleep vimCommand
hi def link vimSleepArg Constant
hi def link vimSleepBang vimBang
2024-02-13 21:09:22 +01:00
hi def link vimSpecFile Identifier
hi def link vimSpecFileMod vimSpecFile
hi def link vimSpecial Type
hi def link vimStringCont vimString
hi def link vimString String
hi def link vimStringEnd vimString
hi def link vimStringInterpolationBrace vimEscape
hi def link vimSubst1 vimSubst
hi def link vimSubstDelim Delimiter
hi def link vimSubstFlags Special
hi def link vimSubstSubstr SpecialChar
hi def link vimSubstTwoBS vimString
hi def link vimSubst vimCommand
hi def link vimSynCase Type
2025-03-10 21:04:53 +01:00
hi def link vimSyncCcomment Type
hi def link vimSynCchar vimSynOption
hi def link vimSynCcharValue Character
hi def link vimSyncClear Type
hi def link vimSyncFromstart Type
2024-02-13 21:09:22 +01:00
hi def link vimSyncGroup vimGroupName
2025-03-10 21:04:53 +01:00
hi def link vimSyncGroupName vimGroupName
2024-02-13 21:09:22 +01:00
hi def link vimSyncKey Type
2025-03-10 21:04:53 +01:00
hi def link vimSyncLinebreak Type
hi def link vimSyncLinecont Type
hi def link vimSyncLines Type
hi def link vimSyncMatch Type
2024-02-13 21:09:22 +01:00
hi def link vimSyncNone Type
2025-03-10 21:04:53 +01:00
hi def link vimSynConceal Type
2024-02-13 21:09:22 +01:00
hi def link vimSynContains vimSynOption
2025-03-10 21:04:53 +01:00
hi def link vimSyncRegion Type
hi def link vimSynFoldlevel Type
hi def link vimSynIskeyword Type
hi def link vimSynIskeywordSep Delimiter
2024-02-13 21:09:22 +01:00
hi def link vimSynKeyContainedin vimSynContains
hi def link vimSynKeyOpt vimSynOption
hi def link vimSynMtchGrp vimSynOption
hi def link vimSynMtchOpt vimSynOption
hi def link vimSynNextgroup vimSynOption
hi def link vimSynNotPatRange vimSynRegPat
hi def link vimSynOption Special
hi def link vimSynPatRange vimString
2025-03-10 21:04:53 +01:00
hi def link vimSynReg Type
2024-02-13 21:09:22 +01:00
hi def link vimSynRegOpt vimSynOption
hi def link vimSynRegPat vimString
2025-03-10 21:04:53 +01:00
hi def link vimSynSpell Type
2024-02-13 21:09:22 +01:00
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
2024-06-14 01:48:10 +10:00
hi def link vimThrow vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimTodo Todo
hi def link vimType Type
hi def link vimUnlet vimCommand
hi def link vimUnletBang vimBang
hi def link vimUnmap vimMap
2024-09-02 10:03:37 +02:00
hi def link vimUserCmdAttrAddr vimSpecial
hi def link vimUserCmdAttrCmplt vimSpecial
hi def link vimUserCmdAttrNargs vimSpecial
hi def link vimUserCmdAttrRange vimSpecial
hi def link vimUserCmdAttrKey vimUserCmdAttr
hi def link vimUserCmdAttr Special
hi def link vimUserCmdAttrError Error
2024-02-13 21:09:22 +01:00
hi def link vimUserCmdError Error
2024-09-02 10:03:37 +02:00
hi def link vimUserCmdKey vimCommand
2024-02-13 21:09:22 +01:00
hi def link vimUserFunc Normal
2025-02-10 22:00:27 +01:00
hi def link vimVar Normal
2025-03-09 16:30:28 +01:00
hi def link vimVarScope Identifier
hi def link vimVimVar Identifier
hi def link vimVimVarName Identifier
2024-02-13 21:09:22 +01:00
hi def link vimWarn WarningMsg
2024-07-17 19:34:14 +02:00
2024-10-06 17:00:48 +02:00
hi def link vim9Abstract vimCommand
2024-07-17 19:34:14 +02:00
hi def link vim9Boolean Boolean
2024-10-06 17:00:48 +02:00
hi def link vim9Class vimCommand
2024-07-17 19:34:14 +02:00
hi def link vim9Comment Comment
hi def link vim9CommentError vimError
hi def link vim9CommentTitle PreProc
2025-02-10 22:00:27 +01:00
hi def link vim9ConstructorDefParam vimVar
2024-07-17 19:34:14 +02:00
hi def link vim9Const vimCommand
2024-10-06 17:00:48 +02:00
hi def link vim9ContinueComment vimContinueComment
hi def link vim9Enum vimCommand
hi def link vim9Export vimCommand
hi def link vim9Extends Keyword
2024-07-17 19:34:14 +02:00
hi def link vim9Final vimCommand
hi def link vim9For vimCommand
2025-02-10 22:00:27 +01:00
hi def link vim9ForInComment vim9Comment
2024-10-06 17:00:48 +02:00
hi def link vim9Implements Keyword
hi def link vim9AbstractDef vimCommand
hi def link vim9Interface vimCommand
2025-02-10 22:00:27 +01:00
hi def link vim9LambdaOperator vimOper
hi def link vim9LambdaOperatorComment vim9Comment
hi def link vim9LambdaParamsParen vimParenSep
hi def link vim9LhsRegister vimLetRegister
hi def link vim9LhsVariable vimVar
2024-07-17 19:34:14 +02:00
hi def link vim9LineComment vimComment
2024-10-06 17:00:48 +02:00
hi def link vim9MethodDef vimCommand
hi def link vim9MethodNameError vimFunctionError
2024-07-17 19:34:14 +02:00
hi def link vim9Null Constant
2024-10-06 17:00:48 +02:00
hi def link vim9Public vimCommand
2025-01-20 21:53:01 +01:00
hi def link vim9Search vimString
hi def link vim9SearchDelim Delimiter
2024-10-06 17:00:48 +02:00
hi def link vim9Static vimCommand
hi def link vim9Super Identifier
hi def link vim9This Identifier
hi def link vim9Type vimCommand
hi def link vim9TypeEquals vimOper
2024-07-17 19:34:14 +02:00
hi def link vim9Variable vimVar
2024-10-06 17:00:48 +02:00
hi def link vim9Var vimCommand
2024-07-17 19:34:14 +02:00
hi def link vim9Vim9ScriptArg Special
2024-10-06 17:00:48 +02:00
hi def link vim9Vim9Script vimCommand
2025-02-23 15:48:52 +01:00
hi def link vimCompilerSet vimCommand
hi def link vimSynMenu vimCommand
hi def link vimSynMenuPath vimMenuName
2024-02-13 21:09:22 +01:00
endif
" Current Syntax Variable: {{{2
let b:current_syntax = "vim"
" ---------------------------------------------------------------------
" Cleanup: {{{1
2024-07-17 19:34:14 +02:00
delc Vim9
delc VimL
2024-02-13 21:09:22 +01:00
delc VimFolda
2024-10-06 17:00:48 +02:00
delc VimFoldc
delc VimFolde
2024-02-13 21:09:22 +01:00
delc VimFoldf
2024-04-13 18:24:01 +02:00
delc VimFoldh
delc VimFoldH
2024-10-06 17:00:48 +02:00
delc VimFoldi
2024-02-13 21:09:22 +01:00
delc VimFoldl
delc VimFoldm
delc VimFoldp
delc VimFoldP
delc VimFoldr
delc VimFoldt
let &cpo = s:keepcpo
2024-04-11 06:18:37 +10:00
unlet s:keepcpo s:vim9script
2024-03-10 04:01:22 +11:00
" vim:ts=18 fdm=marker ft=vim