blob: ab63de6c77bf0f94730a9f29ca6f6f1b57f2960e [file] [log] [blame]
h-east9b53c052024-02-13 21:09:22 +01001" Vim syntax file
dkearns982e1912024-03-28 20:06:03 +11002" Language: Vim script
3" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
4" Doug Kearns <dougkearns@gmail.com>
Doug Kearnsa9c06422025-02-12 20:44:17 +01005" Last Change: 2025 Feb 13
Christian Brabandtf9ca1392024-02-19 20:37:11 +01006" Former Maintainer: Charles E. Campbell
h-east9b53c052024-02-13 21:09:22 +01007
8" DO NOT CHANGE DIRECTLY.
9" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
10" (Search string "GEN_SYN_VIM:" in this file)
11
12" Automatically generated keyword lists: {{{1
13
14" Quit when a syntax file was already loaded {{{2
15if exists("b:current_syntax")
16 finish
17endif
h-east9b53c052024-02-13 21:09:22 +010018let s:keepcpo= &cpo
19set cpo&vim
20
dkearns04e53632024-04-11 06:18:37 +100021let s:vim9script = "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
22
h-east9b53c052024-02-13 21:09:22 +010023" vimTodo: contains common special-notices for comments {{{2
24" Use the vimCommentGroup cluster to add your own.
25syn keyword vimTodo contained COMBAK FIXME TODO XXX
26syn cluster vimCommentGroup contains=vimTodo,@Spell
27
28" regular vim commands {{{2
Doug Kearns1718e7d2025-01-08 18:20:47 +010029" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang'
h-east9b53c052024-02-13 21:09:22 +010030
Aliaksei Budaveidfcef892024-02-18 21:02:14 +030031" Lower priority for _new_ to distinguish constructors from the command.
32syn match vimCommand contained "\<new\>(\@!"
h-east9b53c052024-02-13 21:09:22 +010033syn match vimCommand contained "\<z[-+^.=]\=\>"
34syn 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
35
36" vimOptions are caught only when contained in a vimSet {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +020037" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
h-east9b53c052024-02-13 21:09:22 +010038
39" vimOptions: These are the turn-off setting variants {{{2
40" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
41
42" vimOptions: These are the invertible variants {{{2
43" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
44
45" termcap codes (which can also be set) {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +020046" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
h-east9b53c052024-02-13 21:09:22 +010047" term key codes
48syn 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
49syn match vimOption contained "t_%1"
50syn match vimOption contained "t_#2"
51syn match vimOption contained "t_#4"
52syn match vimOption contained "t_@7"
53syn match vimOption contained "t_*7"
54syn match vimOption contained "t_&8"
55syn match vimOption contained "t_%i"
56syn match vimOption contained "t_k;"
57
58" unsupported settings: some were supported by vi but don't do anything in vim {{{2
59" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
60
61" AutoCmd Events {{{2
62syn case ignore
63" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
64
65" Highlight commonly used Groupnames {{{2
66syn 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
67
68" Default highlighting groups {{{2
69" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
h_eastc984b2f2024-05-27 22:40:25 +090070syn match vimHLGroup contained "\<Conceal\>"
h-east9b53c052024-02-13 21:09:22 +010071syn case match
72
73" Function Names {{{2
74" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
75
76"--- syntax here and above generated by mkvimvim ---
77" Special Vim Highlighting (not automatic) {{{1
78
Doug Kearnsd65e58f2024-07-17 19:34:14 +020079" Set up commands for this syntax highlighting file {{{2
80
81com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
82com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
83
Doug Kearns818c6412024-10-06 17:00:48 +020084if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]'
h-east9b53c052024-02-13 21:09:22 +010085 if g:vimsyn_folding =~# 'a'
86 com! -nargs=* VimFolda <args> fold
87 else
88 com! -nargs=* VimFolda <args>
89 endif
Doug Kearns818c6412024-10-06 17:00:48 +020090 if g:vimsyn_folding =~# 'c'
91 com! -nargs=* VimFoldc <args> fold
92 else
93 com! -nargs=* VimFoldc <args>
94 endif
95 if g:vimsyn_folding =~# 'e'
96 com! -nargs=* VimFolde <args> fold
97 else
98 com! -nargs=* VimFolde <args>
99 endif
h-east9b53c052024-02-13 21:09:22 +0100100 if g:vimsyn_folding =~# 'f'
101 com! -nargs=* VimFoldf <args> fold
102 else
103 com! -nargs=* VimFoldf <args>
104 endif
105 if g:vimsyn_folding =~# 'h'
106 com! -nargs=* VimFoldh <args> fold
107 else
108 com! -nargs=* VimFoldh <args>
109 endif
Doug Kearnsce064932024-04-13 18:24:01 +0200110 if g:vimsyn_folding =~# 'H'
111 com! -nargs=* VimFoldH <args> fold
112 else
113 com! -nargs=* VimFoldH <args>
114 endif
Doug Kearns818c6412024-10-06 17:00:48 +0200115 if g:vimsyn_folding =~# 'i'
116 com! -nargs=* VimFoldi <args> fold
117 else
118 com! -nargs=* VimFoldi <args>
119 endif
h-east9b53c052024-02-13 21:09:22 +0100120 if g:vimsyn_folding =~# 'l'
121 com! -nargs=* VimFoldl <args> fold
122 else
123 com! -nargs=* VimFoldl <args>
124 endif
125 if g:vimsyn_folding =~# 'm'
126 com! -nargs=* VimFoldm <args> fold
127 else
128 com! -nargs=* VimFoldm <args>
129 endif
130 if g:vimsyn_folding =~# 'p'
131 com! -nargs=* VimFoldp <args> fold
132 else
133 com! -nargs=* VimFoldp <args>
134 endif
135 if g:vimsyn_folding =~# 'P'
136 com! -nargs=* VimFoldP <args> fold
137 else
138 com! -nargs=* VimFoldP <args>
139 endif
140 if g:vimsyn_folding =~# 'r'
141 com! -nargs=* VimFoldr <args> fold
142 else
143 com! -nargs=* VimFoldr <args>
144 endif
145 if g:vimsyn_folding =~# 't'
146 com! -nargs=* VimFoldt <args> fold
147 else
148 com! -nargs=* VimFoldt <args>
149 endif
150else
151 com! -nargs=* VimFolda <args>
Doug Kearns818c6412024-10-06 17:00:48 +0200152 com! -nargs=* VimFoldc <args>
153 com! -nargs=* VimFolde <args>
h-east9b53c052024-02-13 21:09:22 +0100154 com! -nargs=* VimFoldf <args>
Doug Kearns818c6412024-10-06 17:00:48 +0200155 com! -nargs=* VimFoldi <args>
h-east9b53c052024-02-13 21:09:22 +0100156 com! -nargs=* VimFoldh <args>
Doug Kearnsce064932024-04-13 18:24:01 +0200157 com! -nargs=* VimFoldH <args>
h-east9b53c052024-02-13 21:09:22 +0100158 com! -nargs=* VimFoldl <args>
159 com! -nargs=* VimFoldm <args>
160 com! -nargs=* VimFoldp <args>
161 com! -nargs=* VimFoldP <args>
162 com! -nargs=* VimFoldr <args>
163 com! -nargs=* VimFoldt <args>
164endif
165
166" Deprecated variable options {{{2
167if exists("g:vim_minlines")
168 let g:vimsyn_minlines= g:vim_minlines
169endif
170if exists("g:vim_maxlines")
171 let g:vimsyn_maxlines= g:vim_maxlines
172endif
173if exists("g:vimsyntax_noerror")
174 let g:vimsyn_noerror= g:vimsyntax_noerror
175endif
176
177" Variable options {{{2
178if exists("g:vim_maxlines")
179 let s:vimsyn_maxlines= g:vim_maxlines
180else
181 let s:vimsyn_maxlines= 60
182endif
183
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200184" Nulls {{{2
185" =====
186Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
187
188" Booleans {{{2
189" ========
190Vim9 syn keyword vim9Boolean true false
191
h-east9b53c052024-02-13 21:09:22 +0100192" Numbers {{{2
193" =======
dkearns5cd86c62024-03-12 07:40:58 +1100194syn case ignore
Doug Kearns1aa287e2025-02-10 22:00:27 +0100195syn match vimNumber '\<\d\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
196syn match vimNumber '\<\d\+\.\d\+\%(e[+-]\=\d\+\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
197syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
198syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
199syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
Doug Kearns8dec6c22025-01-19 14:02:06 +0100200syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
Doug Kearns1aa287e2025-02-10 22:00:27 +0100201syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
Doug Kearns8dec6c22025-01-19 14:02:06 +0100202syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
dkearns5cd86c62024-03-12 07:40:58 +1100203syn case match
h-east9b53c052024-02-13 21:09:22 +0100204
205" All vimCommands are contained by vimIsCommand. {{{2
Doug Kearns1aa287e2025-02-10 22:00:27 +0100206syn 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
h-east61397662025-01-03 17:32:54 +0100207syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
dkearnsc4aef9a2024-03-04 02:42:47 +1100208syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
Doug Kearns4a530a62025-02-03 18:59:09 +0100209syn match vimCount contained "\d\+"
Doug Kearns1718e7d2025-01-08 18:20:47 +0100210syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
Doug Kearns3c07eb02024-09-02 10:03:37 +0200211syn match vimBang contained "!"
h-east9b53c052024-02-13 21:09:22 +0100212
Doug Kearns1aa287e2025-02-10 22:00:27 +0100213syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList
214
215syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This
216syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
217syn match vimVar "\<a:\%(000\|\d\+\)\>" nextgroup=vimSubscript
218syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript
219
220syn match vimVimVar "\<v:\h\w*\>" nextgroup=vimSubscript
221syn match vimOptionVar "&\%([lg]:\)\=\a\+\>" nextgroup=vimSubscript
222syn match vimOptionVar "&t_\S[a-zA-Z0-9]\>" nextgroup=vimSubscript
223syn match vimOptionVar "&t_k;" nextgroup=vimSubscript
224syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
225
226Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\=="
227Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.="
228Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
229Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This
230Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript
231Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This
232
233Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar
234Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar
235
236Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
237
238syn cluster vimExprList contains=@vimSpecialVar,vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
239syn cluster vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null
dkearnsb1427b42024-02-28 05:59:30 +1100240
h-east9b53c052024-02-13 21:09:22 +0100241" Insertions And Appends: insert append {{{2
242" (buftype != nofile test avoids having append, change, insert show up in the command window)
243" =======================
244if &buftype != 'nofile'
dkearns4ba70ca2024-04-15 04:32:56 +1000245 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend
246 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend
247 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend
h-east9b53c052024-02-13 21:09:22 +0100248endif
249
250" Behave! {{{2
251" =======
h-east9b53c052024-02-13 21:09:22 +0100252if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
253 syn match vimBehaveError contained "[^ ]\+"
254endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100255syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
256syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
257syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100258
Doug Kearns99984fc2024-07-18 20:45:19 +0200259" Call {{{2
260" ====
261syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
262
Doug Kearnsa9c06422025-02-12 20:44:17 +0100263" Debuggreedy {{{2
Doug Kearns4a530a62025-02-03 18:59:09 +0100264" ===========
265" TODO: special-cased until generalised range/count support is implemented
266syn match vimDebuggreedy "\<0\=debugg\%[reedy]\>" contains=vimCount
267
dkearnsa3bddb72024-06-14 01:48:10 +1000268" Exception Handling {{{2
269syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
270syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
271syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
272
Doug Kearns818c6412024-10-06 17:00:48 +0200273" Export {{{2
274" ======
275if s:vim9script
276 syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
277endif
278
h-east9b53c052024-02-13 21:09:22 +0100279" Filetypes {{{2
280" =========
281syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
282if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
283 syn match vimFTError contained "\I\i*"
284endif
285syn keyword vimFTCmd contained filet[ype]
286syn keyword vimFTOption contained detect indent off on plugin
287
288" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
289" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
Doug Kearns1aa287e2025-02-10 22:00:27 +0100290syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
dkearnsc4aef9a2024-03-04 02:42:47 +1100291syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100292if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100293 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
h-east9b53c052024-02-13 21:09:22 +0100294else
dkearnsc4aef9a2024-03-04 02:42:47 +1100295 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
h-east9b53c052024-02-13 21:09:22 +0100296endif
h-east9b53c052024-02-13 21:09:22 +0100297if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100298 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100299endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100300
301syn match vimAutoCmdGroup contained "\S\+"
302syn match vimAugroupEnd contained "\c\<END\>"
303syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
304syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100305
306" Operators: {{{2
307" =========
Doug Kearnsa9c06422025-02-12 20:44:17 +0100308syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment
Doug Kearns1aa287e2025-02-10 22:00:27 +0100309syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
310syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
311syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100312" distinguish ternary : from ex-colon
Doug Kearns1aa287e2025-02-10 22:00:27 +0100313syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
314syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
315syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
316syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
317syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
318syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
319syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup nextgroup=vimSubscript
320syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
321syn region vimOperParen contained matchgroup=vimSep start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
h-east9b53c052024-02-13 21:09:22 +0100322if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
323 syn match vimOperError ")"
324endif
325
Doug Kearns1aa287e2025-02-10 22:00:27 +0100326syn match vimOperContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
327syn match vimOperContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
328syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
329
330" Lambda Expressions: {{{2
331" ==================
332syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
333syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams
334syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam
335
336syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
337syn match vim9LambdaParamsParen contained "[()]"
338syn region vim9LambdaParams contained
339 \ matchgroup=vim9LambdaParamsParen
340 \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
341 \ start="(\ze\s*\n
342 "\ line continuations
343 \\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s*
344 "\ parameter names
345 \\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
346 \ end=")\ze\%(:\s\|\s\+=>\)"
347 \ matchgroup=vimContinue
348 \ end="^\s*\\\ze\s\+=>"
349 \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
350 \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
351syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen
352
353syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent
354syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
355
356syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
357
dkearns4ba70ca2024-04-15 04:32:56 +1000358" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
h-east9b53c052024-02-13 21:09:22 +0100359" =========
Doug Kearns1aa287e2025-02-10 22:00:27 +0100360syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag
361syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag
dkearns4ba70ca2024-04-15 04:32:56 +1000362
Doug Kearns1aa287e2025-02-10 22:00:27 +0100363syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
364syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch
365syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar
dkearns35e6f4c2024-03-22 06:41:10 +1100366
367syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
368syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
369syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
370
371syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
Doug Kearns818c6412024-10-06 17:00:48 +0200372syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100373
Doug Kearns35699f12024-09-19 19:51:59 +0200374syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
375syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
dkearns35e6f4c2024-03-22 06:41:10 +1100376
377syn match vimFuncBang contained "!"
378syn match vimFuncSID contained "\c<sid>"
Doug Kearns1aa287e2025-02-10 22:00:27 +0100379syn match vimFuncScope contained "\<[sg]:"
dkearns35e6f4c2024-03-22 06:41:10 +1100380syn keyword vimFuncKey contained fu[nction]
381syn keyword vimDefKey contained def
382
Doug Kearns9b67a2e2024-12-26 10:13:45 +0100383syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
384syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals,vimOperParen
dkearns35e6f4c2024-03-22 06:41:10 +1100385syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
386syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
387
Doug Kearns35699f12024-09-19 19:51:59 +0200388syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
389syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100390
Doug Kearns35699f12024-09-19 19:51:59 +0200391syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
392syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100393
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200394syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
395syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
h-east9b53c052024-02-13 21:09:22 +0100396
397if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
Doug Kearns818c6412024-10-06 17:00:48 +0200398 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
399 syn region vimDefFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
h-east9b53c052024-02-13 21:09:22 +0100400endif
dkearns35e6f4c2024-03-22 06:41:10 +1100401
h-east9b53c052024-02-13 21:09:22 +0100402syn match vimFuncBlank contained "\s\+"
403
dkearns35e6f4c2024-03-22 06:41:10 +1100404" Types: {{{2
405" =====
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200406
Doug Kearns35699f12024-09-19 19:51:59 +0200407syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError contains=vimTypeSep transparent
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200408syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
dkearns35e6f4c2024-03-22 06:41:10 +1100409
410syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
411syn keyword vimType contained any blob bool channel float job number string void
412syn match vimType contained "\<func\>"
413syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
414syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
415syn match vimUserType contained "\<\u\w*\>"
416
417syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100418
Doug Kearns818c6412024-10-06 17:00:48 +0200419" Classes, Enums And Interfaces: {{{2
420" =============================
421
422if s:vim9script
423 " Methods {{{3
Doug Kearns1aa287e2025-02-10 22:00:27 +0100424 syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName
Doug Kearns818c6412024-10-06 17:00:48 +0200425 syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
426 syn region vim9MethodDefParams contained
427 \ matchgroup=Delimiter start="(" end=")"
428 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
429 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
Doug Kearns1aa287e2025-02-10 22:00:27 +0100430
431 syn match vim9ConstructorDefName contained "\<new\w*\>"
432 \ nextgroup=vim9ConstructorDefParams
433 \ contains=@vim9MethodName
434 syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
435 \ skipwhite nextgroup=vimParamType,vimFuncParamEquals
436 \ contains=vim9This,vimOper
437 syn region vim9ConstructorDefParams contained
438 \ matchgroup=Delimiter start="(" end=")"
439 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vimCommentError
440 \ contains=vim9ConstructorDefParam,vim9Comment,vimFuncParamEquals
441
Doug Kearns818c6412024-10-06 17:00:48 +0200442 syn region vim9MethodDefReturnType contained
443 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
444 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
445 \ contains=vimTypeSep
446 \ transparent
447 syn region vim9MethodDefBody contained
448 \ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
449 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
450 \ contains=@vim9MethodDefBodyList
451
452 syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
453
454 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
455 syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
456 endif
Doug Kearns1aa287e2025-02-10 22:00:27 +0100457 syn match vim9MethodName contained "\<new\w*\>"
Doug Kearns818c6412024-10-06 17:00:48 +0200458 syn keyword vim9MethodName contained empty len string
459
460 syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
461
462 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
463 syn region vim9MethodDefFold contained start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
464 syn region vim9MethodDefFold contained start="^\s*:\=def\s\+new\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
465 endif
466
467 syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
468
469 " Classes {{{3
470 syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
471
472 syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
473 syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
474 syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
475 syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
476 syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
477 syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
478 syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
479 syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
480 syn keyword vim9Public contained public
481 syn keyword vim9Static contained static
Doug Kearns1aa287e2025-02-10 22:00:27 +0100482 " FIXME: don't match as dictionary keys, remove when operators are not
483 " shared between Vim9 and legacy script
484 syn match vim9This contained "\.\@1<!\<this\>:\@!"
485 " super must be folowed by '.'
486 syn match vim9Super contained "\.\@1<!\<super\.\@="
Doug Kearns818c6412024-10-06 17:00:48 +0200487
488 VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
489
490 " Enums {{{3
491 syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,vim9Implements,@vim9MethodDef,vim9Const,vim9Final,vim9Var
492
493 syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
494 syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
495
496 VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
497
498 " Interfaces {{{3
499 " TODO: limit to decl only - no init values
500 syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
501
502 syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
503 syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
504
505 syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
506 syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams contains=@vim9MethodName
507 syn region vim9AbstractDefParams contained
508 \ matchgroup=Delimiter start="(" end=")"
509 \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
510 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
511 syn region vim9AbstractDefReturnType contained
512 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
513 \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
514 \ contains=vimTypeSep
515 \ transparent
516
517 VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
518
Doug Kearns1aa287e2025-02-10 22:00:27 +0100519 " Type Aliases {{{3
Doug Kearns818c6412024-10-06 17:00:48 +0200520 syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
521 syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
522 syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
523 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
Doug Kearns1aa287e2025-02-10 22:00:27 +0100524 syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals
Doug Kearns818c6412024-10-06 17:00:48 +0200525 endif
526endif
527
Doug Kearns1aa287e2025-02-10 22:00:27 +0100528" Blocks: {{{2
529" ======
530Vim9 syn region vim9Block matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
531
dkearns04e53632024-04-11 06:18:37 +1000532" Keymaps: {{{2
h-east9b53c052024-02-13 21:09:22 +0100533" =======
534
dkearns04e53632024-04-11 06:18:37 +1000535syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100536syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
537syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
538syn match vimKeymapTailComment "\S.*" contained
dkearns04e53632024-04-11 06:18:37 +1000539
540" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
541if s:vim9script
542 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
543else
544 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
545endif
546syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100547
Doug Kearns7866d542024-08-23 18:37:55 +0200548syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
h-east9b53c052024-02-13 21:09:22 +0100549
550" Special Filenames, Modifiers, Extension Removal: {{{2
551" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100552syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
553syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
554syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
555syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
556syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
557syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100558syn match vimSpecFileMod "\(:[phtre]\)\+" contained
559
560" User-Specified Commands: {{{2
561" =======================
dkearns04e53632024-04-11 06:18:37 +1000562syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
Doug Kearns3c07eb02024-09-02 10:03:37 +0200563syn keyword vimUserCmdKey contained com[mand]
564syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
565syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
566syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
567syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
568syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
569syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
570syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
571syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
572syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
573syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
574syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
575syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
576syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
577syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
578syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
579
580syn match vimUserCmdAttrNargs contained "[01*?+]"
581syn match vimUserCmdAttrRange contained "%"
582
h-east9b53c052024-02-13 21:09:22 +0100583if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
584 syn match vimUserCmdError contained "\S\+\>"
585endif
h-east9b53c052024-02-13 21:09:22 +0100586
Doug Kearns3c07eb02024-09-02 10:03:37 +0200587syn case ignore
588syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
589" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
590syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
591syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
592" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
593syn match vimUserCmdAttrAddr contained "?"
h-east9b53c052024-02-13 21:09:22 +0100594syn case match
h-east9b53c052024-02-13 21:09:22 +0100595
Doug Kearns1aa287e2025-02-10 22:00:27 +0100596syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
dkearns04e53632024-04-11 06:18:37 +1000597
Doug Kearns3c07eb02024-09-02 10:03:37 +0200598syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
599syn match vimDelcommandAttr contained "-buffer\>"
600
h-east9b53c052024-02-13 21:09:22 +0100601" Lower Priority Comments: after some vim commands... {{{2
602" =======================
dkearns959c3c82024-06-12 04:18:08 +1000603if get(g:, "vimsyn_comment_strings", 1)
Doug Kearns35699f12024-09-19 19:51:59 +0200604 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
dkearns959c3c82024-06-12 04:18:08 +1000605endif
dkearns04e53632024-04-11 06:18:37 +1000606
607if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000608 syn cluster vimComment contains=vim9Comment
609else
dkearns04e53632024-04-11 06:18:37 +1000610 syn cluster vimComment contains=vimComment
611endif
h-east9b53c052024-02-13 21:09:22 +0100612
Doug Kearns35699f12024-09-19 19:51:59 +0200613VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
614VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
615VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200616" Vim9 comments - TODO: might be highlighted while they don't work
Doug Kearns35699f12024-09-19 19:51:59 +0200617Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
618Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
619Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200620" Vim9 comment inside expression
Doug Kearns35699f12024-09-19 19:51:59 +0200621Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
622Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
623Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200624
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200625syn match vim9CommentError contained "#.*"
626syn match vimCommentError contained +".*+
627
h-east9b53c052024-02-13 21:09:22 +0100628" Environment Variables: {{{2
629" =====================
630syn match vimEnvvar "\$\I\i*"
631syn match vimEnvvar "\${\I\i*}"
632
633" In-String Specials: {{{2
634" Try to catch strings, if nothing else matches (therefore it must precede the others!)
635" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
636syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
637syn match vimPatSepErr contained "\\)"
638syn match vimPatSep contained "\\|"
639syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
640syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
641syn match vimNotPatSep contained "\\\\"
642syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
Doug Kearns1aa287e2025-02-10 22:00:27 +0100643syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend
644syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend
h-east9b53c052024-02-13 21:09:22 +0100645"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
646syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
647syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
Doug Kearns695522d2025-01-10 20:02:17 +0100648
h-east9b53c052024-02-13 21:09:22 +0100649syn match vimEscape contained "\\."
650" syn match vimEscape contained +\\[befnrt\"]+
651syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
652syn match vimEscape contained "\\<" contains=vimNotation
653syn match vimEscape contained "\\<\*[^>]*>\=>"
Doug Kearns695522d2025-01-10 20:02:17 +0100654syn match vimQuoteEscape contained "''"
h-east9b53c052024-02-13 21:09:22 +0100655
Doug Kearns1aa287e2025-02-10 22:00:27 +0100656syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape,@vimStringInterpolation extend
657syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringGroup,@vimStringInterpolation extend
dkearnsb1427b42024-02-28 05:59:30 +1100658syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
659syn match vimStringInterpolationBrace contained "{{"
660syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200661syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100662
663" Substitutions: {{{2
664" =============
665syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
666syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
667syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200668syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
669syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
670syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
671syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100672" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
673" : # is allowed but "not recommended" (see :h pattern-delimiter)
674syn 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
675syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
676syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
677syn match vimCollClassErr contained "\[:.\{-\}:\]"
678syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
679syn match vimSubstSubstr contained "\\z\=\d"
680syn match vimSubstTwoBS contained "\\\\"
681syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
682syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100683
Doug Kearns92f4e912024-06-05 19:45:43 +0200684" Vi compatibility
685syn match vimSubstDelim contained "\\"
686syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
687
h-east9b53c052024-02-13 21:09:22 +0100688" 'String': {{{2
689syn match vimString "[^(,]'[^']\{-}\zs'"
690
691" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100692syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
Doug Kearnsd8176092024-08-31 16:57:32 +0200693syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
694syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
dkearns2c51e152024-02-27 07:10:18 +1100695syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
696syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
697syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100698syn match vimPlainMark contained "'[a-zA-Z0-9]"
699syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
700
701syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
702syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
703syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
704syn match vimRegister '@"'
705syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
Doug Kearnsa9c06422025-02-12 20:44:17 +0100706syn match vimLetRegister contained '@["0-9\-a-zA-Z:.%#=*+~_/]'
h-east9b53c052024-02-13 21:09:22 +0100707
708syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
709syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
710
711syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
712syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
713syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
714
715" Complex Repeats: (:h complex-repeat) {{{2
716" ===============
717syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
718syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
719
720" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200721syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
722syn region vimSetRegion 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
723syn 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
724syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
725syn keyword vimSetAll contained all nextgroup=vimSetMod
726syn keyword vimSetTermcap contained termcap
727syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100728syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200729syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100730
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200731" Variable Declarations: {{{2
732" =====================
Doug Kearns1aa287e2025-02-10 22:00:27 +0100733VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
734VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList
735syn region vimVarList contained
736 \ start="\[" end="]"
737 \ contains=@vimContinue,@vimSpecialVar,vimVar
h-east9b53c052024-02-13 21:09:22 +0100738
Doug Kearns1aa287e2025-02-10 22:00:27 +0100739VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
740syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars
741syn region vimUnletVars contained
742 \ start="$\I\|\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
743 \ nextgroup=vimCmdSep,vimComment
744 \ contains=@vimContinue,vimEnvvar,vimVar
h-east9b53c052024-02-13 21:09:22 +0100745
Doug Kearns7884cc72024-08-23 18:01:35 +0200746VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1\=\z2$' extend
Ken Takata95e90782024-08-22 21:29:39 +0200747VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200748VimFoldh 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
Ken Takata95e90782024-08-22 21:29:39 +0200749VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' contains=@vimStringInterpolation extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200750
751Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
752Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
753Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
754
Doug Kearns818c6412024-10-06 17:00:48 +0200755syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
Doug Kearns1aa287e2025-02-10 22:00:27 +0100756syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable
757
758" Lockvar and Unlockvar: {{{2
759" =====================
760syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
761syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
762syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars
763syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars
764syn region vimLockvarVars contained
765 \ start="\h" skip=+\n\s*\\\|\n\s*"\\ \|^\s*"\\ + end="$" end="\ze[|"]"
766 \ nextgroup=vimCmdSep,vimComment
767 \ contains=@vimContinue,vimVar
768
769hi def link vimLockvar vimCommand
770hi def link vimUnlockvar vimCommand
771hi def link vimLockvarBang vimBang
772hi def link vimLockvarDepth vimNumber
h-east9b53c052024-02-13 21:09:22 +0100773
774" For: {{{2
775" ===
Doug Kearns1aa287e2025-02-10 22:00:27 +0100776" handles Vim9 and legacy for now
777syn region vimFor
778 \ matchgroup=vimCommand
779 \ start="\<for\>" end="\<in\>"
780 \ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList
781 \ contains=@vimContinue,vimVar,vimVarList,vim9VariableList
782 \ transparent
783
784syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList
785
786syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
787syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList
788syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment
dkearns76d62982024-03-23 05:55:25 +1100789
h-east9b53c052024-02-13 21:09:22 +0100790" Abbreviations: {{{2
791" =============
792" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100793" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100794
795" Autocmd: {{{2
796" =======
Doug Kearns1718e7d2025-01-08 18:20:47 +0100797syn match vimAutoCmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoEventList
798syn match vimAutoEventList contained "\%(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
h-east9b53c052024-02-13 21:09:22 +0100799syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000800syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
Doug Kearns1718e7d2025-01-08 18:20:47 +0100801syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
802syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000803syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
Doug Kearns1aa287e2025-02-10 22:00:27 +0100804syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100805
806" Echo And Execute: -- prefer strings! {{{2
807" ================
dkearns61887b32024-03-15 23:45:48 +1100808" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100809
dkearns61887b32024-03-15 23:45:48 +1100810syn region vimEcho
811 \ matchgroup=vimCommand
812 \ start="\<ec\%[ho]\>"
813 \ start="\<echoe\%[rr]\>"
814 \ start="\<echom\%[sg]\>"
815 \ start="\<echoc\%[onsole]\>"
816 \ start="\<echon\>"
817 \ start="\<echow\%[indow]\>"
818 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
819 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
820
821syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100822syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100823syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100824syn case match
825
dkearns35e6f4c2024-03-22 06:41:10 +1100826syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100827
828syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
dkearnsb1427b42024-02-28 05:59:30 +1100829
h-east9b53c052024-02-13 21:09:22 +0100830" Maps: {{{2
831" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200832" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
833syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
834syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100835" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200836syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
837" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
838syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
839
dkearns5d67aef2024-03-10 04:01:22 +1100840syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
841syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
842syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100843syn match vimMapMod contained "\%#=1\c<\(buffer\|expr\|\(local\)\=leader\|nowait\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
dkearns5d67aef2024-03-10 04:01:22 +1100844syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
845" assume a continuation comment introduces the RHS
846syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100847syn case ignore
848syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
849syn case match
850
851" Menus: {{{2
852" =====
dkearns62b26042024-03-10 03:43:28 +1100853" NOTE: tail comments disallowed
854" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
855syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
856syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
857syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100858syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
859syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100860syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
861syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
862syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
863syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
864syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
865
866syn region vimMenutranslate
867 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
868 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
869 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
870 \ contains=@vimContinue,vimMenutranslateName keepend transparent
871" oneline is sufficient to match the current formatting in runtime/lang/*.vim
872syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
873syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100874
875" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
876" ======================
877syn case ignore
878syn match vimNotation "\%#=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
879
880syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
881syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
882syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
883syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
884syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
885syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
886syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
887
888syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
889syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
890syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
891syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
892syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
893syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
894
895syn match vimBracket contained "[\\<>]"
896syn case match
897
898" User Function Highlighting: {{{2
899" (following Gautam Iyer's suggestion)
900" ==========================
Doug Kearns1aa287e2025-02-10 22:00:27 +0100901syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
902syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vim9MethodName,vim9Super,vim9This
dkearns9530fe42024-03-19 05:19:51 +1100903syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100904
Doug Kearns99984fc2024-07-18 20:45:19 +0200905syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
906
h-east9b53c052024-02-13 21:09:22 +0100907" User Command Highlighting: {{{2
908syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
909
910" Errors And Warnings: {{{2
911" ====================
912if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Doug Kearns818c6412024-10-06 17:00:48 +0200913 syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100914 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
915 syn match vimElseIfErr "\<else\s\+if\>"
916 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
917endif
918
Doug Kearns4d427d42024-09-15 19:21:18 +0200919syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100920
Doug Kearnse85fdc72024-07-07 20:45:37 +0200921" Match: {{{2
922" =====
923syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
924syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
925syn case ignore
926syn keyword vimMatchNone contained none
927syn case match
928syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
929
Doug Kearnsbbe52522024-11-09 19:11:25 +0100930" Normal: {{{2
931" ======
932syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
933syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100934
Doug Kearns262e25e2024-06-14 20:16:35 +0200935" Sleep: {{{2
936" =====
937syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
938syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
939syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
940
h-east9b53c052024-02-13 21:09:22 +0100941" Syntax: {{{2
942"=======
943syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
944syn 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
945syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
946
947if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
948 syn match vimSynError contained "\i\+"
949 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
950endif
951syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
952syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
953syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
954if has("conceal")
955 " no whitespace allowed after '='
956 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
957 syn match vimSynCcharValue contained "\S"
958endif
959
dkearns04e53632024-04-11 06:18:37 +1000960syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100961syn cluster vimFuncBodyList add=vimSyntax
962
963" Syntax: case {{{2
964syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
965if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
966 syn match vimSynCaseError contained "\i\+"
967endif
968syn keyword vimSynCase contained ignore match
969
970" Syntax: clear {{{2
971syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
972
973" Syntax: cluster {{{2
974syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
975syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
976syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
977syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100978
979" Syntax: foldlevel {{{2
980syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
981if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
982 syn match vimSynFoldMethodError contained "\i\+"
983endif
984syn keyword vimSynFoldMethod contained start minimum
985
986" Syntax: iskeyword {{{2
987syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
988syn match vimIskList contained '\S\+' contains=vimIskSep
989syn match vimIskSep contained ','
990
991" Syntax: include {{{2
992syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100993
994" Syntax: keyword {{{2
995syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
996syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
997syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
998syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100999
1000" Syntax: match {{{2
1001syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
1002syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
1003syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
1004syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +01001005
1006" Syntax: off and on {{{2
1007syn keyword vimSynType contained enable list manual off on reset
1008
1009" Syntax: region {{{2
1010syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
1011syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
1012syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
1013syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
1014syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
1015syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
1016syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
1017syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
1018syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
1019syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
1020syn match vimSynPatMod contained "lc=\d\+"
1021syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
1022syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
1023syn match vimSynNotPatRange contained "\\\\\|\\\["
1024syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +01001025
1026" Syntax: sync {{{2
1027" ============
1028syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
1029if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
1030 syn match vimSyncError contained "\i\+"
1031endif
1032syn keyword vimSyncC contained ccomment clear fromstart
1033syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
1034syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
1035syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
1036syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
1037syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
1038syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
1039syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
1040syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
1041syn keyword vimSyncNone contained NONE
1042
1043" Additional IsCommand: here by reasons of precedence {{{2
1044" ====================
1045syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
1046
1047" Highlighting: {{{2
1048" ============
dkearns04e53632024-04-11 06:18:37 +10001049syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +01001050if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
1051 syn match vimHiCtermError contained "\D\i*"
1052endif
1053syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +11001054syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +01001055
1056syn match vimHiGroup contained "\i\+"
1057syn case ignore
1058syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
1059syn keyword vimFgBgAttrib contained none bg background fg foreground
1060syn case match
1061syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
1062syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
1063syn case ignore
1064syn 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
1065syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
1066
1067syn case match
1068syn match vimHiFontname contained "[a-zA-Z\-*]\+"
1069syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
1070syn match vimHiGuiRgb contained "#\x\{6}"
1071
1072" Highlighting: hi group key=arg ... {{{2
1073syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +11001074syn region vimHiKeyList contained start="\i\+" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster
h-east9b53c052024-02-13 21:09:22 +01001075if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
1076 syn match vimHiKeyError contained "\i\+="he=e-1
1077endif
1078syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +11001079syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +01001080syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
1081syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
1082syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
1083syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
1084syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
1085syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
1086syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
1087syn match vimHiTermcap contained "\S\+" contains=vimNotation
1088syn match vimHiNmbr contained '\d\+'
1089
1090" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +11001091syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +01001092
1093" Highlight: link {{{2
1094" see tst24 (hi def vs hi) (Jul 06, 2018)
1095"syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
dkearns9530fe42024-03-19 05:19:51 +11001096" TODO: simplify and allow line continuations --djk
1097syn 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
h-east9b53c052024-02-13 21:09:22 +01001098
1099" Control Characters: {{{2
1100" ==================
1101syn match vimCtrlChar "[- -]"
1102
1103" Beginners - Patterns that involve ^ {{{2
1104" =========
Doug Kearns35699f12024-09-19 19:51:59 +02001105Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
1106VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001107
h-east9b53c052024-02-13 21:09:22 +01001108syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
dkearns04e53632024-04-11 06:18:37 +10001109syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup
dkearns059cbe82024-06-12 03:27:53 +10001110
dkearnsae321b52024-06-15 23:06:17 +10001111" allowed anywhere in the file
1112if !s:vim9script
1113 syn match vimShebangError "^\s*\zs#!.*" display
1114endif
1115syn match vimShebang "\%^#!.*" display
1116
h-east9b53c052024-02-13 21:09:22 +01001117syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +10001118syn match vimContinueComment '^\s*\zs["#]\\ .*'
Doug Kearns818c6412024-10-06 17:00:48 +02001119syn match vim9ContinueComment "^\s*\zs#\\ .*"
1120syn cluster vimContinue contains=vimContinue,vimContinueComment
1121syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
1122
h-east9b53c052024-02-13 21:09:22 +01001123syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
1124syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +10001125syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +01001126
1127" Searches And Globals: {{{2
1128" ====================
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001129VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
h-east9b53c052024-02-13 21:09:22 +01001130syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001131Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim
1132syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep
dkearns2c51e152024-02-27 07:10:18 +11001133syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
1134syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +01001135
dkearns04e53632024-04-11 06:18:37 +10001136" Vim9 Script Regions: {{{2
1137" ==================
1138
1139if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +02001140 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
1141 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +10001142
Doug Kearnsce064932024-04-13 18:24:01 +02001143 syn keyword vim9Vim9ScriptArg noclear contained
1144 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +10001145endif
1146
h-east9b53c052024-02-13 21:09:22 +01001147" Embedded Scripts: {{{2
1148" ================
1149" perl,ruby : Benoit Cerrina
1150" python,tcl : Johannes Zellner
1151" mzscheme, lua : Charles Campbell
1152
1153" Allows users to specify the type of embedded script highlighting
1154" they want: (perl/python/ruby/tcl support)
1155" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +02001156" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
1157" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
1158" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
1159" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
1160" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
1161" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +01001162if !exists("g:vimsyn_embed")
1163 let g:vimsyn_embed= "lmpPr"
1164endif
1165
1166" [-- lua --] {{{3
1167let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
1168if !filereadable(s:luapath)
1169 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
1170 if filereadable(fnameescape(s:luapath))
1171 let s:luapath= fnameescape(s:luapath)
1172 break
1173 endif
1174 endfor
1175endif
1176if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
1177 unlet! b:current_syntax
1178 syn cluster vimFuncBodyList add=vimLuaRegion
1179 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +02001180 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
1181 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
1182 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
1183 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +01001184 syn cluster vimFuncBodyList add=vimLuaRegion
1185else
Ken Takata95e90782024-08-22 21:29:39 +02001186 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1187 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
1188 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1189 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001190endif
1191unlet s:luapath
1192
1193" [-- perl --] {{{3
1194let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
1195if !filereadable(s:perlpath)
1196 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
1197 if filereadable(fnameescape(s:perlpath))
1198 let s:perlpath= fnameescape(s:perlpath)
1199 break
1200 endif
1201 endfor
1202endif
1203if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
1204 unlet! b:current_syntax
1205 syn cluster vimFuncBodyList add=vimPerlRegion
1206 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +02001207 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
1208 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
1209 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
1210 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +01001211 syn cluster vimFuncBodyList add=vimPerlRegion
1212else
Ken Takata95e90782024-08-22 21:29:39 +02001213 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1214 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1215 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1216 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001217endif
1218unlet s:perlpath
1219
1220" [-- ruby --] {{{3
1221let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
1222if !filereadable(s:rubypath)
1223 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
1224 if filereadable(fnameescape(s:rubypath))
1225 let s:rubypath= fnameescape(s:rubypath)
1226 break
1227 endif
1228 endfor
1229endif
1230if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
1231 syn cluster vimFuncBodyList add=vimRubyRegion
1232 unlet! b:current_syntax
1233 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +02001234 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
1235 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
1236 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
1237 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +01001238 syn cluster vimFuncBodyList add=vimRubyRegion
1239else
Ken Takata95e90782024-08-22 21:29:39 +02001240 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1241 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
1242 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1243 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001244endif
1245unlet s:rubypath
1246
1247" [-- python --] {{{3
1248let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1249if !filereadable(s:pythonpath)
1250 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1251 if filereadable(fnameescape(s:pythonpath))
1252 let s:pythonpath= fnameescape(s:pythonpath)
1253 break
1254 endif
1255 endfor
1256endif
1257if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1258 unlet! b:current_syntax
1259 syn cluster vimFuncBodyList add=vimPythonRegion
1260 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001261 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1262 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1263 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1264 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1265 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1266 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001267 syn cluster vimFuncBodyList add=vimPythonRegion
1268else
Ken Takata95e90782024-08-22 21:29:39 +02001269 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1270 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1271 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1272 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001273endif
1274unlet s:pythonpath
1275
1276" [-- tcl --] {{{3
1277if has("win32") || has("win95") || has("win64") || has("win16")
1278 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1279 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1280else
1281 let s:trytcl= 1
1282endif
1283if s:trytcl
1284 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1285 if !filereadable(s:tclpath)
1286 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1287 if filereadable(fnameescape(s:tclpath))
1288 let s:tclpath= fnameescape(s:tclpath)
1289 break
1290 endif
1291 endfor
1292 endif
1293 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1294 unlet! b:current_syntax
1295 syn cluster vimFuncBodyList add=vimTclRegion
1296 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001297 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1298 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1299 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1300 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001301 syn cluster vimFuncBodyList add=vimTclScript
1302 else
Ken Takata95e90782024-08-22 21:29:39 +02001303 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1304 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1305 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1306 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001307 endif
1308 unlet s:tclpath
1309else
Ken Takata95e90782024-08-22 21:29:39 +02001310 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1311 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1312 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1313 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001314endif
1315unlet s:trytcl
1316
1317" [-- mzscheme --] {{{3
1318let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1319if !filereadable(s:mzschemepath)
1320 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1321 if filereadable(fnameescape(s:mzschemepath))
1322 let s:mzschemepath= fnameescape(s:mzschemepath)
1323 break
1324 endif
1325 endfor
1326endif
1327if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1328 unlet! b:current_syntax
1329 let s:iskKeep= &isk
1330 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1331 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1332 let &isk= s:iskKeep
1333 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001334 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1335 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1336 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1337 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001338 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1339else
Ken Takata95e90782024-08-22 21:29:39 +02001340 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1341 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1342 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1343 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001344endif
1345unlet s:mzschemepath
1346
1347" Synchronize (speed) {{{2
1348"============
1349if exists("g:vimsyn_minlines")
1350 exe "syn sync minlines=".g:vimsyn_minlines
1351endif
1352exe "syn sync maxlines=".s:vimsyn_maxlines
1353syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001354syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001355syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1356
1357" ====================
1358" Highlighting Settings {{{2
1359" ====================
1360
1361if !exists("skip_vim_syntax_inits")
1362 if !exists("g:vimsyn_noerror")
1363 hi def link vimBehaveError vimError
1364 hi def link vimCollClassErr vimError
1365 hi def link vimErrSetting vimError
1366 hi def link vimEmbedError vimError
1367 hi def link vimFTError vimError
1368 hi def link vimFunctionError vimError
1369 hi def link vimFunc vimError
1370 hi def link vimHiAttribList vimError
1371 hi def link vimHiCtermError vimError
1372 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001373 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001374 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001375 hi def link vimSubstFlagErr vimError
1376 hi def link vimSynCaseError vimError
1377 hi def link vimSynFoldMethodError vimError
1378 hi def link vimBufnrWarn vimWarn
Doug Kearns818c6412024-10-06 17:00:48 +02001379
1380 hi def link vim9TypeAliasError vimError
h-east9b53c052024-02-13 21:09:22 +01001381 endif
1382
1383 hi def link vimAbb vimCommand
1384 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001385 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001386 hi def link vimAugroupError vimError
1387 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001388 hi def link vimAutoCmd vimCommand
Doug Kearns1718e7d2025-01-08 18:20:47 +01001389 hi def link vimAutoCmdBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001390 hi def link vimAutoEvent Type
1391 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001392 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001393 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001394 hi def link vimBehaveModel vimBehave
1395 hi def link vimBehave vimCommand
1396 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001397 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001398 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001399 hi def link vimCmplxRepeat SpecialChar
1400 hi def link vimCommand Statement
1401 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001402 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001403 hi def link vimCommentString vimString
1404 hi def link vimCommentTitle PreProc
1405 hi def link vimCondHL vimCommand
1406 hi def link vimConst vimCommand
1407 hi def link vimContinue Special
1408 hi def link vimContinueComment vimComment
Doug Kearns4a530a62025-02-03 18:59:09 +01001409 hi def link vimCount Number
h-east9b53c052024-02-13 21:09:22 +01001410 hi def link vimCtrlChar SpecialChar
Doug Kearns4a530a62025-02-03 18:59:09 +01001411 hi def link vimDebuggreedy vimCommand
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001412 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001413 hi def link vimDefKey vimCommand
Doug Kearns1aa287e2025-02-10 22:00:27 +01001414 hi def link vimDefParam vimVar
Doug Kearns3c07eb02024-09-02 10:03:37 +02001415 hi def link vimDelcommand vimCommand
1416 hi def link vimDelcommandAttr vimUserCmdAttr
dkearnsb1427b42024-02-28 05:59:30 +11001417 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001418 hi def link vimEchohlNone vimGroup
1419 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001420 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001421 hi def link vimEndfunction vimCommand
1422 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001423 hi def link vimEnvvar PreProc
1424 hi def link vimError Error
1425 hi def link vimEscape Special
1426 hi def link vimFBVar vimVar
1427 hi def link vimFgBgAttrib vimHiAttrib
1428 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001429 hi def link vimFor vimCommand
Doug Kearns1aa287e2025-02-10 22:00:27 +01001430 hi def link vimForInContinue vimContinue
1431 hi def link vimForInContinueComment vimContinueComment
h-east9b53c052024-02-13 21:09:22 +01001432 hi def link vimFTCmd vimCommand
1433 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001434 hi def link vimFuncBang vimBang
1435 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001436 hi def link vimFuncKey vimCommand
1437 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001438 hi def link vimFuncMod Special
1439 hi def link vimFuncParam vimVar
1440 hi def link vimFuncParamEquals vimOper
Doug Kearns1aa287e2025-02-10 22:00:27 +01001441 hi def link vimFuncScope vimVar
1442 hi def link vimFuncSID vimNotation
h-east9b53c052024-02-13 21:09:22 +01001443 hi def link vimGroupAdd vimSynOption
1444 hi def link vimGroupName vimGroup
1445 hi def link vimGroupRem vimSynOption
1446 hi def link vimGroupSpecial Special
1447 hi def link vimGroup Type
1448 hi def link vimHiAttrib PreProc
1449 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001450 hi def link vimHiClear Type
1451 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001452 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001453 hi def link vimHiCtermfont vimHiTerm
1454 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001455 hi def link vimHiCTerm vimHiTerm
1456 hi def link vimHighlight vimCommand
1457 hi def link vimHiGroup vimGroupName
1458 hi def link vimHiGuiFgBg vimHiTerm
1459 hi def link vimHiGuiFont vimHiTerm
1460 hi def link vimHiGuiRgb vimNumber
1461 hi def link vimHiGui vimHiTerm
1462 hi def link vimHiNmbr Number
1463 hi def link vimHiStartStop vimHiTerm
1464 hi def link vimHiTerm Type
1465 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001466 hi def link vimInsert vimString
1467 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001468 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001469 hi def link vimKeymapLineComment vimComment
1470 hi def link vimKeymapTailComment vimComment
Doug Kearns1aa287e2025-02-10 22:00:27 +01001471 hi def link vimLambdaOperator vimOper
h-east9b53c052024-02-13 21:09:22 +01001472 hi def link vimLet vimCommand
1473 hi def link vimLetHereDoc vimString
1474 hi def link vimLetHereDocStart Special
1475 hi def link vimLetHereDocStop Special
1476 hi def link vimLetRegister Special
1477 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001478 hi def link vimMapBang vimBang
1479 hi def link vimMapModKey vimFuncSID
1480 hi def link vimMapMod vimBracket
1481 hi def link vimMap vimCommand
1482 hi def link vimMark Number
1483 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001484 hi def link vimMatch vimCommand
1485 hi def link vimMatchGroup vimGroup
1486 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001487 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001488 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001489 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001490 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001491 hi def link vimMenu vimCommand
1492 hi def link vimMenuNotation vimNotation
1493 hi def link vimMenuPriority Number
1494 hi def link vimMenuStatus Special
1495 hi def link vimMenutranslateComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001496 hi def link vim9MethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001497 hi def link vimMtchComment vimComment
Doug Kearnsbbe52522024-11-09 19:11:25 +01001498 hi def link vimNormal vimCommand
h-east9b53c052024-02-13 21:09:22 +01001499 hi def link vimNotation Special
1500 hi def link vimNotFunc vimCommand
1501 hi def link vimNotPatSep vimString
1502 hi def link vimNumber Number
1503 hi def link vimOperError Error
1504 hi def link vimOper Operator
Doug Kearns1aa287e2025-02-10 22:00:27 +01001505 hi def link vimOperContinue vimContinue
1506 hi def link vimOperContinueComment vimContinueComment
h-east9b53c052024-02-13 21:09:22 +01001507 hi def link vimOption PreProc
Doug Kearns1aa287e2025-02-10 22:00:27 +01001508 hi def link vimOptionVar Identifier
1509 hi def link vimVimVar Identifier
h-east9b53c052024-02-13 21:09:22 +01001510 hi def link vimParenSep Delimiter
1511 hi def link vimPatSepErr vimError
1512 hi def link vimPatSepR vimPatSep
1513 hi def link vimPatSep SpecialChar
1514 hi def link vimPatSepZone vimString
1515 hi def link vimPatSepZ vimPatSep
1516 hi def link vimPattern Type
1517 hi def link vimPlainMark vimMark
1518 hi def link vimPlainRegister vimRegister
Doug Kearns695522d2025-01-10 20:02:17 +01001519 hi def link vimQuoteEscape vimEscape
h-east9b53c052024-02-13 21:09:22 +01001520 hi def link vimRegister SpecialChar
1521 hi def link vimScriptDelim Comment
h-east9b53c052024-02-13 21:09:22 +01001522 hi def link vimSearch vimString
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001523 hi def link vimSearchDelim Delimiter
h-east9b53c052024-02-13 21:09:22 +01001524 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001525 hi def link vimSet vimCommand
1526 hi def link vimSetAll vimOption
1527 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001528 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001529 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001530 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001531 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001532 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001533 hi def link vimSleep vimCommand
1534 hi def link vimSleepArg Constant
1535 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001536 hi def link vimSpecFile Identifier
1537 hi def link vimSpecFileMod vimSpecFile
1538 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001539 hi def link vimStringCont vimString
1540 hi def link vimString String
1541 hi def link vimStringEnd vimString
1542 hi def link vimStringInterpolationBrace vimEscape
1543 hi def link vimSubst1 vimSubst
1544 hi def link vimSubstDelim Delimiter
1545 hi def link vimSubstFlags Special
1546 hi def link vimSubstSubstr SpecialChar
1547 hi def link vimSubstTwoBS vimString
1548 hi def link vimSubst vimCommand
1549 hi def link vimSynCaseError Error
1550 hi def link vimSynCase Type
1551 hi def link vimSyncC Type
1552 hi def link vimSyncError Error
1553 hi def link vimSyncGroupName vimGroupName
1554 hi def link vimSyncGroup vimGroupName
1555 hi def link vimSyncKey Type
1556 hi def link vimSyncNone Type
1557 hi def link vimSynContains vimSynOption
1558 hi def link vimSynError Error
1559 hi def link vimSynFoldMethodError Error
1560 hi def link vimSynFoldMethod Type
1561 hi def link vimSynKeyContainedin vimSynContains
1562 hi def link vimSynKeyOpt vimSynOption
1563 hi def link vimSynCchar vimSynOption
1564 hi def link vimSynCcharValue Character
1565 hi def link vimSynMtchGrp vimSynOption
1566 hi def link vimSynMtchOpt vimSynOption
1567 hi def link vimSynNextgroup vimSynOption
1568 hi def link vimSynNotPatRange vimSynRegPat
1569 hi def link vimSynOption Special
1570 hi def link vimSynPatRange vimString
1571 hi def link vimSynRegOpt vimSynOption
1572 hi def link vimSynRegPat vimString
1573 hi def link vimSynReg Type
1574 hi def link vimSyntax vimCommand
1575 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001576 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001577 hi def link vimTodo Todo
1578 hi def link vimType Type
1579 hi def link vimUnlet vimCommand
1580 hi def link vimUnletBang vimBang
1581 hi def link vimUnmap vimMap
Doug Kearns3c07eb02024-09-02 10:03:37 +02001582 hi def link vimUserCmdAttrAddr vimSpecial
1583 hi def link vimUserCmdAttrCmplt vimSpecial
1584 hi def link vimUserCmdAttrNargs vimSpecial
1585 hi def link vimUserCmdAttrRange vimSpecial
1586 hi def link vimUserCmdAttrKey vimUserCmdAttr
1587 hi def link vimUserCmdAttr Special
1588 hi def link vimUserCmdAttrError Error
h-east9b53c052024-02-13 21:09:22 +01001589 hi def link vimUserCmdError Error
Doug Kearns3c07eb02024-09-02 10:03:37 +02001590 hi def link vimUserCmdKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001591 hi def link vimUserFunc Normal
Doug Kearns1aa287e2025-02-10 22:00:27 +01001592 hi def link vimVar Normal
h-east9b53c052024-02-13 21:09:22 +01001593 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001594
Doug Kearns818c6412024-10-06 17:00:48 +02001595 hi def link vim9Abstract vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001596 hi def link vim9Boolean Boolean
Doug Kearns818c6412024-10-06 17:00:48 +02001597 hi def link vim9Class vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001598 hi def link vim9Comment Comment
1599 hi def link vim9CommentError vimError
1600 hi def link vim9CommentTitle PreProc
Doug Kearns1aa287e2025-02-10 22:00:27 +01001601 hi def link vim9ConstructorDefParam vimVar
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001602 hi def link vim9Const vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001603 hi def link vim9ContinueComment vimContinueComment
1604 hi def link vim9Enum vimCommand
1605 hi def link vim9Export vimCommand
1606 hi def link vim9Extends Keyword
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001607 hi def link vim9Final vimCommand
1608 hi def link vim9For vimCommand
Doug Kearns1aa287e2025-02-10 22:00:27 +01001609 hi def link vim9ForInComment vim9Comment
Doug Kearns818c6412024-10-06 17:00:48 +02001610 hi def link vim9Implements Keyword
1611 hi def link vim9AbstractDef vimCommand
1612 hi def link vim9Interface vimCommand
Doug Kearns1aa287e2025-02-10 22:00:27 +01001613 hi def link vim9LambdaOperator vimOper
1614 hi def link vim9LambdaOperatorComment vim9Comment
1615 hi def link vim9LambdaParamsParen vimParenSep
1616 hi def link vim9LhsRegister vimLetRegister
1617 hi def link vim9LhsVariable vimVar
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001618 hi def link vim9LineComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001619 hi def link vim9MethodDef vimCommand
1620 hi def link vim9MethodNameError vimFunctionError
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001621 hi def link vim9Null Constant
Doug Kearns818c6412024-10-06 17:00:48 +02001622 hi def link vim9Public vimCommand
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001623 hi def link vim9Search vimString
1624 hi def link vim9SearchDelim Delimiter
Doug Kearns818c6412024-10-06 17:00:48 +02001625 hi def link vim9Static vimCommand
1626 hi def link vim9Super Identifier
1627 hi def link vim9This Identifier
1628 hi def link vim9Type vimCommand
1629 hi def link vim9TypeEquals vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001630 hi def link vim9Variable vimVar
Doug Kearns818c6412024-10-06 17:00:48 +02001631 hi def link vim9Var vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001632 hi def link vim9Vim9ScriptArg Special
Doug Kearns818c6412024-10-06 17:00:48 +02001633 hi def link vim9Vim9Script vimCommand
h-east9b53c052024-02-13 21:09:22 +01001634endif
1635
1636" Current Syntax Variable: {{{2
1637let b:current_syntax = "vim"
1638
1639" ---------------------------------------------------------------------
1640" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001641delc Vim9
1642delc VimL
h-east9b53c052024-02-13 21:09:22 +01001643delc VimFolda
Doug Kearns818c6412024-10-06 17:00:48 +02001644delc VimFoldc
1645delc VimFolde
h-east9b53c052024-02-13 21:09:22 +01001646delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001647delc VimFoldh
1648delc VimFoldH
Doug Kearns818c6412024-10-06 17:00:48 +02001649delc VimFoldi
h-east9b53c052024-02-13 21:09:22 +01001650delc VimFoldl
1651delc VimFoldm
1652delc VimFoldp
1653delc VimFoldP
1654delc VimFoldr
1655delc VimFoldt
1656let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001657unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001658" vim:ts=18 fdm=marker ft=vim