blob: 23e34235a10b790e82e000e7b820a88ce9b3ea2b [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 Kearns8dec6c22025-01-19 14:02:06 +01005" Last Change: 2025 Jan 19
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 Kearnsbbe52522024-11-09 19:11:25 +0100205syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,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 Kearns1718e7d2025-01-08 18:20:47 +0100208syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" nextgroup=vimBang contains=vimCommand
Doug Kearns3c07eb02024-09-02 10:03:37 +0200209syn match vimBang contained "!"
h-east9b53c052024-02-13 21:09:22 +0100210syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
211syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
212syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
213syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
214syn match vimVar "\s\zs&t_k;"
215syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
216syn keyword vimCommand contained in
217
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200218syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
219syn cluster vim9ExprList contains=vim9Boolean,vim9Null
dkearnsb1427b42024-02-28 05:59:30 +1100220
h-east9b53c052024-02-13 21:09:22 +0100221" Insertions And Appends: insert append {{{2
222" (buftype != nofile test avoids having append, change, insert show up in the command window)
223" =======================
224if &buftype != 'nofile'
dkearns4ba70ca2024-04-15 04:32:56 +1000225 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend
226 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend
227 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend
h-east9b53c052024-02-13 21:09:22 +0100228endif
229
230" Behave! {{{2
231" =======
h-east9b53c052024-02-13 21:09:22 +0100232if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
233 syn match vimBehaveError contained "[^ ]\+"
234endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100235syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
236syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
237syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100238
Doug Kearns99984fc2024-07-18 20:45:19 +0200239" Call {{{2
240" ====
241syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
242
dkearnsa3bddb72024-06-14 01:48:10 +1000243" Exception Handling {{{2
244syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
245syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
246syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
247
Doug Kearns818c6412024-10-06 17:00:48 +0200248" Export {{{2
249" ======
250if s:vim9script
251 syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
252endif
253
h-east9b53c052024-02-13 21:09:22 +0100254" Filetypes {{{2
255" =========
256syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
257if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
258 syn match vimFTError contained "\I\i*"
259endif
260syn keyword vimFTCmd contained filet[ype]
261syn keyword vimFTOption contained detect indent off on plugin
262
263" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
264" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
dkearns04e53632024-04-11 06:18:37 +1000265syn 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 +1100266syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100267if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100268 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 +0100269else
dkearnsc4aef9a2024-03-04 02:42:47 +1100270 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 +0100271endif
h-east9b53c052024-02-13 21:09:22 +0100272if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100273 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100274endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100275
276syn match vimAutoCmdGroup contained "\S\+"
277syn match vimAugroupEnd contained "\c\<END\>"
278syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
279syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100280
281" Operators: {{{2
282" =========
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200283syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
Doug Kearns8dec6c22025-01-19 14:02:06 +0100284syn match vimOper "\a\@<!!" skipwhite nextgroup=vimString,vimSpecFile
285syn match vimOper "||\|&&\|[-+*/%.]" skipwhite nextgroup=vimString,vimSpecFile
286syn match vimOper "=" skipwhite nextgroup=vimString,vimSpecFile
287syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite nextgroup=vimString,vimSpecFile
288syn match vimOper "\<is\%(not\)\=\>" skipwhite nextgroup=vimString,vimSpecFile
289syn match vimOper "\<is\%(not\)\=[?#]" skipwhite nextgroup=vimString,vimSpecFile
dkearns76d62982024-03-23 05:55:25 +1100290syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
h-east9b53c052024-02-13 21:09:22 +0100291syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
292if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
293 syn match vimOperError ")"
294endif
295
dkearns4ba70ca2024-04-15 04:32:56 +1000296" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
h-east9b53c052024-02-13 21:09:22 +0100297" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100298syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
299syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
dkearns4ba70ca2024-04-15 04:32:56 +1000300
Doug Kearns818c6412024-10-06 17:00:48 +0200301syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200302syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet
303syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For
dkearns35e6f4c2024-03-22 06:41:10 +1100304
305syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
306syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
307syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
308
309syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
Doug Kearns818c6412024-10-06 17:00:48 +0200310syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100311
Doug Kearns35699f12024-09-19 19:51:59 +0200312syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
313syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
dkearns35e6f4c2024-03-22 06:41:10 +1100314
315syn match vimFuncBang contained "!"
316syn match vimFuncSID contained "\c<sid>"
317syn match vimFuncSID contained "\<[sg]:"
318syn keyword vimFuncKey contained fu[nction]
319syn keyword vimDefKey contained def
320
Doug Kearns9b67a2e2024-12-26 10:13:45 +0100321syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
322syn 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 +1100323syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
324syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
325
Doug Kearns35699f12024-09-19 19:51:59 +0200326syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
327syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100328
Doug Kearns35699f12024-09-19 19:51:59 +0200329syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
330syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100331
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200332syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
333syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
h-east9b53c052024-02-13 21:09:22 +0100334
335if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
Doug Kearns818c6412024-10-06 17:00:48 +0200336 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
337 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 +0100338endif
dkearns35e6f4c2024-03-22 06:41:10 +1100339
340syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
h-east9b53c052024-02-13 21:09:22 +0100341syn match vimFuncBlank contained "\s\+"
342
dkearns35e6f4c2024-03-22 06:41:10 +1100343" Types: {{{2
344" =====
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200345
Doug Kearns35699f12024-09-19 19:51:59 +0200346syn 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 +0200347syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
dkearns35e6f4c2024-03-22 06:41:10 +1100348
349syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
350syn keyword vimType contained any blob bool channel float job number string void
351syn match vimType contained "\<func\>"
352syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
353syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
354syn match vimUserType contained "\<\u\w*\>"
355
356syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100357
Doug Kearns818c6412024-10-06 17:00:48 +0200358" Classes, Enums And Interfaces: {{{2
359" =============================
360
361if s:vim9script
362 " Methods {{{3
363 syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName
364 syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
365 syn region vim9MethodDefParams contained
366 \ matchgroup=Delimiter start="(" end=")"
367 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
368 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
369 syn region vim9MethodDefReturnType contained
370 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
371 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
372 \ contains=vimTypeSep
373 \ transparent
374 syn region vim9MethodDefBody contained
375 \ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
376 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
377 \ contains=@vim9MethodDefBodyList
378
379 syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
380
381 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
382 syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
383 endif
384 syn match vim9MethodName contained "\<new\i*\>"
385 syn keyword vim9MethodName contained empty len string
386
387 syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
388
389 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
390 syn region vim9MethodDefFold contained start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
391 syn region vim9MethodDefFold contained start="^\s*:\=def\s\+new\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
392 endif
393
394 syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
395
396 " Classes {{{3
397 syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
398
399 syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
400 syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
401 syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
402 syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
403 syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
404 syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
405 syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
406 syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
407 syn keyword vim9Public contained public
408 syn keyword vim9Static contained static
409 syn keyword vim9This contained this
410 syn keyword vim9Super contained super
411
412 VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
413
414 " Enums {{{3
415 syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,vim9Implements,@vim9MethodDef,vim9Const,vim9Final,vim9Var
416
417 syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
418 syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
419
420 VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
421
422 " Interfaces {{{3
423 " TODO: limit to decl only - no init values
424 syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
425
426 syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
427 syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
428
429 syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
430 syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams contains=@vim9MethodName
431 syn region vim9AbstractDefParams contained
432 \ matchgroup=Delimiter start="(" end=")"
433 \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
434 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
435 syn region vim9AbstractDefReturnType contained
436 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
437 \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
438 \ contains=vimTypeSep
439 \ transparent
440
441 VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
442
443 " type {{{3
444 syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
445 syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
446 syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
447 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
448 syn match vim9TypeAliasError contained "\<\U\w*"
449 endif
450endif
451
dkearns04e53632024-04-11 06:18:37 +1000452" Keymaps: {{{2
h-east9b53c052024-02-13 21:09:22 +0100453" =======
454
dkearns04e53632024-04-11 06:18:37 +1000455syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100456syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
457syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
458syn match vimKeymapTailComment "\S.*" contained
dkearns04e53632024-04-11 06:18:37 +1000459
460" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
461if s:vim9script
462 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
463else
464 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
465endif
466syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100467
Doug Kearns7866d542024-08-23 18:37:55 +0200468syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
h-east9b53c052024-02-13 21:09:22 +0100469
470" Special Filenames, Modifiers, Extension Removal: {{{2
471" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100472syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
473syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
474syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
475syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
476syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
477syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100478syn match vimSpecFileMod "\(:[phtre]\)\+" contained
479
480" User-Specified Commands: {{{2
481" =======================
dkearns04e53632024-04-11 06:18:37 +1000482syn 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 +0200483syn keyword vimUserCmdKey contained com[mand]
484syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
485syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
486syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
487syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
488syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
489syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
490syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
491syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
492syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
493syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
494syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
495syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
496syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
497syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
498syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
499
500syn match vimUserCmdAttrNargs contained "[01*?+]"
501syn match vimUserCmdAttrRange contained "%"
502
h-east9b53c052024-02-13 21:09:22 +0100503if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
504 syn match vimUserCmdError contained "\S\+\>"
505endif
h-east9b53c052024-02-13 21:09:22 +0100506
Doug Kearns3c07eb02024-09-02 10:03:37 +0200507syn case ignore
508syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
509" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
510syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
511syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
512" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
513syn match vimUserCmdAttrAddr contained "?"
h-east9b53c052024-02-13 21:09:22 +0100514syn case match
h-east9b53c052024-02-13 21:09:22 +0100515
dkearns04e53632024-04-11 06:18:37 +1000516syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
517
Doug Kearns3c07eb02024-09-02 10:03:37 +0200518syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
519syn match vimDelcommandAttr contained "-buffer\>"
520
h-east9b53c052024-02-13 21:09:22 +0100521" Lower Priority Comments: after some vim commands... {{{2
522" =======================
dkearns959c3c82024-06-12 04:18:08 +1000523if get(g:, "vimsyn_comment_strings", 1)
Doug Kearns35699f12024-09-19 19:51:59 +0200524 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
dkearns959c3c82024-06-12 04:18:08 +1000525endif
dkearns04e53632024-04-11 06:18:37 +1000526
527if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000528 syn cluster vimComment contains=vim9Comment
529else
dkearns04e53632024-04-11 06:18:37 +1000530 syn cluster vimComment contains=vimComment
531endif
h-east9b53c052024-02-13 21:09:22 +0100532
Doug Kearns35699f12024-09-19 19:51:59 +0200533VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
534VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
535VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200536" Vim9 comments - TODO: might be highlighted while they don't work
Doug Kearns35699f12024-09-19 19:51:59 +0200537Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
538Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
539Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200540" Vim9 comment inside expression
Doug Kearns35699f12024-09-19 19:51:59 +0200541Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
542Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
543Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200544
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200545syn match vim9CommentError contained "#.*"
546syn match vimCommentError contained +".*+
547
h-east9b53c052024-02-13 21:09:22 +0100548" Environment Variables: {{{2
549" =====================
550syn match vimEnvvar "\$\I\i*"
551syn match vimEnvvar "\${\I\i*}"
552
553" In-String Specials: {{{2
554" Try to catch strings, if nothing else matches (therefore it must precede the others!)
555" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
556syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
557syn match vimPatSepErr contained "\\)"
558syn match vimPatSep contained "\\|"
559syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
560syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
561syn match vimNotPatSep contained "\\\\"
562syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
Doug Kearns695522d2025-01-10 20:02:17 +0100563syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
564syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
h-east9b53c052024-02-13 21:09:22 +0100565"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
566syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
567syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
Doug Kearns695522d2025-01-10 20:02:17 +0100568
h-east9b53c052024-02-13 21:09:22 +0100569syn match vimEscape contained "\\."
570" syn match vimEscape contained +\\[befnrt\"]+
571syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
572syn match vimEscape contained "\\<" contains=vimNotation
573syn match vimEscape contained "\\<\*[^>]*>\=>"
Doug Kearns695522d2025-01-10 20:02:17 +0100574syn match vimQuoteEscape contained "''"
h-east9b53c052024-02-13 21:09:22 +0100575
Doug Kearns695522d2025-01-10 20:02:17 +0100576syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation extend
577syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
dkearnsb1427b42024-02-28 05:59:30 +1100578syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
579syn match vimStringInterpolationBrace contained "{{"
580syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200581syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100582
583" Substitutions: {{{2
584" =============
585syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
586syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
587syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200588syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
589syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
590syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
591syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100592" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
593" : # is allowed but "not recommended" (see :h pattern-delimiter)
594syn 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
595syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
596syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
597syn match vimCollClassErr contained "\[:.\{-\}:\]"
598syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
599syn match vimSubstSubstr contained "\\z\=\d"
600syn match vimSubstTwoBS contained "\\\\"
601syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
602syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100603
Doug Kearns92f4e912024-06-05 19:45:43 +0200604" Vi compatibility
605syn match vimSubstDelim contained "\\"
606syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
607
h-east9b53c052024-02-13 21:09:22 +0100608" 'String': {{{2
609syn match vimString "[^(,]'[^']\{-}\zs'"
610
611" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100612syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
Doug Kearnsd8176092024-08-31 16:57:32 +0200613syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
614syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
dkearns2c51e152024-02-27 07:10:18 +1100615syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
616syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
617syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100618syn match vimPlainMark contained "'[a-zA-Z0-9]"
619syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
620
621syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
622syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
623syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
624syn match vimRegister '@"'
625syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
626syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
627
628syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
629syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
630
631syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
632syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
633syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
634
635" Complex Repeats: (:h complex-repeat) {{{2
636" ===============
637syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
638syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
639
640" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200641syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
642syn 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
643syn 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
644syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
645syn keyword vimSetAll contained all nextgroup=vimSetMod
646syn keyword vimSetTermcap contained termcap
647syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100648syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200649syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100650
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200651" Variable Declarations: {{{2
652" =====================
653VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
654VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
655syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100656
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200657VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
h-east9b53c052024-02-13 21:09:22 +0100658syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
659syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
660
Doug Kearns7884cc72024-08-23 18:01:35 +0200661VimFoldh 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 +0200662VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200663VimFoldh 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 +0200664VimFoldh 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 +0200665
666Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
667Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
668Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
669
Doug Kearns818c6412024-10-06 17:00:48 +0200670syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200671syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100672
673" For: {{{2
674" ===
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200675if s:vim9script
676 syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
677else
678 syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
679endif
dkearns76d62982024-03-23 05:55:25 +1100680
h-east9b53c052024-02-13 21:09:22 +0100681" Abbreviations: {{{2
682" =============
683" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100684" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100685
686" Autocmd: {{{2
687" =======
Doug Kearns1718e7d2025-01-08 18:20:47 +0100688syn match vimAutoCmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoEventList
689syn match vimAutoEventList contained "\%(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
h-east9b53c052024-02-13 21:09:22 +0100690syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000691syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
Doug Kearns1718e7d2025-01-08 18:20:47 +0100692syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
693syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000694syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
695syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100696
697" Echo And Execute: -- prefer strings! {{{2
698" ================
dkearns61887b32024-03-15 23:45:48 +1100699" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100700
dkearns61887b32024-03-15 23:45:48 +1100701syn region vimEcho
702 \ matchgroup=vimCommand
703 \ start="\<ec\%[ho]\>"
704 \ start="\<echoe\%[rr]\>"
705 \ start="\<echom\%[sg]\>"
706 \ start="\<echoc\%[onsole]\>"
707 \ start="\<echon\>"
708 \ start="\<echow\%[indow]\>"
709 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
710 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
711
712syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100713syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100714syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100715syn case match
716
dkearns35e6f4c2024-03-22 06:41:10 +1100717syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100718
719syn 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 +1100720
h-east9b53c052024-02-13 21:09:22 +0100721" Maps: {{{2
722" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200723" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
724syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
725syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100726" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200727syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
728" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
729syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
730
dkearns5d67aef2024-03-10 04:01:22 +1100731syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
732syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
733syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100734syn 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 +1100735syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
736" assume a continuation comment introduces the RHS
737syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100738syn case ignore
739syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
740syn case match
741
742" Menus: {{{2
743" =====
dkearns62b26042024-03-10 03:43:28 +1100744" NOTE: tail comments disallowed
745" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
746syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
747syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
748syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100749syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
750syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100751syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
752syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
753syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
754syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
755syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
756
757syn region vimMenutranslate
758 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
759 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
760 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
761 \ contains=@vimContinue,vimMenutranslateName keepend transparent
762" oneline is sufficient to match the current formatting in runtime/lang/*.vim
763syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
764syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100765
766" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
767" ======================
768syn case ignore
769syn 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
770
771syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
772syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
773syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
774syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
775syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
776syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
777syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
778
779syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
780syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
781syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
782syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
783syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
784syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
785
786syn match vimBracket contained "[\\<>]"
787syn case match
788
789" User Function Highlighting: {{{2
790" (following Gautam Iyer's suggestion)
791" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100792syn 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 +0200793syn 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 +1100794syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100795
Doug Kearns99984fc2024-07-18 20:45:19 +0200796syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
797
h-east9b53c052024-02-13 21:09:22 +0100798" User Command Highlighting: {{{2
799syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
800
801" Errors And Warnings: {{{2
802" ====================
803if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Doug Kearns818c6412024-10-06 17:00:48 +0200804 syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100805 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
806 syn match vimElseIfErr "\<else\s\+if\>"
807 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
808endif
809
Doug Kearns4d427d42024-09-15 19:21:18 +0200810syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100811
Doug Kearnse85fdc72024-07-07 20:45:37 +0200812" Match: {{{2
813" =====
814syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
815syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
816syn case ignore
817syn keyword vimMatchNone contained none
818syn case match
819syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
820
Doug Kearnsbbe52522024-11-09 19:11:25 +0100821" Normal: {{{2
822" ======
823syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
824syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100825
Doug Kearns262e25e2024-06-14 20:16:35 +0200826" Sleep: {{{2
827" =====
828syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
829syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
830syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
831
h-east9b53c052024-02-13 21:09:22 +0100832" Syntax: {{{2
833"=======
834syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
835syn 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
836syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
837
838if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
839 syn match vimSynError contained "\i\+"
840 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
841endif
842syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
843syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
844syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
845if has("conceal")
846 " no whitespace allowed after '='
847 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
848 syn match vimSynCcharValue contained "\S"
849endif
850
dkearns04e53632024-04-11 06:18:37 +1000851syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100852syn cluster vimFuncBodyList add=vimSyntax
853
854" Syntax: case {{{2
855syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
856if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
857 syn match vimSynCaseError contained "\i\+"
858endif
859syn keyword vimSynCase contained ignore match
860
861" Syntax: clear {{{2
862syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
863
864" Syntax: cluster {{{2
865syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
866syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
867syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
868syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100869
870" Syntax: foldlevel {{{2
871syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
872if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
873 syn match vimSynFoldMethodError contained "\i\+"
874endif
875syn keyword vimSynFoldMethod contained start minimum
876
877" Syntax: iskeyword {{{2
878syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
879syn match vimIskList contained '\S\+' contains=vimIskSep
880syn match vimIskSep contained ','
881
882" Syntax: include {{{2
883syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100884
885" Syntax: keyword {{{2
886syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
887syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
888syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
889syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100890
891" Syntax: match {{{2
892syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
893syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
894syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
895syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100896
897" Syntax: off and on {{{2
898syn keyword vimSynType contained enable list manual off on reset
899
900" Syntax: region {{{2
901syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
902syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
903syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
904syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
905syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
906syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
907syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
908syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
909syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
910syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
911syn match vimSynPatMod contained "lc=\d\+"
912syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
913syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
914syn match vimSynNotPatRange contained "\\\\\|\\\["
915syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100916
917" Syntax: sync {{{2
918" ============
919syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
920if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
921 syn match vimSyncError contained "\i\+"
922endif
923syn keyword vimSyncC contained ccomment clear fromstart
924syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
925syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
926syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
927syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
928syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
929syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
930syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
931syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
932syn keyword vimSyncNone contained NONE
933
934" Additional IsCommand: here by reasons of precedence {{{2
935" ====================
936syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
937
938" Highlighting: {{{2
939" ============
dkearns04e53632024-04-11 06:18:37 +1000940syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100941if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
942 syn match vimHiCtermError contained "\D\i*"
943endif
944syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100945syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100946
947syn match vimHiGroup contained "\i\+"
948syn case ignore
949syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
950syn keyword vimFgBgAttrib contained none bg background fg foreground
951syn case match
952syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
953syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
954syn case ignore
955syn 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
956syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
957
958syn case match
959syn match vimHiFontname contained "[a-zA-Z\-*]\+"
960syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
961syn match vimHiGuiRgb contained "#\x\{6}"
962
963" Highlighting: hi group key=arg ... {{{2
964syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100965syn 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 +0100966if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
967 syn match vimHiKeyError contained "\i\+="he=e-1
968endif
969syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100970syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100971syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
972syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
973syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
974syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
975syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
976syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
977syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
978syn match vimHiTermcap contained "\S\+" contains=vimNotation
979syn match vimHiNmbr contained '\d\+'
980
981" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100982syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100983
984" Highlight: link {{{2
985" see tst24 (hi def vs hi) (Jul 06, 2018)
986"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 +1100987" TODO: simplify and allow line continuations --djk
988syn 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 +0100989
990" Control Characters: {{{2
991" ==================
992syn match vimCtrlChar "[- -]"
993
994" Beginners - Patterns that involve ^ {{{2
995" =========
Doug Kearns35699f12024-09-19 19:51:59 +0200996Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
997VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200998
h-east9b53c052024-02-13 21:09:22 +0100999syn 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 +10001000syn 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 +10001001
dkearnsae321b52024-06-15 23:06:17 +10001002" allowed anywhere in the file
1003if !s:vim9script
1004 syn match vimShebangError "^\s*\zs#!.*" display
1005endif
1006syn match vimShebang "\%^#!.*" display
1007
h-east9b53c052024-02-13 21:09:22 +01001008syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +10001009syn match vimContinueComment '^\s*\zs["#]\\ .*'
Doug Kearns818c6412024-10-06 17:00:48 +02001010syn match vim9ContinueComment "^\s*\zs#\\ .*"
1011syn cluster vimContinue contains=vimContinue,vimContinueComment
1012syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
1013
h-east9b53c052024-02-13 21:09:22 +01001014syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
1015syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +10001016syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +01001017
1018" Searches And Globals: {{{2
1019" ====================
1020syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
1021syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +11001022syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
1023syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +01001024
dkearns04e53632024-04-11 06:18:37 +10001025" Vim9 Script Regions: {{{2
1026" ==================
1027
1028if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +02001029 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
1030 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +10001031
Doug Kearnsce064932024-04-13 18:24:01 +02001032 syn keyword vim9Vim9ScriptArg noclear contained
1033 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +10001034endif
1035
h-east9b53c052024-02-13 21:09:22 +01001036" Embedded Scripts: {{{2
1037" ================
1038" perl,ruby : Benoit Cerrina
1039" python,tcl : Johannes Zellner
1040" mzscheme, lua : Charles Campbell
1041
1042" Allows users to specify the type of embedded script highlighting
1043" they want: (perl/python/ruby/tcl support)
1044" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +02001045" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
1046" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
1047" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
1048" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
1049" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
1050" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +01001051if !exists("g:vimsyn_embed")
1052 let g:vimsyn_embed= "lmpPr"
1053endif
1054
1055" [-- lua --] {{{3
1056let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
1057if !filereadable(s:luapath)
1058 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
1059 if filereadable(fnameescape(s:luapath))
1060 let s:luapath= fnameescape(s:luapath)
1061 break
1062 endif
1063 endfor
1064endif
1065if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
1066 unlet! b:current_syntax
1067 syn cluster vimFuncBodyList add=vimLuaRegion
1068 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +02001069 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
1070 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
1071 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
1072 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +01001073 syn cluster vimFuncBodyList add=vimLuaRegion
1074else
Ken Takata95e90782024-08-22 21:29:39 +02001075 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1076 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
1077 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1078 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001079endif
1080unlet s:luapath
1081
1082" [-- perl --] {{{3
1083let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
1084if !filereadable(s:perlpath)
1085 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
1086 if filereadable(fnameescape(s:perlpath))
1087 let s:perlpath= fnameescape(s:perlpath)
1088 break
1089 endif
1090 endfor
1091endif
1092if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
1093 unlet! b:current_syntax
1094 syn cluster vimFuncBodyList add=vimPerlRegion
1095 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +02001096 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
1097 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
1098 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
1099 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +01001100 syn cluster vimFuncBodyList add=vimPerlRegion
1101else
Ken Takata95e90782024-08-22 21:29:39 +02001102 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1103 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1104 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1105 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001106endif
1107unlet s:perlpath
1108
1109" [-- ruby --] {{{3
1110let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
1111if !filereadable(s:rubypath)
1112 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
1113 if filereadable(fnameescape(s:rubypath))
1114 let s:rubypath= fnameescape(s:rubypath)
1115 break
1116 endif
1117 endfor
1118endif
1119if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
1120 syn cluster vimFuncBodyList add=vimRubyRegion
1121 unlet! b:current_syntax
1122 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +02001123 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
1124 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
1125 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
1126 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +01001127 syn cluster vimFuncBodyList add=vimRubyRegion
1128else
Ken Takata95e90782024-08-22 21:29:39 +02001129 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1130 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
1131 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1132 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001133endif
1134unlet s:rubypath
1135
1136" [-- python --] {{{3
1137let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1138if !filereadable(s:pythonpath)
1139 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1140 if filereadable(fnameescape(s:pythonpath))
1141 let s:pythonpath= fnameescape(s:pythonpath)
1142 break
1143 endif
1144 endfor
1145endif
1146if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1147 unlet! b:current_syntax
1148 syn cluster vimFuncBodyList add=vimPythonRegion
1149 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001150 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1151 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1152 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1153 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1154 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1155 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001156 syn cluster vimFuncBodyList add=vimPythonRegion
1157else
Ken Takata95e90782024-08-22 21:29:39 +02001158 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1159 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1160 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1161 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001162endif
1163unlet s:pythonpath
1164
1165" [-- tcl --] {{{3
1166if has("win32") || has("win95") || has("win64") || has("win16")
1167 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1168 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1169else
1170 let s:trytcl= 1
1171endif
1172if s:trytcl
1173 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1174 if !filereadable(s:tclpath)
1175 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1176 if filereadable(fnameescape(s:tclpath))
1177 let s:tclpath= fnameescape(s:tclpath)
1178 break
1179 endif
1180 endfor
1181 endif
1182 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1183 unlet! b:current_syntax
1184 syn cluster vimFuncBodyList add=vimTclRegion
1185 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001186 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1187 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1188 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1189 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001190 syn cluster vimFuncBodyList add=vimTclScript
1191 else
Ken Takata95e90782024-08-22 21:29:39 +02001192 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1193 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1194 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1195 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001196 endif
1197 unlet s:tclpath
1198else
Ken Takata95e90782024-08-22 21:29:39 +02001199 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1200 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1201 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1202 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001203endif
1204unlet s:trytcl
1205
1206" [-- mzscheme --] {{{3
1207let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1208if !filereadable(s:mzschemepath)
1209 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1210 if filereadable(fnameescape(s:mzschemepath))
1211 let s:mzschemepath= fnameescape(s:mzschemepath)
1212 break
1213 endif
1214 endfor
1215endif
1216if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1217 unlet! b:current_syntax
1218 let s:iskKeep= &isk
1219 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1220 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1221 let &isk= s:iskKeep
1222 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001223 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1224 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1225 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1226 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001227 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1228else
Ken Takata95e90782024-08-22 21:29:39 +02001229 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1230 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1231 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1232 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001233endif
1234unlet s:mzschemepath
1235
1236" Synchronize (speed) {{{2
1237"============
1238if exists("g:vimsyn_minlines")
1239 exe "syn sync minlines=".g:vimsyn_minlines
1240endif
1241exe "syn sync maxlines=".s:vimsyn_maxlines
1242syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001243syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001244syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1245
1246" ====================
1247" Highlighting Settings {{{2
1248" ====================
1249
1250if !exists("skip_vim_syntax_inits")
1251 if !exists("g:vimsyn_noerror")
1252 hi def link vimBehaveError vimError
1253 hi def link vimCollClassErr vimError
1254 hi def link vimErrSetting vimError
1255 hi def link vimEmbedError vimError
1256 hi def link vimFTError vimError
1257 hi def link vimFunctionError vimError
1258 hi def link vimFunc vimError
1259 hi def link vimHiAttribList vimError
1260 hi def link vimHiCtermError vimError
1261 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001262 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001263 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001264 hi def link vimSubstFlagErr vimError
1265 hi def link vimSynCaseError vimError
1266 hi def link vimSynFoldMethodError vimError
1267 hi def link vimBufnrWarn vimWarn
Doug Kearns818c6412024-10-06 17:00:48 +02001268
1269 hi def link vim9TypeAliasError vimError
h-east9b53c052024-02-13 21:09:22 +01001270 endif
1271
1272 hi def link vimAbb vimCommand
1273 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001274 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001275 hi def link vimAugroupError vimError
1276 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001277 hi def link vimAutoCmd vimCommand
Doug Kearns1718e7d2025-01-08 18:20:47 +01001278 hi def link vimAutoCmdBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001279 hi def link vimAutoEvent Type
1280 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001281 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001282 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001283 hi def link vimBehaveModel vimBehave
1284 hi def link vimBehave vimCommand
1285 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001286 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001287 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001288 hi def link vimCmplxRepeat SpecialChar
1289 hi def link vimCommand Statement
1290 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001291 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001292 hi def link vimCommentString vimString
1293 hi def link vimCommentTitle PreProc
1294 hi def link vimCondHL vimCommand
1295 hi def link vimConst vimCommand
1296 hi def link vimContinue Special
1297 hi def link vimContinueComment vimComment
1298 hi def link vimCtrlChar SpecialChar
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001299 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001300 hi def link vimDefKey vimCommand
1301 hi def link vimDefParam vimVar
Doug Kearns3c07eb02024-09-02 10:03:37 +02001302 hi def link vimDelcommand vimCommand
1303 hi def link vimDelcommandAttr vimUserCmdAttr
dkearnsb1427b42024-02-28 05:59:30 +11001304 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001305 hi def link vimEchohlNone vimGroup
1306 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001307 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001308 hi def link vimEndfunction vimCommand
1309 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001310 hi def link vimEnvvar PreProc
1311 hi def link vimError Error
1312 hi def link vimEscape Special
1313 hi def link vimFBVar vimVar
1314 hi def link vimFgBgAttrib vimHiAttrib
1315 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001316 hi def link vimFor vimCommand
1317 hi def link vimFTCmd vimCommand
1318 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001319 hi def link vimFuncBang vimBang
1320 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001321 hi def link vimFuncKey vimCommand
1322 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001323 hi def link vimFuncMod Special
1324 hi def link vimFuncParam vimVar
1325 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001326 hi def link vimFuncSID Special
1327 hi def link vimFuncVar Identifier
1328 hi def link vimGroupAdd vimSynOption
1329 hi def link vimGroupName vimGroup
1330 hi def link vimGroupRem vimSynOption
1331 hi def link vimGroupSpecial Special
1332 hi def link vimGroup Type
1333 hi def link vimHiAttrib PreProc
1334 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001335 hi def link vimHiClear Type
1336 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001337 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001338 hi def link vimHiCtermfont vimHiTerm
1339 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001340 hi def link vimHiCTerm vimHiTerm
1341 hi def link vimHighlight vimCommand
1342 hi def link vimHiGroup vimGroupName
1343 hi def link vimHiGuiFgBg vimHiTerm
1344 hi def link vimHiGuiFont vimHiTerm
1345 hi def link vimHiGuiRgb vimNumber
1346 hi def link vimHiGui vimHiTerm
1347 hi def link vimHiNmbr Number
1348 hi def link vimHiStartStop vimHiTerm
1349 hi def link vimHiTerm Type
1350 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001351 hi def link vimInsert vimString
1352 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001353 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001354 hi def link vimKeymapLineComment vimComment
1355 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001356 hi def link vimLet vimCommand
1357 hi def link vimLetHereDoc vimString
1358 hi def link vimLetHereDocStart Special
1359 hi def link vimLetHereDocStop Special
1360 hi def link vimLetRegister Special
1361 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001362 hi def link vimMapBang vimBang
1363 hi def link vimMapModKey vimFuncSID
1364 hi def link vimMapMod vimBracket
1365 hi def link vimMap vimCommand
1366 hi def link vimMark Number
1367 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001368 hi def link vimMatch vimCommand
1369 hi def link vimMatchGroup vimGroup
1370 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001371 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001372 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001373 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001374 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001375 hi def link vimMenu vimCommand
1376 hi def link vimMenuNotation vimNotation
1377 hi def link vimMenuPriority Number
1378 hi def link vimMenuStatus Special
1379 hi def link vimMenutranslateComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001380 hi def link vim9MethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001381 hi def link vimMtchComment vimComment
Doug Kearnsbbe52522024-11-09 19:11:25 +01001382 hi def link vimNormal vimCommand
h-east9b53c052024-02-13 21:09:22 +01001383 hi def link vimNotation Special
1384 hi def link vimNotFunc vimCommand
1385 hi def link vimNotPatSep vimString
1386 hi def link vimNumber Number
1387 hi def link vimOperError Error
1388 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001389 hi def link vimOption PreProc
1390 hi def link vimParenSep Delimiter
1391 hi def link vimPatSepErr vimError
1392 hi def link vimPatSepR vimPatSep
1393 hi def link vimPatSep SpecialChar
1394 hi def link vimPatSepZone vimString
1395 hi def link vimPatSepZ vimPatSep
1396 hi def link vimPattern Type
1397 hi def link vimPlainMark vimMark
1398 hi def link vimPlainRegister vimRegister
Doug Kearns695522d2025-01-10 20:02:17 +01001399 hi def link vimQuoteEscape vimEscape
h-east9b53c052024-02-13 21:09:22 +01001400 hi def link vimRegister SpecialChar
1401 hi def link vimScriptDelim Comment
1402 hi def link vimSearchDelim Statement
1403 hi def link vimSearch vimString
1404 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001405 hi def link vimSet vimCommand
1406 hi def link vimSetAll vimOption
1407 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001408 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001409 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001410 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001411 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001412 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001413 hi def link vimSleep vimCommand
1414 hi def link vimSleepArg Constant
1415 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001416 hi def link vimSpecFile Identifier
1417 hi def link vimSpecFileMod vimSpecFile
1418 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001419 hi def link vimStringCont vimString
1420 hi def link vimString String
1421 hi def link vimStringEnd vimString
1422 hi def link vimStringInterpolationBrace vimEscape
1423 hi def link vimSubst1 vimSubst
1424 hi def link vimSubstDelim Delimiter
1425 hi def link vimSubstFlags Special
1426 hi def link vimSubstSubstr SpecialChar
1427 hi def link vimSubstTwoBS vimString
1428 hi def link vimSubst vimCommand
1429 hi def link vimSynCaseError Error
1430 hi def link vimSynCase Type
1431 hi def link vimSyncC Type
1432 hi def link vimSyncError Error
1433 hi def link vimSyncGroupName vimGroupName
1434 hi def link vimSyncGroup vimGroupName
1435 hi def link vimSyncKey Type
1436 hi def link vimSyncNone Type
1437 hi def link vimSynContains vimSynOption
1438 hi def link vimSynError Error
1439 hi def link vimSynFoldMethodError Error
1440 hi def link vimSynFoldMethod Type
1441 hi def link vimSynKeyContainedin vimSynContains
1442 hi def link vimSynKeyOpt vimSynOption
1443 hi def link vimSynCchar vimSynOption
1444 hi def link vimSynCcharValue Character
1445 hi def link vimSynMtchGrp vimSynOption
1446 hi def link vimSynMtchOpt vimSynOption
1447 hi def link vimSynNextgroup vimSynOption
1448 hi def link vimSynNotPatRange vimSynRegPat
1449 hi def link vimSynOption Special
1450 hi def link vimSynPatRange vimString
1451 hi def link vimSynRegOpt vimSynOption
1452 hi def link vimSynRegPat vimString
1453 hi def link vimSynReg Type
1454 hi def link vimSyntax vimCommand
1455 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001456 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001457 hi def link vimTodo Todo
1458 hi def link vimType Type
1459 hi def link vimUnlet vimCommand
1460 hi def link vimUnletBang vimBang
1461 hi def link vimUnmap vimMap
Doug Kearns3c07eb02024-09-02 10:03:37 +02001462 hi def link vimUserCmdAttrAddr vimSpecial
1463 hi def link vimUserCmdAttrCmplt vimSpecial
1464 hi def link vimUserCmdAttrNargs vimSpecial
1465 hi def link vimUserCmdAttrRange vimSpecial
1466 hi def link vimUserCmdAttrKey vimUserCmdAttr
1467 hi def link vimUserCmdAttr Special
1468 hi def link vimUserCmdAttrError Error
h-east9b53c052024-02-13 21:09:22 +01001469 hi def link vimUserCmdError Error
Doug Kearns3c07eb02024-09-02 10:03:37 +02001470 hi def link vimUserCmdKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001471 hi def link vimUserFunc Normal
1472 hi def link vimVar Identifier
1473 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001474
Doug Kearns818c6412024-10-06 17:00:48 +02001475 hi def link vim9Abstract vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001476 hi def link vim9Boolean Boolean
Doug Kearns818c6412024-10-06 17:00:48 +02001477 hi def link vim9Class vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001478 hi def link vim9Comment Comment
1479 hi def link vim9CommentError vimError
1480 hi def link vim9CommentTitle PreProc
1481 hi def link vim9Const vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001482 hi def link vim9ContinueComment vimContinueComment
1483 hi def link vim9Enum vimCommand
1484 hi def link vim9Export vimCommand
1485 hi def link vim9Extends Keyword
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001486 hi def link vim9Final vimCommand
1487 hi def link vim9For vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001488 hi def link vim9Implements Keyword
1489 hi def link vim9AbstractDef vimCommand
1490 hi def link vim9Interface vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001491 hi def link vim9LineComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001492 hi def link vim9MethodDef vimCommand
1493 hi def link vim9MethodNameError vimFunctionError
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001494 hi def link vim9Null Constant
Doug Kearns818c6412024-10-06 17:00:48 +02001495 hi def link vim9Public vimCommand
1496 hi def link vim9Static vimCommand
1497 hi def link vim9Super Identifier
1498 hi def link vim9This Identifier
1499 hi def link vim9Type vimCommand
1500 hi def link vim9TypeEquals vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001501 hi def link vim9Variable vimVar
Doug Kearns818c6412024-10-06 17:00:48 +02001502 hi def link vim9Var vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001503 hi def link vim9Vim9ScriptArg Special
Doug Kearns818c6412024-10-06 17:00:48 +02001504 hi def link vim9Vim9Script vimCommand
h-east9b53c052024-02-13 21:09:22 +01001505endif
1506
1507" Current Syntax Variable: {{{2
1508let b:current_syntax = "vim"
1509
1510" ---------------------------------------------------------------------
1511" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001512delc Vim9
1513delc VimL
h-east9b53c052024-02-13 21:09:22 +01001514delc VimFolda
Doug Kearns818c6412024-10-06 17:00:48 +02001515delc VimFoldc
1516delc VimFolde
h-east9b53c052024-02-13 21:09:22 +01001517delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001518delc VimFoldh
1519delc VimFoldH
Doug Kearns818c6412024-10-06 17:00:48 +02001520delc VimFoldi
h-east9b53c052024-02-13 21:09:22 +01001521delc VimFoldl
1522delc VimFoldm
1523delc VimFoldp
1524delc VimFoldP
1525delc VimFoldr
1526delc VimFoldt
1527let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001528unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001529" vim:ts=18 fdm=marker ft=vim