blob: c30034c147cbc5be4c95a4d9d3bbc552aa712493 [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 Kearns4a530a62025-02-03 18:59:09 +01005" Last Change: 2025 Feb 03
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 Kearns8dec6c22025-01-19 14:02:06 +0100195syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
196syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
197syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
198syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
199syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
200syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
201syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
dkearns5cd86c62024-03-12 07:40:58 +1100202syn case match
h-east9b53c052024-02-13 21:09:22 +0100203
204" All vimCommands are contained by vimIsCommand. {{{2
Doug Kearns4a530a62025-02-03 18:59:09 +0100205syn 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,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
h-east61397662025-01-03 17:32:54 +0100206syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
dkearnsc4aef9a2024-03-04 02:42:47 +1100207syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
Doug Kearns4a530a62025-02-03 18:59:09 +0100208syn match vimCount contained "\d\+"
Doug Kearns1718e7d2025-01-08 18:20:47 +0100209syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
Doug Kearns3c07eb02024-09-02 10:03:37 +0200210syn match vimBang contained "!"
h-east9b53c052024-02-13 21:09:22 +0100211syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
212syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
213syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
214syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
215syn match vimVar "\s\zs&t_k;"
216syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
217syn keyword vimCommand contained in
218
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200219syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
220syn cluster vim9ExprList contains=vim9Boolean,vim9Null
dkearnsb1427b42024-02-28 05:59:30 +1100221
h-east9b53c052024-02-13 21:09:22 +0100222" Insertions And Appends: insert append {{{2
223" (buftype != nofile test avoids having append, change, insert show up in the command window)
224" =======================
225if &buftype != 'nofile'
dkearns4ba70ca2024-04-15 04:32:56 +1000226 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend
227 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend
228 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend
h-east9b53c052024-02-13 21:09:22 +0100229endif
230
231" Behave! {{{2
232" =======
h-east9b53c052024-02-13 21:09:22 +0100233if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
234 syn match vimBehaveError contained "[^ ]\+"
235endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100236syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
237syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
238syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100239
Doug Kearns99984fc2024-07-18 20:45:19 +0200240" Call {{{2
241" ====
242syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
243
Doug Kearns4a530a62025-02-03 18:59:09 +0100244" Debuggready {{{2
245" ===========
246" TODO: special-cased until generalised range/count support is implemented
247syn match vimDebuggreedy "\<0\=debugg\%[reedy]\>" contains=vimCount
248
dkearnsa3bddb72024-06-14 01:48:10 +1000249" Exception Handling {{{2
250syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
251syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
252syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
253
Doug Kearns818c6412024-10-06 17:00:48 +0200254" Export {{{2
255" ======
256if s:vim9script
257 syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
258endif
259
h-east9b53c052024-02-13 21:09:22 +0100260" Filetypes {{{2
261" =========
262syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
263if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
264 syn match vimFTError contained "\I\i*"
265endif
266syn keyword vimFTCmd contained filet[ype]
267syn keyword vimFTOption contained detect indent off on plugin
268
269" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
270" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
dkearns04e53632024-04-11 06:18:37 +1000271syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
dkearnsc4aef9a2024-03-04 02:42:47 +1100272syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100273if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100274 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 +0100275else
dkearnsc4aef9a2024-03-04 02:42:47 +1100276 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 +0100277endif
h-east9b53c052024-02-13 21:09:22 +0100278if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100279 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100280endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100281
282syn match vimAutoCmdGroup contained "\S\+"
283syn match vimAugroupEnd contained "\c\<END\>"
284syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
285syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100286
287" Operators: {{{2
288" =========
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200289syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
Doug Kearns8dec6c22025-01-19 14:02:06 +0100290syn match vimOper "\a\@<!!" skipwhite nextgroup=vimString,vimSpecFile
291syn match vimOper "||\|&&\|[-+*/%.]" skipwhite nextgroup=vimString,vimSpecFile
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100292syn match vimOper "?" skipwhite nextgroup=@vimExprList
293" distinguish ternary : from ex-colon
294syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite nextgroup=@vimExprList
295syn match vimOper "??" skipwhite nextgroup=@vimExprList
Doug Kearns8dec6c22025-01-19 14:02:06 +0100296syn match vimOper "=" skipwhite nextgroup=vimString,vimSpecFile
297syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite nextgroup=vimString,vimSpecFile
298syn match vimOper "\<is\%(not\)\=\>" skipwhite nextgroup=vimString,vimSpecFile
299syn match vimOper "\<is\%(not\)\=[?#]" skipwhite nextgroup=vimString,vimSpecFile
dkearns76d62982024-03-23 05:55:25 +1100300syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
h-east9b53c052024-02-13 21:09:22 +0100301syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
302if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
303 syn match vimOperError ")"
304endif
305
dkearns4ba70ca2024-04-15 04:32:56 +1000306" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
h-east9b53c052024-02-13 21:09:22 +0100307" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100308syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
309syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
dkearns4ba70ca2024-04-15 04:32:56 +1000310
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100311syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
312syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet,vimSearch
313syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9Search
dkearns35e6f4c2024-03-22 06:41:10 +1100314
315syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
316syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
317syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
318
319syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
Doug Kearns818c6412024-10-06 17:00:48 +0200320syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100321
Doug Kearns35699f12024-09-19 19:51:59 +0200322syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
323syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
dkearns35e6f4c2024-03-22 06:41:10 +1100324
325syn match vimFuncBang contained "!"
326syn match vimFuncSID contained "\c<sid>"
327syn match vimFuncSID contained "\<[sg]:"
328syn keyword vimFuncKey contained fu[nction]
329syn keyword vimDefKey contained def
330
Doug Kearns9b67a2e2024-12-26 10:13:45 +0100331syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
332syn 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 +1100333syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
334syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
335
Doug Kearns35699f12024-09-19 19:51:59 +0200336syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
337syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100338
Doug Kearns35699f12024-09-19 19:51:59 +0200339syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
340syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100341
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200342syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
343syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
h-east9b53c052024-02-13 21:09:22 +0100344
345if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
Doug Kearns818c6412024-10-06 17:00:48 +0200346 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
347 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 +0100348endif
dkearns35e6f4c2024-03-22 06:41:10 +1100349
350syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
h-east9b53c052024-02-13 21:09:22 +0100351syn match vimFuncBlank contained "\s\+"
352
dkearns35e6f4c2024-03-22 06:41:10 +1100353" Types: {{{2
354" =====
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200355
Doug Kearns35699f12024-09-19 19:51:59 +0200356syn 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 +0200357syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
dkearns35e6f4c2024-03-22 06:41:10 +1100358
359syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
360syn keyword vimType contained any blob bool channel float job number string void
361syn match vimType contained "\<func\>"
362syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
363syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
364syn match vimUserType contained "\<\u\w*\>"
365
366syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100367
Doug Kearns818c6412024-10-06 17:00:48 +0200368" Classes, Enums And Interfaces: {{{2
369" =============================
370
371if s:vim9script
372 " Methods {{{3
373 syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName
374 syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
375 syn region vim9MethodDefParams contained
376 \ matchgroup=Delimiter start="(" end=")"
377 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
378 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
379 syn region vim9MethodDefReturnType contained
380 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
381 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
382 \ contains=vimTypeSep
383 \ transparent
384 syn region vim9MethodDefBody contained
385 \ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
386 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
387 \ contains=@vim9MethodDefBodyList
388
389 syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
390
391 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
392 syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
393 endif
394 syn match vim9MethodName contained "\<new\i*\>"
395 syn keyword vim9MethodName contained empty len string
396
397 syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
398
399 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
400 syn region vim9MethodDefFold contained start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
401 syn region vim9MethodDefFold contained start="^\s*:\=def\s\+new\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
402 endif
403
404 syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
405
406 " Classes {{{3
407 syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
408
409 syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
410 syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
411 syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
412 syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
413 syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
414 syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
415 syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
416 syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
417 syn keyword vim9Public contained public
418 syn keyword vim9Static contained static
419 syn keyword vim9This contained this
420 syn keyword vim9Super contained super
421
422 VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
423
424 " Enums {{{3
425 syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,vim9Implements,@vim9MethodDef,vim9Const,vim9Final,vim9Var
426
427 syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
428 syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
429
430 VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
431
432 " Interfaces {{{3
433 " TODO: limit to decl only - no init values
434 syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
435
436 syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
437 syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
438
439 syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
440 syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams contains=@vim9MethodName
441 syn region vim9AbstractDefParams contained
442 \ matchgroup=Delimiter start="(" end=")"
443 \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
444 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
445 syn region vim9AbstractDefReturnType contained
446 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
447 \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
448 \ contains=vimTypeSep
449 \ transparent
450
451 VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
452
453 " type {{{3
454 syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
455 syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
456 syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
457 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
458 syn match vim9TypeAliasError contained "\<\U\w*"
459 endif
460endif
461
dkearns04e53632024-04-11 06:18:37 +1000462" Keymaps: {{{2
h-east9b53c052024-02-13 21:09:22 +0100463" =======
464
dkearns04e53632024-04-11 06:18:37 +1000465syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100466syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
467syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
468syn match vimKeymapTailComment "\S.*" contained
dkearns04e53632024-04-11 06:18:37 +1000469
470" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
471if s:vim9script
472 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
473else
474 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
475endif
476syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100477
Doug Kearns7866d542024-08-23 18:37:55 +0200478syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
h-east9b53c052024-02-13 21:09:22 +0100479
480" Special Filenames, Modifiers, Extension Removal: {{{2
481" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100482syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
483syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
484syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
485syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
486syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
487syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100488syn match vimSpecFileMod "\(:[phtre]\)\+" contained
489
490" User-Specified Commands: {{{2
491" =======================
dkearns04e53632024-04-11 06:18:37 +1000492syn 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 +0200493syn keyword vimUserCmdKey contained com[mand]
494syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
495syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
496syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
497syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
498syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
499syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
500syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
501syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
502syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
503syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
504syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
505syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
506syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
507syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
508syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
509
510syn match vimUserCmdAttrNargs contained "[01*?+]"
511syn match vimUserCmdAttrRange contained "%"
512
h-east9b53c052024-02-13 21:09:22 +0100513if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
514 syn match vimUserCmdError contained "\S\+\>"
515endif
h-east9b53c052024-02-13 21:09:22 +0100516
Doug Kearns3c07eb02024-09-02 10:03:37 +0200517syn case ignore
518syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
519" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
520syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
521syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
522" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
523syn match vimUserCmdAttrAddr contained "?"
h-east9b53c052024-02-13 21:09:22 +0100524syn case match
h-east9b53c052024-02-13 21:09:22 +0100525
dkearns04e53632024-04-11 06:18:37 +1000526syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
527
Doug Kearns3c07eb02024-09-02 10:03:37 +0200528syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
529syn match vimDelcommandAttr contained "-buffer\>"
530
h-east9b53c052024-02-13 21:09:22 +0100531" Lower Priority Comments: after some vim commands... {{{2
532" =======================
dkearns959c3c82024-06-12 04:18:08 +1000533if get(g:, "vimsyn_comment_strings", 1)
Doug Kearns35699f12024-09-19 19:51:59 +0200534 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
dkearns959c3c82024-06-12 04:18:08 +1000535endif
dkearns04e53632024-04-11 06:18:37 +1000536
537if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000538 syn cluster vimComment contains=vim9Comment
539else
dkearns04e53632024-04-11 06:18:37 +1000540 syn cluster vimComment contains=vimComment
541endif
h-east9b53c052024-02-13 21:09:22 +0100542
Doug Kearns35699f12024-09-19 19:51:59 +0200543VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
544VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
545VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200546" Vim9 comments - TODO: might be highlighted while they don't work
Doug Kearns35699f12024-09-19 19:51:59 +0200547Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
548Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
549Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200550" Vim9 comment inside expression
Doug Kearns35699f12024-09-19 19:51:59 +0200551Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
552Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
553Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200554
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200555syn match vim9CommentError contained "#.*"
556syn match vimCommentError contained +".*+
557
h-east9b53c052024-02-13 21:09:22 +0100558" Environment Variables: {{{2
559" =====================
560syn match vimEnvvar "\$\I\i*"
561syn match vimEnvvar "\${\I\i*}"
562
563" In-String Specials: {{{2
564" Try to catch strings, if nothing else matches (therefore it must precede the others!)
565" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
566syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
567syn match vimPatSepErr contained "\\)"
568syn match vimPatSep contained "\\|"
569syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
570syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
571syn match vimNotPatSep contained "\\\\"
572syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
Doug Kearns695522d2025-01-10 20:02:17 +0100573syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
574syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
h-east9b53c052024-02-13 21:09:22 +0100575"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
576syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
577syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
Doug Kearns695522d2025-01-10 20:02:17 +0100578
h-east9b53c052024-02-13 21:09:22 +0100579syn match vimEscape contained "\\."
580" syn match vimEscape contained +\\[befnrt\"]+
581syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
582syn match vimEscape contained "\\<" contains=vimNotation
583syn match vimEscape contained "\\<\*[^>]*>\=>"
Doug Kearns695522d2025-01-10 20:02:17 +0100584syn match vimQuoteEscape contained "''"
h-east9b53c052024-02-13 21:09:22 +0100585
Doug Kearns695522d2025-01-10 20:02:17 +0100586syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation extend
587syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
dkearnsb1427b42024-02-28 05:59:30 +1100588syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
589syn match vimStringInterpolationBrace contained "{{"
590syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200591syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100592
593" Substitutions: {{{2
594" =============
595syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
596syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
597syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200598syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
599syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
600syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
601syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100602" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
603" : # is allowed but "not recommended" (see :h pattern-delimiter)
604syn 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
605syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
606syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
607syn match vimCollClassErr contained "\[:.\{-\}:\]"
608syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
609syn match vimSubstSubstr contained "\\z\=\d"
610syn match vimSubstTwoBS contained "\\\\"
611syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
612syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100613
Doug Kearns92f4e912024-06-05 19:45:43 +0200614" Vi compatibility
615syn match vimSubstDelim contained "\\"
616syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
617
h-east9b53c052024-02-13 21:09:22 +0100618" 'String': {{{2
619syn match vimString "[^(,]'[^']\{-}\zs'"
620
621" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100622syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
Doug Kearnsd8176092024-08-31 16:57:32 +0200623syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
624syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
dkearns2c51e152024-02-27 07:10:18 +1100625syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
626syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
627syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100628syn match vimPlainMark contained "'[a-zA-Z0-9]"
629syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
630
631syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
632syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
633syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
634syn match vimRegister '@"'
635syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
636syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
637
638syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
639syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
640
641syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
642syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
643syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
644
645" Complex Repeats: (:h complex-repeat) {{{2
646" ===============
647syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
648syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
649
650" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200651syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
652syn 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
653syn 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
654syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
655syn keyword vimSetAll contained all nextgroup=vimSetMod
656syn keyword vimSetTermcap contained termcap
657syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100658syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200659syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100660
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200661" Variable Declarations: {{{2
662" =====================
663VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
664VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
665syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100666
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200667VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
h-east9b53c052024-02-13 21:09:22 +0100668syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
669syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
670
Doug Kearns7884cc72024-08-23 18:01:35 +0200671VimFoldh 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 +0200672VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200673VimFoldh 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 +0200674VimFoldh 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 +0200675
676Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
677Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
678Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
679
Doug Kearns818c6412024-10-06 17:00:48 +0200680syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200681syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100682
683" For: {{{2
684" ===
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200685if s:vim9script
686 syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
687else
688 syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
689endif
dkearns76d62982024-03-23 05:55:25 +1100690
h-east9b53c052024-02-13 21:09:22 +0100691" Abbreviations: {{{2
692" =============
693" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100694" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100695
696" Autocmd: {{{2
697" =======
Doug Kearns1718e7d2025-01-08 18:20:47 +0100698syn match vimAutoCmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoEventList
699syn match vimAutoEventList contained "\%(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
h-east9b53c052024-02-13 21:09:22 +0100700syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000701syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
Doug Kearns1718e7d2025-01-08 18:20:47 +0100702syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
703syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000704syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
705syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100706
707" Echo And Execute: -- prefer strings! {{{2
708" ================
dkearns61887b32024-03-15 23:45:48 +1100709" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100710
dkearns61887b32024-03-15 23:45:48 +1100711syn region vimEcho
712 \ matchgroup=vimCommand
713 \ start="\<ec\%[ho]\>"
714 \ start="\<echoe\%[rr]\>"
715 \ start="\<echom\%[sg]\>"
716 \ start="\<echoc\%[onsole]\>"
717 \ start="\<echon\>"
718 \ start="\<echow\%[indow]\>"
719 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
720 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
721
722syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100723syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100724syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100725syn case match
726
dkearns35e6f4c2024-03-22 06:41:10 +1100727syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100728
729syn 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 +1100730
h-east9b53c052024-02-13 21:09:22 +0100731" Maps: {{{2
732" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200733" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
734syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
735syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100736" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200737syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
738" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
739syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
740
dkearns5d67aef2024-03-10 04:01:22 +1100741syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
742syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
743syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100744syn 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 +1100745syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
746" assume a continuation comment introduces the RHS
747syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100748syn case ignore
749syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
750syn case match
751
752" Menus: {{{2
753" =====
dkearns62b26042024-03-10 03:43:28 +1100754" NOTE: tail comments disallowed
755" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
756syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
757syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
758syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100759syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
760syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100761syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
762syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
763syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
764syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
765syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
766
767syn region vimMenutranslate
768 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
769 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
770 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
771 \ contains=@vimContinue,vimMenutranslateName keepend transparent
772" oneline is sufficient to match the current formatting in runtime/lang/*.vim
773syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
774syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100775
776" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
777" ======================
778syn case ignore
779syn 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
780
781syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
782syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
783syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
784syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
785syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
786syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
787syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
788
789syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
790syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
791syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
792syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
793syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
794syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
795
796syn match vimBracket contained "[\\<>]"
797syn case match
798
799" User Function Highlighting: {{{2
800" (following Gautam Iyer's suggestion)
801" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100802syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
Doug Kearns818c6412024-10-06 17:00:48 +0200803syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vim9MethodName
dkearns9530fe42024-03-19 05:19:51 +1100804syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100805
Doug Kearns99984fc2024-07-18 20:45:19 +0200806syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
807
h-east9b53c052024-02-13 21:09:22 +0100808" User Command Highlighting: {{{2
809syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
810
811" Errors And Warnings: {{{2
812" ====================
813if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Doug Kearns818c6412024-10-06 17:00:48 +0200814 syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100815 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
816 syn match vimElseIfErr "\<else\s\+if\>"
817 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
818endif
819
Doug Kearns4d427d42024-09-15 19:21:18 +0200820syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100821
Doug Kearnse85fdc72024-07-07 20:45:37 +0200822" Match: {{{2
823" =====
824syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
825syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
826syn case ignore
827syn keyword vimMatchNone contained none
828syn case match
829syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
830
Doug Kearnsbbe52522024-11-09 19:11:25 +0100831" Normal: {{{2
832" ======
833syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
834syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100835
Doug Kearns262e25e2024-06-14 20:16:35 +0200836" Sleep: {{{2
837" =====
838syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
839syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
840syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
841
h-east9b53c052024-02-13 21:09:22 +0100842" Syntax: {{{2
843"=======
844syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
845syn 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
846syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
847
848if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
849 syn match vimSynError contained "\i\+"
850 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
851endif
852syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
853syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
854syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
855if has("conceal")
856 " no whitespace allowed after '='
857 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
858 syn match vimSynCcharValue contained "\S"
859endif
860
dkearns04e53632024-04-11 06:18:37 +1000861syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100862syn cluster vimFuncBodyList add=vimSyntax
863
864" Syntax: case {{{2
865syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
866if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
867 syn match vimSynCaseError contained "\i\+"
868endif
869syn keyword vimSynCase contained ignore match
870
871" Syntax: clear {{{2
872syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
873
874" Syntax: cluster {{{2
875syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
876syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
877syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
878syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100879
880" Syntax: foldlevel {{{2
881syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
882if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
883 syn match vimSynFoldMethodError contained "\i\+"
884endif
885syn keyword vimSynFoldMethod contained start minimum
886
887" Syntax: iskeyword {{{2
888syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
889syn match vimIskList contained '\S\+' contains=vimIskSep
890syn match vimIskSep contained ','
891
892" Syntax: include {{{2
893syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100894
895" Syntax: keyword {{{2
896syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
897syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
898syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
899syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100900
901" Syntax: match {{{2
902syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
903syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
904syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
905syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100906
907" Syntax: off and on {{{2
908syn keyword vimSynType contained enable list manual off on reset
909
910" Syntax: region {{{2
911syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
912syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
913syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
914syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
915syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
916syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
917syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
918syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
919syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
920syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
921syn match vimSynPatMod contained "lc=\d\+"
922syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
923syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
924syn match vimSynNotPatRange contained "\\\\\|\\\["
925syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100926
927" Syntax: sync {{{2
928" ============
929syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
930if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
931 syn match vimSyncError contained "\i\+"
932endif
933syn keyword vimSyncC contained ccomment clear fromstart
934syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
935syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
936syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
937syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
938syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
939syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
940syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
941syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
942syn keyword vimSyncNone contained NONE
943
944" Additional IsCommand: here by reasons of precedence {{{2
945" ====================
946syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
947
948" Highlighting: {{{2
949" ============
dkearns04e53632024-04-11 06:18:37 +1000950syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100951if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
952 syn match vimHiCtermError contained "\D\i*"
953endif
954syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100955syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100956
957syn match vimHiGroup contained "\i\+"
958syn case ignore
959syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
960syn keyword vimFgBgAttrib contained none bg background fg foreground
961syn case match
962syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
963syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
964syn case ignore
965syn 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
966syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
967
968syn case match
969syn match vimHiFontname contained "[a-zA-Z\-*]\+"
970syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
971syn match vimHiGuiRgb contained "#\x\{6}"
972
973" Highlighting: hi group key=arg ... {{{2
974syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100975syn 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 +0100976if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
977 syn match vimHiKeyError contained "\i\+="he=e-1
978endif
979syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100980syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100981syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
982syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
983syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
984syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
985syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
986syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
987syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
988syn match vimHiTermcap contained "\S\+" contains=vimNotation
989syn match vimHiNmbr contained '\d\+'
990
991" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100992syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100993
994" Highlight: link {{{2
995" see tst24 (hi def vs hi) (Jul 06, 2018)
996"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 +1100997" TODO: simplify and allow line continuations --djk
998syn 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 +0100999
1000" Control Characters: {{{2
1001" ==================
1002syn match vimCtrlChar "[- -]"
1003
1004" Beginners - Patterns that involve ^ {{{2
1005" =========
Doug Kearns35699f12024-09-19 19:51:59 +02001006Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
1007VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001008
h-east9b53c052024-02-13 21:09:22 +01001009syn 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 +10001010syn 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 +10001011
dkearnsae321b52024-06-15 23:06:17 +10001012" allowed anywhere in the file
1013if !s:vim9script
1014 syn match vimShebangError "^\s*\zs#!.*" display
1015endif
1016syn match vimShebang "\%^#!.*" display
1017
h-east9b53c052024-02-13 21:09:22 +01001018syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +10001019syn match vimContinueComment '^\s*\zs["#]\\ .*'
Doug Kearns818c6412024-10-06 17:00:48 +02001020syn match vim9ContinueComment "^\s*\zs#\\ .*"
1021syn cluster vimContinue contains=vimContinue,vimContinueComment
1022syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
1023
h-east9b53c052024-02-13 21:09:22 +01001024syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
1025syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +10001026syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +01001027
1028" Searches And Globals: {{{2
1029" ====================
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001030VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
h-east9b53c052024-02-13 21:09:22 +01001031syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001032Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim
1033syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep
dkearns2c51e152024-02-27 07:10:18 +11001034syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
1035syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +01001036
dkearns04e53632024-04-11 06:18:37 +10001037" Vim9 Script Regions: {{{2
1038" ==================
1039
1040if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +02001041 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
1042 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +10001043
Doug Kearnsce064932024-04-13 18:24:01 +02001044 syn keyword vim9Vim9ScriptArg noclear contained
1045 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +10001046endif
1047
h-east9b53c052024-02-13 21:09:22 +01001048" Embedded Scripts: {{{2
1049" ================
1050" perl,ruby : Benoit Cerrina
1051" python,tcl : Johannes Zellner
1052" mzscheme, lua : Charles Campbell
1053
1054" Allows users to specify the type of embedded script highlighting
1055" they want: (perl/python/ruby/tcl support)
1056" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +02001057" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
1058" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
1059" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
1060" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
1061" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
1062" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +01001063if !exists("g:vimsyn_embed")
1064 let g:vimsyn_embed= "lmpPr"
1065endif
1066
1067" [-- lua --] {{{3
1068let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
1069if !filereadable(s:luapath)
1070 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
1071 if filereadable(fnameescape(s:luapath))
1072 let s:luapath= fnameescape(s:luapath)
1073 break
1074 endif
1075 endfor
1076endif
1077if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
1078 unlet! b:current_syntax
1079 syn cluster vimFuncBodyList add=vimLuaRegion
1080 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +02001081 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
1082 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
1083 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
1084 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +01001085 syn cluster vimFuncBodyList add=vimLuaRegion
1086else
Ken Takata95e90782024-08-22 21:29:39 +02001087 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1088 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
1089 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1090 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001091endif
1092unlet s:luapath
1093
1094" [-- perl --] {{{3
1095let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
1096if !filereadable(s:perlpath)
1097 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
1098 if filereadable(fnameescape(s:perlpath))
1099 let s:perlpath= fnameescape(s:perlpath)
1100 break
1101 endif
1102 endfor
1103endif
1104if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
1105 unlet! b:current_syntax
1106 syn cluster vimFuncBodyList add=vimPerlRegion
1107 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +02001108 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
1109 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
1110 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
1111 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +01001112 syn cluster vimFuncBodyList add=vimPerlRegion
1113else
Ken Takata95e90782024-08-22 21:29:39 +02001114 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1115 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1116 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1117 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001118endif
1119unlet s:perlpath
1120
1121" [-- ruby --] {{{3
1122let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
1123if !filereadable(s:rubypath)
1124 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
1125 if filereadable(fnameescape(s:rubypath))
1126 let s:rubypath= fnameescape(s:rubypath)
1127 break
1128 endif
1129 endfor
1130endif
1131if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
1132 syn cluster vimFuncBodyList add=vimRubyRegion
1133 unlet! b:current_syntax
1134 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +02001135 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
1136 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
1137 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
1138 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +01001139 syn cluster vimFuncBodyList add=vimRubyRegion
1140else
Ken Takata95e90782024-08-22 21:29:39 +02001141 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1142 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
1143 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1144 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001145endif
1146unlet s:rubypath
1147
1148" [-- python --] {{{3
1149let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1150if !filereadable(s:pythonpath)
1151 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1152 if filereadable(fnameescape(s:pythonpath))
1153 let s:pythonpath= fnameescape(s:pythonpath)
1154 break
1155 endif
1156 endfor
1157endif
1158if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1159 unlet! b:current_syntax
1160 syn cluster vimFuncBodyList add=vimPythonRegion
1161 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001162 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1163 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1164 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1165 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1166 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1167 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001168 syn cluster vimFuncBodyList add=vimPythonRegion
1169else
Ken Takata95e90782024-08-22 21:29:39 +02001170 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1171 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1172 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1173 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001174endif
1175unlet s:pythonpath
1176
1177" [-- tcl --] {{{3
1178if has("win32") || has("win95") || has("win64") || has("win16")
1179 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1180 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1181else
1182 let s:trytcl= 1
1183endif
1184if s:trytcl
1185 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1186 if !filereadable(s:tclpath)
1187 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1188 if filereadable(fnameescape(s:tclpath))
1189 let s:tclpath= fnameescape(s:tclpath)
1190 break
1191 endif
1192 endfor
1193 endif
1194 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1195 unlet! b:current_syntax
1196 syn cluster vimFuncBodyList add=vimTclRegion
1197 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001198 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1199 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1200 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1201 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001202 syn cluster vimFuncBodyList add=vimTclScript
1203 else
Ken Takata95e90782024-08-22 21:29:39 +02001204 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1205 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1206 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1207 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001208 endif
1209 unlet s:tclpath
1210else
Ken Takata95e90782024-08-22 21:29:39 +02001211 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1212 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1213 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1214 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001215endif
1216unlet s:trytcl
1217
1218" [-- mzscheme --] {{{3
1219let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1220if !filereadable(s:mzschemepath)
1221 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1222 if filereadable(fnameescape(s:mzschemepath))
1223 let s:mzschemepath= fnameescape(s:mzschemepath)
1224 break
1225 endif
1226 endfor
1227endif
1228if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1229 unlet! b:current_syntax
1230 let s:iskKeep= &isk
1231 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1232 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1233 let &isk= s:iskKeep
1234 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001235 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1236 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1237 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1238 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001239 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1240else
Ken Takata95e90782024-08-22 21:29:39 +02001241 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1242 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1243 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1244 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001245endif
1246unlet s:mzschemepath
1247
1248" Synchronize (speed) {{{2
1249"============
1250if exists("g:vimsyn_minlines")
1251 exe "syn sync minlines=".g:vimsyn_minlines
1252endif
1253exe "syn sync maxlines=".s:vimsyn_maxlines
1254syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001255syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001256syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1257
1258" ====================
1259" Highlighting Settings {{{2
1260" ====================
1261
1262if !exists("skip_vim_syntax_inits")
1263 if !exists("g:vimsyn_noerror")
1264 hi def link vimBehaveError vimError
1265 hi def link vimCollClassErr vimError
1266 hi def link vimErrSetting vimError
1267 hi def link vimEmbedError vimError
1268 hi def link vimFTError vimError
1269 hi def link vimFunctionError vimError
1270 hi def link vimFunc vimError
1271 hi def link vimHiAttribList vimError
1272 hi def link vimHiCtermError vimError
1273 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001274 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001275 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001276 hi def link vimSubstFlagErr vimError
1277 hi def link vimSynCaseError vimError
1278 hi def link vimSynFoldMethodError vimError
1279 hi def link vimBufnrWarn vimWarn
Doug Kearns818c6412024-10-06 17:00:48 +02001280
1281 hi def link vim9TypeAliasError vimError
h-east9b53c052024-02-13 21:09:22 +01001282 endif
1283
1284 hi def link vimAbb vimCommand
1285 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001286 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001287 hi def link vimAugroupError vimError
1288 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001289 hi def link vimAutoCmd vimCommand
Doug Kearns1718e7d2025-01-08 18:20:47 +01001290 hi def link vimAutoCmdBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001291 hi def link vimAutoEvent Type
1292 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001293 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001294 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001295 hi def link vimBehaveModel vimBehave
1296 hi def link vimBehave vimCommand
1297 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001298 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001299 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001300 hi def link vimCmplxRepeat SpecialChar
1301 hi def link vimCommand Statement
1302 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001303 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001304 hi def link vimCommentString vimString
1305 hi def link vimCommentTitle PreProc
1306 hi def link vimCondHL vimCommand
1307 hi def link vimConst vimCommand
1308 hi def link vimContinue Special
1309 hi def link vimContinueComment vimComment
Doug Kearns4a530a62025-02-03 18:59:09 +01001310 hi def link vimCount Number
h-east9b53c052024-02-13 21:09:22 +01001311 hi def link vimCtrlChar SpecialChar
Doug Kearns4a530a62025-02-03 18:59:09 +01001312 hi def link vimDebuggreedy vimCommand
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001313 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001314 hi def link vimDefKey vimCommand
1315 hi def link vimDefParam vimVar
Doug Kearns3c07eb02024-09-02 10:03:37 +02001316 hi def link vimDelcommand vimCommand
1317 hi def link vimDelcommandAttr vimUserCmdAttr
dkearnsb1427b42024-02-28 05:59:30 +11001318 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001319 hi def link vimEchohlNone vimGroup
1320 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001321 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001322 hi def link vimEndfunction vimCommand
1323 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001324 hi def link vimEnvvar PreProc
1325 hi def link vimError Error
1326 hi def link vimEscape Special
1327 hi def link vimFBVar vimVar
1328 hi def link vimFgBgAttrib vimHiAttrib
1329 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001330 hi def link vimFor vimCommand
1331 hi def link vimFTCmd vimCommand
1332 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001333 hi def link vimFuncBang vimBang
1334 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001335 hi def link vimFuncKey vimCommand
1336 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001337 hi def link vimFuncMod Special
1338 hi def link vimFuncParam vimVar
1339 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001340 hi def link vimFuncSID Special
1341 hi def link vimFuncVar Identifier
1342 hi def link vimGroupAdd vimSynOption
1343 hi def link vimGroupName vimGroup
1344 hi def link vimGroupRem vimSynOption
1345 hi def link vimGroupSpecial Special
1346 hi def link vimGroup Type
1347 hi def link vimHiAttrib PreProc
1348 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001349 hi def link vimHiClear Type
1350 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001351 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001352 hi def link vimHiCtermfont vimHiTerm
1353 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001354 hi def link vimHiCTerm vimHiTerm
1355 hi def link vimHighlight vimCommand
1356 hi def link vimHiGroup vimGroupName
1357 hi def link vimHiGuiFgBg vimHiTerm
1358 hi def link vimHiGuiFont vimHiTerm
1359 hi def link vimHiGuiRgb vimNumber
1360 hi def link vimHiGui vimHiTerm
1361 hi def link vimHiNmbr Number
1362 hi def link vimHiStartStop vimHiTerm
1363 hi def link vimHiTerm Type
1364 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001365 hi def link vimInsert vimString
1366 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001367 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001368 hi def link vimKeymapLineComment vimComment
1369 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001370 hi def link vimLet vimCommand
1371 hi def link vimLetHereDoc vimString
1372 hi def link vimLetHereDocStart Special
1373 hi def link vimLetHereDocStop Special
1374 hi def link vimLetRegister Special
1375 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001376 hi def link vimMapBang vimBang
1377 hi def link vimMapModKey vimFuncSID
1378 hi def link vimMapMod vimBracket
1379 hi def link vimMap vimCommand
1380 hi def link vimMark Number
1381 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001382 hi def link vimMatch vimCommand
1383 hi def link vimMatchGroup vimGroup
1384 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001385 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001386 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001387 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001388 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001389 hi def link vimMenu vimCommand
1390 hi def link vimMenuNotation vimNotation
1391 hi def link vimMenuPriority Number
1392 hi def link vimMenuStatus Special
1393 hi def link vimMenutranslateComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001394 hi def link vim9MethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001395 hi def link vimMtchComment vimComment
Doug Kearnsbbe52522024-11-09 19:11:25 +01001396 hi def link vimNormal vimCommand
h-east9b53c052024-02-13 21:09:22 +01001397 hi def link vimNotation Special
1398 hi def link vimNotFunc vimCommand
1399 hi def link vimNotPatSep vimString
1400 hi def link vimNumber Number
1401 hi def link vimOperError Error
1402 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001403 hi def link vimOption PreProc
1404 hi def link vimParenSep Delimiter
1405 hi def link vimPatSepErr vimError
1406 hi def link vimPatSepR vimPatSep
1407 hi def link vimPatSep SpecialChar
1408 hi def link vimPatSepZone vimString
1409 hi def link vimPatSepZ vimPatSep
1410 hi def link vimPattern Type
1411 hi def link vimPlainMark vimMark
1412 hi def link vimPlainRegister vimRegister
Doug Kearns695522d2025-01-10 20:02:17 +01001413 hi def link vimQuoteEscape vimEscape
h-east9b53c052024-02-13 21:09:22 +01001414 hi def link vimRegister SpecialChar
1415 hi def link vimScriptDelim Comment
h-east9b53c052024-02-13 21:09:22 +01001416 hi def link vimSearch vimString
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001417 hi def link vimSearchDelim Delimiter
h-east9b53c052024-02-13 21:09:22 +01001418 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001419 hi def link vimSet vimCommand
1420 hi def link vimSetAll vimOption
1421 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001422 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001423 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001424 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001425 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001426 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001427 hi def link vimSleep vimCommand
1428 hi def link vimSleepArg Constant
1429 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001430 hi def link vimSpecFile Identifier
1431 hi def link vimSpecFileMod vimSpecFile
1432 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001433 hi def link vimStringCont vimString
1434 hi def link vimString String
1435 hi def link vimStringEnd vimString
1436 hi def link vimStringInterpolationBrace vimEscape
1437 hi def link vimSubst1 vimSubst
1438 hi def link vimSubstDelim Delimiter
1439 hi def link vimSubstFlags Special
1440 hi def link vimSubstSubstr SpecialChar
1441 hi def link vimSubstTwoBS vimString
1442 hi def link vimSubst vimCommand
1443 hi def link vimSynCaseError Error
1444 hi def link vimSynCase Type
1445 hi def link vimSyncC Type
1446 hi def link vimSyncError Error
1447 hi def link vimSyncGroupName vimGroupName
1448 hi def link vimSyncGroup vimGroupName
1449 hi def link vimSyncKey Type
1450 hi def link vimSyncNone Type
1451 hi def link vimSynContains vimSynOption
1452 hi def link vimSynError Error
1453 hi def link vimSynFoldMethodError Error
1454 hi def link vimSynFoldMethod Type
1455 hi def link vimSynKeyContainedin vimSynContains
1456 hi def link vimSynKeyOpt vimSynOption
1457 hi def link vimSynCchar vimSynOption
1458 hi def link vimSynCcharValue Character
1459 hi def link vimSynMtchGrp vimSynOption
1460 hi def link vimSynMtchOpt vimSynOption
1461 hi def link vimSynNextgroup vimSynOption
1462 hi def link vimSynNotPatRange vimSynRegPat
1463 hi def link vimSynOption Special
1464 hi def link vimSynPatRange vimString
1465 hi def link vimSynRegOpt vimSynOption
1466 hi def link vimSynRegPat vimString
1467 hi def link vimSynReg Type
1468 hi def link vimSyntax vimCommand
1469 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001470 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001471 hi def link vimTodo Todo
1472 hi def link vimType Type
1473 hi def link vimUnlet vimCommand
1474 hi def link vimUnletBang vimBang
1475 hi def link vimUnmap vimMap
Doug Kearns3c07eb02024-09-02 10:03:37 +02001476 hi def link vimUserCmdAttrAddr vimSpecial
1477 hi def link vimUserCmdAttrCmplt vimSpecial
1478 hi def link vimUserCmdAttrNargs vimSpecial
1479 hi def link vimUserCmdAttrRange vimSpecial
1480 hi def link vimUserCmdAttrKey vimUserCmdAttr
1481 hi def link vimUserCmdAttr Special
1482 hi def link vimUserCmdAttrError Error
h-east9b53c052024-02-13 21:09:22 +01001483 hi def link vimUserCmdError Error
Doug Kearns3c07eb02024-09-02 10:03:37 +02001484 hi def link vimUserCmdKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001485 hi def link vimUserFunc Normal
1486 hi def link vimVar Identifier
1487 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001488
Doug Kearns818c6412024-10-06 17:00:48 +02001489 hi def link vim9Abstract vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001490 hi def link vim9Boolean Boolean
Doug Kearns818c6412024-10-06 17:00:48 +02001491 hi def link vim9Class vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001492 hi def link vim9Comment Comment
1493 hi def link vim9CommentError vimError
1494 hi def link vim9CommentTitle PreProc
1495 hi def link vim9Const vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001496 hi def link vim9ContinueComment vimContinueComment
1497 hi def link vim9Enum vimCommand
1498 hi def link vim9Export vimCommand
1499 hi def link vim9Extends Keyword
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001500 hi def link vim9Final vimCommand
1501 hi def link vim9For vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001502 hi def link vim9Implements Keyword
1503 hi def link vim9AbstractDef vimCommand
1504 hi def link vim9Interface vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001505 hi def link vim9LineComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001506 hi def link vim9MethodDef vimCommand
1507 hi def link vim9MethodNameError vimFunctionError
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001508 hi def link vim9Null Constant
Doug Kearns818c6412024-10-06 17:00:48 +02001509 hi def link vim9Public vimCommand
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001510 hi def link vim9Search vimString
1511 hi def link vim9SearchDelim Delimiter
Doug Kearns818c6412024-10-06 17:00:48 +02001512 hi def link vim9Static vimCommand
1513 hi def link vim9Super Identifier
1514 hi def link vim9This Identifier
1515 hi def link vim9Type vimCommand
1516 hi def link vim9TypeEquals vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001517 hi def link vim9Variable vimVar
Doug Kearns818c6412024-10-06 17:00:48 +02001518 hi def link vim9Var vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001519 hi def link vim9Vim9ScriptArg Special
Doug Kearns818c6412024-10-06 17:00:48 +02001520 hi def link vim9Vim9Script vimCommand
h-east9b53c052024-02-13 21:09:22 +01001521endif
1522
1523" Current Syntax Variable: {{{2
1524let b:current_syntax = "vim"
1525
1526" ---------------------------------------------------------------------
1527" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001528delc Vim9
1529delc VimL
h-east9b53c052024-02-13 21:09:22 +01001530delc VimFolda
Doug Kearns818c6412024-10-06 17:00:48 +02001531delc VimFoldc
1532delc VimFolde
h-east9b53c052024-02-13 21:09:22 +01001533delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001534delc VimFoldh
1535delc VimFoldH
Doug Kearns818c6412024-10-06 17:00:48 +02001536delc VimFoldi
h-east9b53c052024-02-13 21:09:22 +01001537delc VimFoldl
1538delc VimFoldm
1539delc VimFoldp
1540delc VimFoldP
1541delc VimFoldr
1542delc VimFoldt
1543let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001544unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001545" vim:ts=18 fdm=marker ft=vim