blob: 8029073586366c62d09f64d2a9557824d94cae4a [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 Kearnsc273f1a2025-01-20 21:53:01 +01005" Last Change: 2025 Jan 20
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
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100286syn match vimOper "?" skipwhite nextgroup=@vimExprList
287" distinguish ternary : from ex-colon
288syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite nextgroup=@vimExprList
289syn match vimOper "??" skipwhite nextgroup=@vimExprList
Doug Kearns8dec6c22025-01-19 14:02:06 +0100290syn match vimOper "=" skipwhite nextgroup=vimString,vimSpecFile
291syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite nextgroup=vimString,vimSpecFile
292syn match vimOper "\<is\%(not\)\=\>" skipwhite nextgroup=vimString,vimSpecFile
293syn match vimOper "\<is\%(not\)\=[?#]" skipwhite nextgroup=vimString,vimSpecFile
dkearns76d62982024-03-23 05:55:25 +1100294syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
h-east9b53c052024-02-13 21:09:22 +0100295syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
296if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
297 syn match vimOperError ")"
298endif
299
dkearns4ba70ca2024-04-15 04:32:56 +1000300" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
h-east9b53c052024-02-13 21:09:22 +0100301" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100302syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
303syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
dkearns4ba70ca2024-04-15 04:32:56 +1000304
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100305syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
306syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet,vimSearch
307syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9Search
dkearns35e6f4c2024-03-22 06:41:10 +1100308
309syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
310syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
311syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
312
313syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
Doug Kearns818c6412024-10-06 17:00:48 +0200314syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100315
Doug Kearns35699f12024-09-19 19:51:59 +0200316syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
317syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
dkearns35e6f4c2024-03-22 06:41:10 +1100318
319syn match vimFuncBang contained "!"
320syn match vimFuncSID contained "\c<sid>"
321syn match vimFuncSID contained "\<[sg]:"
322syn keyword vimFuncKey contained fu[nction]
323syn keyword vimDefKey contained def
324
Doug Kearns9b67a2e2024-12-26 10:13:45 +0100325syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,vimOperParen,@vimContinue
326syn 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 +1100327syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
328syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
329
Doug Kearns35699f12024-09-19 19:51:59 +0200330syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
331syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100332
Doug Kearns35699f12024-09-19 19:51:59 +0200333syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
334syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100335
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200336syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
337syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
h-east9b53c052024-02-13 21:09:22 +0100338
339if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
Doug Kearns818c6412024-10-06 17:00:48 +0200340 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
341 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 +0100342endif
dkearns35e6f4c2024-03-22 06:41:10 +1100343
344syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
h-east9b53c052024-02-13 21:09:22 +0100345syn match vimFuncBlank contained "\s\+"
346
dkearns35e6f4c2024-03-22 06:41:10 +1100347" Types: {{{2
348" =====
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200349
Doug Kearns35699f12024-09-19 19:51:59 +0200350syn 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 +0200351syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
dkearns35e6f4c2024-03-22 06:41:10 +1100352
353syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
354syn keyword vimType contained any blob bool channel float job number string void
355syn match vimType contained "\<func\>"
356syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
357syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
358syn match vimUserType contained "\<\u\w*\>"
359
360syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100361
Doug Kearns818c6412024-10-06 17:00:48 +0200362" Classes, Enums And Interfaces: {{{2
363" =============================
364
365if s:vim9script
366 " Methods {{{3
367 syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName
368 syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams contains=@vim9MethodName
369 syn region vim9MethodDefParams contained
370 \ matchgroup=Delimiter start="(" end=")"
371 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
372 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
373 syn region vim9MethodDefReturnType contained
374 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
375 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vimDefComment,vimCommentError
376 \ contains=vimTypeSep
377 \ transparent
378 syn region vim9MethodDefBody contained
379 \ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
380 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
381 \ contains=@vim9MethodDefBodyList
382
383 syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
384
385 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
386 syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
387 endif
388 syn match vim9MethodName contained "\<new\i*\>"
389 syn keyword vim9MethodName contained empty len string
390
391 syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
392
393 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
394 syn region vim9MethodDefFold contained start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
395 syn region vim9MethodDefFold contained start="^\s*:\=def\s\+new\i*(" end="^\s*:\=enddef\>" contains=vim9MethodDef fold keepend extend transparent
396 endif
397
398 syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
399
400 " Classes {{{3
401 syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
402
403 syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
404 syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
405 syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
406 syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
407 syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
408 syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
409 syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
410 syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
411 syn keyword vim9Public contained public
412 syn keyword vim9Static contained static
413 syn keyword vim9This contained this
414 syn keyword vim9Super contained super
415
416 VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent
417
418 " Enums {{{3
419 syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,vim9Implements,@vim9MethodDef,vim9Const,vim9Final,vim9Var
420
421 syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
422 syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
423
424 VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent
425
426 " Interfaces {{{3
427 " TODO: limit to decl only - no init values
428 syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
429
430 syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
431 syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
432
433 syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
434 syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams contains=@vim9MethodName
435 syn region vim9AbstractDefParams contained
436 \ matchgroup=Delimiter start="(" end=")"
437 \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
438 \ contains=vimDefParam,vim9Comment,vimFuncParamEquals
439 syn region vim9AbstractDefReturnType contained
440 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
441 \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
442 \ contains=vimTypeSep
443 \ transparent
444
445 VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent
446
447 " type {{{3
448 syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
449 syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
450 syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
451 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
452 syn match vim9TypeAliasError contained "\<\U\w*"
453 endif
454endif
455
dkearns04e53632024-04-11 06:18:37 +1000456" Keymaps: {{{2
h-east9b53c052024-02-13 21:09:22 +0100457" =======
458
dkearns04e53632024-04-11 06:18:37 +1000459syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100460syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
461syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
462syn match vimKeymapTailComment "\S.*" contained
dkearns04e53632024-04-11 06:18:37 +1000463
464" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
465if s:vim9script
466 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
467else
468 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
469endif
470syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100471
Doug Kearns7866d542024-08-23 18:37:55 +0200472syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
h-east9b53c052024-02-13 21:09:22 +0100473
474" Special Filenames, Modifiers, Extension Removal: {{{2
475" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100476syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
477syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
478syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
479syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
480syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
481syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100482syn match vimSpecFileMod "\(:[phtre]\)\+" contained
483
484" User-Specified Commands: {{{2
485" =======================
dkearns04e53632024-04-11 06:18:37 +1000486syn 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 +0200487syn keyword vimUserCmdKey contained com[mand]
488syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
489syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
490syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
491syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
492syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
493syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
494syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
495syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
496syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
497syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
498syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
499syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
500syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
501syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
502syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
503
504syn match vimUserCmdAttrNargs contained "[01*?+]"
505syn match vimUserCmdAttrRange contained "%"
506
h-east9b53c052024-02-13 21:09:22 +0100507if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
508 syn match vimUserCmdError contained "\S\+\>"
509endif
h-east9b53c052024-02-13 21:09:22 +0100510
Doug Kearns3c07eb02024-09-02 10:03:37 +0200511syn case ignore
512syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
513" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
514syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
515syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
516" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
517syn match vimUserCmdAttrAddr contained "?"
h-east9b53c052024-02-13 21:09:22 +0100518syn case match
h-east9b53c052024-02-13 21:09:22 +0100519
dkearns04e53632024-04-11 06:18:37 +1000520syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
521
Doug Kearns3c07eb02024-09-02 10:03:37 +0200522syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
523syn match vimDelcommandAttr contained "-buffer\>"
524
h-east9b53c052024-02-13 21:09:22 +0100525" Lower Priority Comments: after some vim commands... {{{2
526" =======================
dkearns959c3c82024-06-12 04:18:08 +1000527if get(g:, "vimsyn_comment_strings", 1)
Doug Kearns35699f12024-09-19 19:51:59 +0200528 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
dkearns959c3c82024-06-12 04:18:08 +1000529endif
dkearns04e53632024-04-11 06:18:37 +1000530
531if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000532 syn cluster vimComment contains=vim9Comment
533else
dkearns04e53632024-04-11 06:18:37 +1000534 syn cluster vimComment contains=vimComment
535endif
h-east9b53c052024-02-13 21:09:22 +0100536
Doug Kearns35699f12024-09-19 19:51:59 +0200537VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
538VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
539VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200540" Vim9 comments - TODO: might be highlighted while they don't work
Doug Kearns35699f12024-09-19 19:51:59 +0200541Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
542Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
543Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200544" Vim9 comment inside expression
Doug Kearns35699f12024-09-19 19:51:59 +0200545Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
546Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
547Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200548
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200549syn match vim9CommentError contained "#.*"
550syn match vimCommentError contained +".*+
551
h-east9b53c052024-02-13 21:09:22 +0100552" Environment Variables: {{{2
553" =====================
554syn match vimEnvvar "\$\I\i*"
555syn match vimEnvvar "\${\I\i*}"
556
557" In-String Specials: {{{2
558" Try to catch strings, if nothing else matches (therefore it must precede the others!)
559" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
560syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
561syn match vimPatSepErr contained "\\)"
562syn match vimPatSep contained "\\|"
563syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
564syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
565syn match vimNotPatSep contained "\\\\"
566syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
Doug Kearns695522d2025-01-10 20:02:17 +0100567syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z>\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
568syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z>\\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
h-east9b53c052024-02-13 21:09:22 +0100569"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
570syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
571syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
Doug Kearns695522d2025-01-10 20:02:17 +0100572
h-east9b53c052024-02-13 21:09:22 +0100573syn match vimEscape contained "\\."
574" syn match vimEscape contained +\\[befnrt\"]+
575syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
576syn match vimEscape contained "\\<" contains=vimNotation
577syn match vimEscape contained "\\<\*[^>]*>\=>"
Doug Kearns695522d2025-01-10 20:02:17 +0100578syn match vimQuoteEscape contained "''"
h-east9b53c052024-02-13 21:09:22 +0100579
Doug Kearns695522d2025-01-10 20:02:17 +0100580syn region vimString oneline matchgroup=vimString start=+$'+ skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation extend
581syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
dkearnsb1427b42024-02-28 05:59:30 +1100582syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
583syn match vimStringInterpolationBrace contained "{{"
584syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200585syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100586
587" Substitutions: {{{2
588" =============
589syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
590syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
591syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200592syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
593syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
594syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
595syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100596" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
597" : # is allowed but "not recommended" (see :h pattern-delimiter)
598syn 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
599syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
600syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
601syn match vimCollClassErr contained "\[:.\{-\}:\]"
602syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
603syn match vimSubstSubstr contained "\\z\=\d"
604syn match vimSubstTwoBS contained "\\\\"
605syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
606syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100607
Doug Kearns92f4e912024-06-05 19:45:43 +0200608" Vi compatibility
609syn match vimSubstDelim contained "\\"
610syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
611
h-east9b53c052024-02-13 21:09:22 +0100612" 'String': {{{2
613syn match vimString "[^(,]'[^']\{-}\zs'"
614
615" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100616syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
Doug Kearnsd8176092024-08-31 16:57:32 +0200617syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
618syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
dkearns2c51e152024-02-27 07:10:18 +1100619syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
620syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
621syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100622syn match vimPlainMark contained "'[a-zA-Z0-9]"
623syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
624
625syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
626syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
627syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
628syn match vimRegister '@"'
629syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
630syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
631
632syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
633syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
634
635syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
636syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
637syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
638
639" Complex Repeats: (:h complex-repeat) {{{2
640" ===============
641syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
642syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
643
644" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200645syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
646syn 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
647syn 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
648syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
649syn keyword vimSetAll contained all nextgroup=vimSetMod
650syn keyword vimSetTermcap contained termcap
651syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100652syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200653syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100654
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200655" Variable Declarations: {{{2
656" =====================
657VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
658VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
659syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100660
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200661VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
h-east9b53c052024-02-13 21:09:22 +0100662syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
663syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
664
Doug Kearns7884cc72024-08-23 18:01:35 +0200665VimFoldh 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 +0200666VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200667VimFoldh 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 +0200668VimFoldh 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 +0200669
670Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
671Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
672Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
673
Doug Kearns818c6412024-10-06 17:00:48 +0200674syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc,vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200675syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100676
677" For: {{{2
678" ===
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200679if s:vim9script
680 syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
681else
682 syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
683endif
dkearns76d62982024-03-23 05:55:25 +1100684
h-east9b53c052024-02-13 21:09:22 +0100685" Abbreviations: {{{2
686" =============
687" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100688" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100689
690" Autocmd: {{{2
691" =======
Doug Kearns1718e7d2025-01-08 18:20:47 +0100692syn match vimAutoCmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoEventList
693syn match vimAutoEventList contained "\%(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
h-east9b53c052024-02-13 21:09:22 +0100694syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000695syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
Doug Kearns1718e7d2025-01-08 18:20:47 +0100696syn keyword vimAutoCmd au[tocmd] skipwhite nextgroup=vimAutoCmdBang,vimAutoEventList
697syn keyword vimAutoCmd do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000698syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
699syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100700
701" Echo And Execute: -- prefer strings! {{{2
702" ================
dkearns61887b32024-03-15 23:45:48 +1100703" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100704
dkearns61887b32024-03-15 23:45:48 +1100705syn region vimEcho
706 \ matchgroup=vimCommand
707 \ start="\<ec\%[ho]\>"
708 \ start="\<echoe\%[rr]\>"
709 \ start="\<echom\%[sg]\>"
710 \ start="\<echoc\%[onsole]\>"
711 \ start="\<echon\>"
712 \ start="\<echow\%[indow]\>"
713 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
714 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
715
716syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100717syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100718syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100719syn case match
720
dkearns35e6f4c2024-03-22 06:41:10 +1100721syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100722
723syn 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 +1100724
h-east9b53c052024-02-13 21:09:22 +0100725" Maps: {{{2
726" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200727" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
728syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
729syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100730" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200731syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
732" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
733syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
734
dkearns5d67aef2024-03-10 04:01:22 +1100735syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
736syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
737syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100738syn 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 +1100739syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
740" assume a continuation comment introduces the RHS
741syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100742syn case ignore
743syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
744syn case match
745
746" Menus: {{{2
747" =====
dkearns62b26042024-03-10 03:43:28 +1100748" NOTE: tail comments disallowed
749" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
750syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
751syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
752syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100753syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
754syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100755syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
756syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
757syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
758syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
759syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
760
761syn region vimMenutranslate
762 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
763 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
764 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
765 \ contains=@vimContinue,vimMenutranslateName keepend transparent
766" oneline is sufficient to match the current formatting in runtime/lang/*.vim
767syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
768syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100769
770" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
771" ======================
772syn case ignore
773syn 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
774
775syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
776syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
777syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
778syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
779syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
780syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
781syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
782
783syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
784syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
785syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
786syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
787syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
788syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
789
790syn match vimBracket contained "[\\<>]"
791syn case match
792
793" User Function Highlighting: {{{2
794" (following Gautam Iyer's suggestion)
795" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100796syn 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 +0200797syn 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 +1100798syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100799
Doug Kearns99984fc2024-07-18 20:45:19 +0200800syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
801
h-east9b53c052024-02-13 21:09:22 +0100802" User Command Highlighting: {{{2
803syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
804
805" Errors And Warnings: {{{2
806" ====================
807if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Doug Kearns818c6412024-10-06 17:00:48 +0200808 syn match vimFunctionError "\s\zs[a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100809 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
810 syn match vimElseIfErr "\<else\s\+if\>"
811 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
812endif
813
Doug Kearns4d427d42024-09-15 19:21:18 +0200814syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100815
Doug Kearnse85fdc72024-07-07 20:45:37 +0200816" Match: {{{2
817" =====
818syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
819syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
820syn case ignore
821syn keyword vimMatchNone contained none
822syn case match
823syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
824
Doug Kearnsbbe52522024-11-09 19:11:25 +0100825" Normal: {{{2
826" ======
827syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
828syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100829
Doug Kearns262e25e2024-06-14 20:16:35 +0200830" Sleep: {{{2
831" =====
832syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
833syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
834syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
835
h-east9b53c052024-02-13 21:09:22 +0100836" Syntax: {{{2
837"=======
838syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
839syn 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
840syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
841
842if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
843 syn match vimSynError contained "\i\+"
844 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
845endif
846syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
847syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
848syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
849if has("conceal")
850 " no whitespace allowed after '='
851 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
852 syn match vimSynCcharValue contained "\S"
853endif
854
dkearns04e53632024-04-11 06:18:37 +1000855syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100856syn cluster vimFuncBodyList add=vimSyntax
857
858" Syntax: case {{{2
859syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
860if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
861 syn match vimSynCaseError contained "\i\+"
862endif
863syn keyword vimSynCase contained ignore match
864
865" Syntax: clear {{{2
866syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
867
868" Syntax: cluster {{{2
869syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
870syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
871syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
872syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100873
874" Syntax: foldlevel {{{2
875syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
876if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
877 syn match vimSynFoldMethodError contained "\i\+"
878endif
879syn keyword vimSynFoldMethod contained start minimum
880
881" Syntax: iskeyword {{{2
882syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
883syn match vimIskList contained '\S\+' contains=vimIskSep
884syn match vimIskSep contained ','
885
886" Syntax: include {{{2
887syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100888
889" Syntax: keyword {{{2
890syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
891syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
892syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
893syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100894
895" Syntax: match {{{2
896syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
897syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
898syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
899syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100900
901" Syntax: off and on {{{2
902syn keyword vimSynType contained enable list manual off on reset
903
904" Syntax: region {{{2
905syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
906syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
907syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
908syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
909syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
910syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
911syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
912syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
913syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
914syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
915syn match vimSynPatMod contained "lc=\d\+"
916syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
917syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
918syn match vimSynNotPatRange contained "\\\\\|\\\["
919syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100920
921" Syntax: sync {{{2
922" ============
923syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
924if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
925 syn match vimSyncError contained "\i\+"
926endif
927syn keyword vimSyncC contained ccomment clear fromstart
928syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
929syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
930syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
931syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
932syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
933syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
934syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
935syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
936syn keyword vimSyncNone contained NONE
937
938" Additional IsCommand: here by reasons of precedence {{{2
939" ====================
940syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
941
942" Highlighting: {{{2
943" ============
dkearns04e53632024-04-11 06:18:37 +1000944syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100945if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
946 syn match vimHiCtermError contained "\D\i*"
947endif
948syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100949syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100950
951syn match vimHiGroup contained "\i\+"
952syn case ignore
953syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
954syn keyword vimFgBgAttrib contained none bg background fg foreground
955syn case match
956syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
957syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
958syn case ignore
959syn 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
960syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
961
962syn case match
963syn match vimHiFontname contained "[a-zA-Z\-*]\+"
964syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
965syn match vimHiGuiRgb contained "#\x\{6}"
966
967" Highlighting: hi group key=arg ... {{{2
968syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100969syn 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 +0100970if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
971 syn match vimHiKeyError contained "\i\+="he=e-1
972endif
973syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100974syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100975syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
976syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
977syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
978syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
979syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
980syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
981syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
982syn match vimHiTermcap contained "\S\+" contains=vimNotation
983syn match vimHiNmbr contained '\d\+'
984
985" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100986syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100987
988" Highlight: link {{{2
989" see tst24 (hi def vs hi) (Jul 06, 2018)
990"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 +1100991" TODO: simplify and allow line continuations --djk
992syn 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 +0100993
994" Control Characters: {{{2
995" ==================
996syn match vimCtrlChar "[- -]"
997
998" Beginners - Patterns that involve ^ {{{2
999" =========
Doug Kearns35699f12024-09-19 19:51:59 +02001000Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
1001VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001002
h-east9b53c052024-02-13 21:09:22 +01001003syn 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 +10001004syn 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 +10001005
dkearnsae321b52024-06-15 23:06:17 +10001006" allowed anywhere in the file
1007if !s:vim9script
1008 syn match vimShebangError "^\s*\zs#!.*" display
1009endif
1010syn match vimShebang "\%^#!.*" display
1011
h-east9b53c052024-02-13 21:09:22 +01001012syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +10001013syn match vimContinueComment '^\s*\zs["#]\\ .*'
Doug Kearns818c6412024-10-06 17:00:48 +02001014syn match vim9ContinueComment "^\s*\zs#\\ .*"
1015syn cluster vimContinue contains=vimContinue,vimContinueComment
1016syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
1017
h-east9b53c052024-02-13 21:09:22 +01001018syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
1019syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +10001020syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +01001021
1022" Searches And Globals: {{{2
1023" ====================
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001024VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
h-east9b53c052024-02-13 21:09:22 +01001025syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001026Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim
1027syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep
dkearns2c51e152024-02-27 07:10:18 +11001028syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
1029syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +01001030
dkearns04e53632024-04-11 06:18:37 +10001031" Vim9 Script Regions: {{{2
1032" ==================
1033
1034if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +02001035 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
1036 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +10001037
Doug Kearnsce064932024-04-13 18:24:01 +02001038 syn keyword vim9Vim9ScriptArg noclear contained
1039 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +10001040endif
1041
h-east9b53c052024-02-13 21:09:22 +01001042" Embedded Scripts: {{{2
1043" ================
1044" perl,ruby : Benoit Cerrina
1045" python,tcl : Johannes Zellner
1046" mzscheme, lua : Charles Campbell
1047
1048" Allows users to specify the type of embedded script highlighting
1049" they want: (perl/python/ruby/tcl support)
1050" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +02001051" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
1052" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
1053" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
1054" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
1055" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
1056" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +01001057if !exists("g:vimsyn_embed")
1058 let g:vimsyn_embed= "lmpPr"
1059endif
1060
1061" [-- lua --] {{{3
1062let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
1063if !filereadable(s:luapath)
1064 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
1065 if filereadable(fnameescape(s:luapath))
1066 let s:luapath= fnameescape(s:luapath)
1067 break
1068 endif
1069 endfor
1070endif
1071if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
1072 unlet! b:current_syntax
1073 syn cluster vimFuncBodyList add=vimLuaRegion
1074 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +02001075 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
1076 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
1077 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
1078 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +01001079 syn cluster vimFuncBodyList add=vimLuaRegion
1080else
Ken Takata95e90782024-08-22 21:29:39 +02001081 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1082 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
1083 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1084 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001085endif
1086unlet s:luapath
1087
1088" [-- perl --] {{{3
1089let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
1090if !filereadable(s:perlpath)
1091 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
1092 if filereadable(fnameescape(s:perlpath))
1093 let s:perlpath= fnameescape(s:perlpath)
1094 break
1095 endif
1096 endfor
1097endif
1098if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
1099 unlet! b:current_syntax
1100 syn cluster vimFuncBodyList add=vimPerlRegion
1101 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +02001102 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
1103 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
1104 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
1105 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +01001106 syn cluster vimFuncBodyList add=vimPerlRegion
1107else
Ken Takata95e90782024-08-22 21:29:39 +02001108 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1109 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1110 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1111 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001112endif
1113unlet s:perlpath
1114
1115" [-- ruby --] {{{3
1116let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
1117if !filereadable(s:rubypath)
1118 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
1119 if filereadable(fnameescape(s:rubypath))
1120 let s:rubypath= fnameescape(s:rubypath)
1121 break
1122 endif
1123 endfor
1124endif
1125if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
1126 syn cluster vimFuncBodyList add=vimRubyRegion
1127 unlet! b:current_syntax
1128 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +02001129 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
1130 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
1131 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
1132 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +01001133 syn cluster vimFuncBodyList add=vimRubyRegion
1134else
Ken Takata95e90782024-08-22 21:29:39 +02001135 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1136 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
1137 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1138 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001139endif
1140unlet s:rubypath
1141
1142" [-- python --] {{{3
1143let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1144if !filereadable(s:pythonpath)
1145 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1146 if filereadable(fnameescape(s:pythonpath))
1147 let s:pythonpath= fnameescape(s:pythonpath)
1148 break
1149 endif
1150 endfor
1151endif
1152if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1153 unlet! b:current_syntax
1154 syn cluster vimFuncBodyList add=vimPythonRegion
1155 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001156 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1157 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1158 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1159 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1160 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1161 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001162 syn cluster vimFuncBodyList add=vimPythonRegion
1163else
Ken Takata95e90782024-08-22 21:29:39 +02001164 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1165 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1166 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1167 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001168endif
1169unlet s:pythonpath
1170
1171" [-- tcl --] {{{3
1172if has("win32") || has("win95") || has("win64") || has("win16")
1173 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1174 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1175else
1176 let s:trytcl= 1
1177endif
1178if s:trytcl
1179 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1180 if !filereadable(s:tclpath)
1181 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1182 if filereadable(fnameescape(s:tclpath))
1183 let s:tclpath= fnameescape(s:tclpath)
1184 break
1185 endif
1186 endfor
1187 endif
1188 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1189 unlet! b:current_syntax
1190 syn cluster vimFuncBodyList add=vimTclRegion
1191 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001192 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1193 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1194 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1195 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001196 syn cluster vimFuncBodyList add=vimTclScript
1197 else
Ken Takata95e90782024-08-22 21:29:39 +02001198 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1199 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1200 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1201 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001202 endif
1203 unlet s:tclpath
1204else
Ken Takata95e90782024-08-22 21:29:39 +02001205 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1206 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1207 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1208 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001209endif
1210unlet s:trytcl
1211
1212" [-- mzscheme --] {{{3
1213let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1214if !filereadable(s:mzschemepath)
1215 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1216 if filereadable(fnameescape(s:mzschemepath))
1217 let s:mzschemepath= fnameescape(s:mzschemepath)
1218 break
1219 endif
1220 endfor
1221endif
1222if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1223 unlet! b:current_syntax
1224 let s:iskKeep= &isk
1225 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1226 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1227 let &isk= s:iskKeep
1228 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001229 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1230 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1231 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1232 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001233 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1234else
Ken Takata95e90782024-08-22 21:29:39 +02001235 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1236 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1237 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1238 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001239endif
1240unlet s:mzschemepath
1241
1242" Synchronize (speed) {{{2
1243"============
1244if exists("g:vimsyn_minlines")
1245 exe "syn sync minlines=".g:vimsyn_minlines
1246endif
1247exe "syn sync maxlines=".s:vimsyn_maxlines
1248syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001249syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001250syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1251
1252" ====================
1253" Highlighting Settings {{{2
1254" ====================
1255
1256if !exists("skip_vim_syntax_inits")
1257 if !exists("g:vimsyn_noerror")
1258 hi def link vimBehaveError vimError
1259 hi def link vimCollClassErr vimError
1260 hi def link vimErrSetting vimError
1261 hi def link vimEmbedError vimError
1262 hi def link vimFTError vimError
1263 hi def link vimFunctionError vimError
1264 hi def link vimFunc vimError
1265 hi def link vimHiAttribList vimError
1266 hi def link vimHiCtermError vimError
1267 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001268 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001269 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001270 hi def link vimSubstFlagErr vimError
1271 hi def link vimSynCaseError vimError
1272 hi def link vimSynFoldMethodError vimError
1273 hi def link vimBufnrWarn vimWarn
Doug Kearns818c6412024-10-06 17:00:48 +02001274
1275 hi def link vim9TypeAliasError vimError
h-east9b53c052024-02-13 21:09:22 +01001276 endif
1277
1278 hi def link vimAbb vimCommand
1279 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001280 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001281 hi def link vimAugroupError vimError
1282 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001283 hi def link vimAutoCmd vimCommand
Doug Kearns1718e7d2025-01-08 18:20:47 +01001284 hi def link vimAutoCmdBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001285 hi def link vimAutoEvent Type
1286 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001287 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001288 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001289 hi def link vimBehaveModel vimBehave
1290 hi def link vimBehave vimCommand
1291 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001292 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001293 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001294 hi def link vimCmplxRepeat SpecialChar
1295 hi def link vimCommand Statement
1296 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001297 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001298 hi def link vimCommentString vimString
1299 hi def link vimCommentTitle PreProc
1300 hi def link vimCondHL vimCommand
1301 hi def link vimConst vimCommand
1302 hi def link vimContinue Special
1303 hi def link vimContinueComment vimComment
1304 hi def link vimCtrlChar SpecialChar
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001305 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001306 hi def link vimDefKey vimCommand
1307 hi def link vimDefParam vimVar
Doug Kearns3c07eb02024-09-02 10:03:37 +02001308 hi def link vimDelcommand vimCommand
1309 hi def link vimDelcommandAttr vimUserCmdAttr
dkearnsb1427b42024-02-28 05:59:30 +11001310 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001311 hi def link vimEchohlNone vimGroup
1312 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001313 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001314 hi def link vimEndfunction vimCommand
1315 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001316 hi def link vimEnvvar PreProc
1317 hi def link vimError Error
1318 hi def link vimEscape Special
1319 hi def link vimFBVar vimVar
1320 hi def link vimFgBgAttrib vimHiAttrib
1321 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001322 hi def link vimFor vimCommand
1323 hi def link vimFTCmd vimCommand
1324 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001325 hi def link vimFuncBang vimBang
1326 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001327 hi def link vimFuncKey vimCommand
1328 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001329 hi def link vimFuncMod Special
1330 hi def link vimFuncParam vimVar
1331 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001332 hi def link vimFuncSID Special
1333 hi def link vimFuncVar Identifier
1334 hi def link vimGroupAdd vimSynOption
1335 hi def link vimGroupName vimGroup
1336 hi def link vimGroupRem vimSynOption
1337 hi def link vimGroupSpecial Special
1338 hi def link vimGroup Type
1339 hi def link vimHiAttrib PreProc
1340 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001341 hi def link vimHiClear Type
1342 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001343 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001344 hi def link vimHiCtermfont vimHiTerm
1345 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001346 hi def link vimHiCTerm vimHiTerm
1347 hi def link vimHighlight vimCommand
1348 hi def link vimHiGroup vimGroupName
1349 hi def link vimHiGuiFgBg vimHiTerm
1350 hi def link vimHiGuiFont vimHiTerm
1351 hi def link vimHiGuiRgb vimNumber
1352 hi def link vimHiGui vimHiTerm
1353 hi def link vimHiNmbr Number
1354 hi def link vimHiStartStop vimHiTerm
1355 hi def link vimHiTerm Type
1356 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001357 hi def link vimInsert vimString
1358 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001359 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001360 hi def link vimKeymapLineComment vimComment
1361 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001362 hi def link vimLet vimCommand
1363 hi def link vimLetHereDoc vimString
1364 hi def link vimLetHereDocStart Special
1365 hi def link vimLetHereDocStop Special
1366 hi def link vimLetRegister Special
1367 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001368 hi def link vimMapBang vimBang
1369 hi def link vimMapModKey vimFuncSID
1370 hi def link vimMapMod vimBracket
1371 hi def link vimMap vimCommand
1372 hi def link vimMark Number
1373 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001374 hi def link vimMatch vimCommand
1375 hi def link vimMatchGroup vimGroup
1376 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001377 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001378 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001379 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001380 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001381 hi def link vimMenu vimCommand
1382 hi def link vimMenuNotation vimNotation
1383 hi def link vimMenuPriority Number
1384 hi def link vimMenuStatus Special
1385 hi def link vimMenutranslateComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001386 hi def link vim9MethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001387 hi def link vimMtchComment vimComment
Doug Kearnsbbe52522024-11-09 19:11:25 +01001388 hi def link vimNormal vimCommand
h-east9b53c052024-02-13 21:09:22 +01001389 hi def link vimNotation Special
1390 hi def link vimNotFunc vimCommand
1391 hi def link vimNotPatSep vimString
1392 hi def link vimNumber Number
1393 hi def link vimOperError Error
1394 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001395 hi def link vimOption PreProc
1396 hi def link vimParenSep Delimiter
1397 hi def link vimPatSepErr vimError
1398 hi def link vimPatSepR vimPatSep
1399 hi def link vimPatSep SpecialChar
1400 hi def link vimPatSepZone vimString
1401 hi def link vimPatSepZ vimPatSep
1402 hi def link vimPattern Type
1403 hi def link vimPlainMark vimMark
1404 hi def link vimPlainRegister vimRegister
Doug Kearns695522d2025-01-10 20:02:17 +01001405 hi def link vimQuoteEscape vimEscape
h-east9b53c052024-02-13 21:09:22 +01001406 hi def link vimRegister SpecialChar
1407 hi def link vimScriptDelim Comment
h-east9b53c052024-02-13 21:09:22 +01001408 hi def link vimSearch vimString
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001409 hi def link vimSearchDelim Delimiter
h-east9b53c052024-02-13 21:09:22 +01001410 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001411 hi def link vimSet vimCommand
1412 hi def link vimSetAll vimOption
1413 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001414 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001415 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001416 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001417 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001418 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001419 hi def link vimSleep vimCommand
1420 hi def link vimSleepArg Constant
1421 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001422 hi def link vimSpecFile Identifier
1423 hi def link vimSpecFileMod vimSpecFile
1424 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001425 hi def link vimStringCont vimString
1426 hi def link vimString String
1427 hi def link vimStringEnd vimString
1428 hi def link vimStringInterpolationBrace vimEscape
1429 hi def link vimSubst1 vimSubst
1430 hi def link vimSubstDelim Delimiter
1431 hi def link vimSubstFlags Special
1432 hi def link vimSubstSubstr SpecialChar
1433 hi def link vimSubstTwoBS vimString
1434 hi def link vimSubst vimCommand
1435 hi def link vimSynCaseError Error
1436 hi def link vimSynCase Type
1437 hi def link vimSyncC Type
1438 hi def link vimSyncError Error
1439 hi def link vimSyncGroupName vimGroupName
1440 hi def link vimSyncGroup vimGroupName
1441 hi def link vimSyncKey Type
1442 hi def link vimSyncNone Type
1443 hi def link vimSynContains vimSynOption
1444 hi def link vimSynError Error
1445 hi def link vimSynFoldMethodError Error
1446 hi def link vimSynFoldMethod Type
1447 hi def link vimSynKeyContainedin vimSynContains
1448 hi def link vimSynKeyOpt vimSynOption
1449 hi def link vimSynCchar vimSynOption
1450 hi def link vimSynCcharValue Character
1451 hi def link vimSynMtchGrp vimSynOption
1452 hi def link vimSynMtchOpt vimSynOption
1453 hi def link vimSynNextgroup vimSynOption
1454 hi def link vimSynNotPatRange vimSynRegPat
1455 hi def link vimSynOption Special
1456 hi def link vimSynPatRange vimString
1457 hi def link vimSynRegOpt vimSynOption
1458 hi def link vimSynRegPat vimString
1459 hi def link vimSynReg Type
1460 hi def link vimSyntax vimCommand
1461 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001462 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001463 hi def link vimTodo Todo
1464 hi def link vimType Type
1465 hi def link vimUnlet vimCommand
1466 hi def link vimUnletBang vimBang
1467 hi def link vimUnmap vimMap
Doug Kearns3c07eb02024-09-02 10:03:37 +02001468 hi def link vimUserCmdAttrAddr vimSpecial
1469 hi def link vimUserCmdAttrCmplt vimSpecial
1470 hi def link vimUserCmdAttrNargs vimSpecial
1471 hi def link vimUserCmdAttrRange vimSpecial
1472 hi def link vimUserCmdAttrKey vimUserCmdAttr
1473 hi def link vimUserCmdAttr Special
1474 hi def link vimUserCmdAttrError Error
h-east9b53c052024-02-13 21:09:22 +01001475 hi def link vimUserCmdError Error
Doug Kearns3c07eb02024-09-02 10:03:37 +02001476 hi def link vimUserCmdKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001477 hi def link vimUserFunc Normal
1478 hi def link vimVar Identifier
1479 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001480
Doug Kearns818c6412024-10-06 17:00:48 +02001481 hi def link vim9Abstract vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001482 hi def link vim9Boolean Boolean
Doug Kearns818c6412024-10-06 17:00:48 +02001483 hi def link vim9Class vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001484 hi def link vim9Comment Comment
1485 hi def link vim9CommentError vimError
1486 hi def link vim9CommentTitle PreProc
1487 hi def link vim9Const vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001488 hi def link vim9ContinueComment vimContinueComment
1489 hi def link vim9Enum vimCommand
1490 hi def link vim9Export vimCommand
1491 hi def link vim9Extends Keyword
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001492 hi def link vim9Final vimCommand
1493 hi def link vim9For vimCommand
Doug Kearns818c6412024-10-06 17:00:48 +02001494 hi def link vim9Implements Keyword
1495 hi def link vim9AbstractDef vimCommand
1496 hi def link vim9Interface vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001497 hi def link vim9LineComment vimComment
Doug Kearns818c6412024-10-06 17:00:48 +02001498 hi def link vim9MethodDef vimCommand
1499 hi def link vim9MethodNameError vimFunctionError
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001500 hi def link vim9Null Constant
Doug Kearns818c6412024-10-06 17:00:48 +02001501 hi def link vim9Public vimCommand
Doug Kearnsc273f1a2025-01-20 21:53:01 +01001502 hi def link vim9Search vimString
1503 hi def link vim9SearchDelim Delimiter
Doug Kearns818c6412024-10-06 17:00:48 +02001504 hi def link vim9Static vimCommand
1505 hi def link vim9Super Identifier
1506 hi def link vim9This Identifier
1507 hi def link vim9Type vimCommand
1508 hi def link vim9TypeEquals vimOper
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001509 hi def link vim9Variable vimVar
Doug Kearns818c6412024-10-06 17:00:48 +02001510 hi def link vim9Var vimCommand
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001511 hi def link vim9Vim9ScriptArg Special
Doug Kearns818c6412024-10-06 17:00:48 +02001512 hi def link vim9Vim9Script vimCommand
h-east9b53c052024-02-13 21:09:22 +01001513endif
1514
1515" Current Syntax Variable: {{{2
1516let b:current_syntax = "vim"
1517
1518" ---------------------------------------------------------------------
1519" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001520delc Vim9
1521delc VimL
h-east9b53c052024-02-13 21:09:22 +01001522delc VimFolda
Doug Kearns818c6412024-10-06 17:00:48 +02001523delc VimFoldc
1524delc VimFolde
h-east9b53c052024-02-13 21:09:22 +01001525delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001526delc VimFoldh
1527delc VimFoldH
Doug Kearns818c6412024-10-06 17:00:48 +02001528delc VimFoldi
h-east9b53c052024-02-13 21:09:22 +01001529delc VimFoldl
1530delc VimFoldm
1531delc VimFoldp
1532delc VimFoldP
1533delc VimFoldr
1534delc VimFoldt
1535let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001536unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001537" vim:ts=18 fdm=marker ft=vim