blob: 5afcedcbdaf16295ff7da4ce968a9f5911dd1096 [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 Kearns35699f12024-09-19 19:51:59 +02005" Last Change: 2024 Sep 16
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
29" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR=''
30
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 Kearnsce064932024-04-13 18:24:01 +020084if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhHlmpPrt]'
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
90 if g:vimsyn_folding =~# 'f'
91 com! -nargs=* VimFoldf <args> fold
92 else
93 com! -nargs=* VimFoldf <args>
94 endif
95 if g:vimsyn_folding =~# 'h'
96 com! -nargs=* VimFoldh <args> fold
97 else
98 com! -nargs=* VimFoldh <args>
99 endif
Doug Kearnsce064932024-04-13 18:24:01 +0200100 if g:vimsyn_folding =~# 'H'
101 com! -nargs=* VimFoldH <args> fold
102 else
103 com! -nargs=* VimFoldH <args>
104 endif
h-east9b53c052024-02-13 21:09:22 +0100105 if g:vimsyn_folding =~# 'l'
106 com! -nargs=* VimFoldl <args> fold
107 else
108 com! -nargs=* VimFoldl <args>
109 endif
110 if g:vimsyn_folding =~# 'm'
111 com! -nargs=* VimFoldm <args> fold
112 else
113 com! -nargs=* VimFoldm <args>
114 endif
115 if g:vimsyn_folding =~# 'p'
116 com! -nargs=* VimFoldp <args> fold
117 else
118 com! -nargs=* VimFoldp <args>
119 endif
120 if g:vimsyn_folding =~# 'P'
121 com! -nargs=* VimFoldP <args> fold
122 else
123 com! -nargs=* VimFoldP <args>
124 endif
125 if g:vimsyn_folding =~# 'r'
126 com! -nargs=* VimFoldr <args> fold
127 else
128 com! -nargs=* VimFoldr <args>
129 endif
130 if g:vimsyn_folding =~# 't'
131 com! -nargs=* VimFoldt <args> fold
132 else
133 com! -nargs=* VimFoldt <args>
134 endif
135else
136 com! -nargs=* VimFolda <args>
137 com! -nargs=* VimFoldf <args>
138 com! -nargs=* VimFoldh <args>
Doug Kearnsce064932024-04-13 18:24:01 +0200139 com! -nargs=* VimFoldH <args>
h-east9b53c052024-02-13 21:09:22 +0100140 com! -nargs=* VimFoldl <args>
141 com! -nargs=* VimFoldm <args>
142 com! -nargs=* VimFoldp <args>
143 com! -nargs=* VimFoldP <args>
144 com! -nargs=* VimFoldr <args>
145 com! -nargs=* VimFoldt <args>
146endif
147
148" Deprecated variable options {{{2
149if exists("g:vim_minlines")
150 let g:vimsyn_minlines= g:vim_minlines
151endif
152if exists("g:vim_maxlines")
153 let g:vimsyn_maxlines= g:vim_maxlines
154endif
155if exists("g:vimsyntax_noerror")
156 let g:vimsyn_noerror= g:vimsyntax_noerror
157endif
158
159" Variable options {{{2
160if exists("g:vim_maxlines")
161 let s:vimsyn_maxlines= g:vim_maxlines
162else
163 let s:vimsyn_maxlines= 60
164endif
165
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200166" Nulls {{{2
167" =====
168Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
169
170" Booleans {{{2
171" ========
172Vim9 syn keyword vim9Boolean true false
173
h-east9b53c052024-02-13 21:09:22 +0100174" Numbers {{{2
175" =======
dkearns5cd86c62024-03-12 07:40:58 +1100176syn case ignore
dkearns04e53632024-04-11 06:18:37 +1000177syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
178syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
179syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
180syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
181syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
182syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
183syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
dkearns5cd86c62024-03-12 07:40:58 +1100184syn case match
h-east9b53c052024-02-13 21:09:22 +0100185
186" All vimCommands are contained by vimIsCommand. {{{2
Doug Kearns35699f12024-09-19 19:51:59 +0200187syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200188syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var
dkearnsc4aef9a2024-03-04 02:42:47 +1100189syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100190syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
Doug Kearns3c07eb02024-09-02 10:03:37 +0200191syn match vimBang contained "!"
h-east9b53c052024-02-13 21:09:22 +0100192syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
193syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
194syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
195syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
196syn match vimVar "\s\zs&t_k;"
197syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
198syn keyword vimCommand contained in
199
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200200syn cluster vimExprList contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
201syn cluster vim9ExprList contains=vim9Boolean,vim9Null
dkearnsb1427b42024-02-28 05:59:30 +1100202
h-east9b53c052024-02-13 21:09:22 +0100203" Insertions And Appends: insert append {{{2
204" (buftype != nofile test avoids having append, change, insert show up in the command window)
205" =======================
206if &buftype != 'nofile'
dkearns4ba70ca2024-04-15 04:32:56 +1000207 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend
208 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend
209 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend
h-east9b53c052024-02-13 21:09:22 +0100210endif
211
212" Behave! {{{2
213" =======
h-east9b53c052024-02-13 21:09:22 +0100214if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
215 syn match vimBehaveError contained "[^ ]\+"
216endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100217syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
218syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
219syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100220
Doug Kearns99984fc2024-07-18 20:45:19 +0200221" Call {{{2
222" ====
223syn match vimCall "\<call\=\>" skipwhite nextgroup=vimFunc
224
dkearnsa3bddb72024-06-14 01:48:10 +1000225" Exception Handling {{{2
226syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList
227syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern
228syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
229
h-east9b53c052024-02-13 21:09:22 +0100230" Filetypes {{{2
231" =========
232syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
233if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
234 syn match vimFTError contained "\I\i*"
235endif
236syn keyword vimFTCmd contained filet[ype]
237syn keyword vimFTOption contained detect indent off on plugin
238
239" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
240" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
dkearns04e53632024-04-11 06:18:37 +1000241syn 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 +1100242syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100243if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100244 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 +0100245else
dkearnsc4aef9a2024-03-04 02:42:47 +1100246 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 +0100247endif
h-east9b53c052024-02-13 21:09:22 +0100248if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100249 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100250endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100251
252syn match vimAutoCmdGroup contained "\S\+"
253syn match vimAugroupEnd contained "\c\<END\>"
254syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
255syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100256
257" Operators: {{{2
258" =========
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200259syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
260syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
h-east9b53c052024-02-13 21:09:22 +0100261syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
262syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
dkearns76d62982024-03-23 05:55:25 +1100263syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
h-east9b53c052024-02-13 21:09:22 +0100264syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
265if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
266 syn match vimOperError ")"
267endif
268
dkearns4ba70ca2024-04-15 04:32:56 +1000269" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
h-east9b53c052024-02-13 21:09:22 +0100270" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100271syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
272syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
dkearns4ba70ca2024-04-15 04:32:56 +1000273
274syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst,vimFuncFold
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200275syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet
276syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For
dkearns35e6f4c2024-03-22 06:41:10 +1100277
278syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
279syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
280syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
281
282syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
283syn match vimDef "\<def\s\+new\%(\i\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300284syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList,vimMethodName nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100285
Doug Kearns35699f12024-09-19 19:51:59 +0200286syn match vimFuncComment contained +".*+ skipwhite skipempty nextgroup=vimFuncBody,vimEndfunction
287syn match vimDefComment contained "#.*" skipwhite skipempty nextgroup=vimDefBody,vimEnddef
dkearns35e6f4c2024-03-22 06:41:10 +1100288
289syn match vimFuncBang contained "!"
290syn match vimFuncSID contained "\c<sid>"
291syn match vimFuncSID contained "\<[sg]:"
292syn keyword vimFuncKey contained fu[nction]
293syn keyword vimDefKey contained def
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300294syn keyword vimMethodName contained empty len string
dkearns35e6f4c2024-03-22 06:41:10 +1100295
Doug Kearns35699f12024-09-19 19:51:59 +0200296syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,@vimContinue
297syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError contains=vimDefParam,vim9Comment,vimFuncParamEquals
dkearns35e6f4c2024-03-22 06:41:10 +1100298syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
299syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
300
Doug Kearns35699f12024-09-19 19:51:59 +0200301syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
302syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100303
Doug Kearns35699f12024-09-19 19:51:59 +0200304syn region vimFuncBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
305syn region vimDefBody contained start="^." matchgroup=vimCmdSep start="|" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100306
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200307syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
308syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
h-east9b53c052024-02-13 21:09:22 +0100309
310if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
Doug Kearns35699f12024-09-19 19:51:59 +0200311 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
312 syn region vimFuncFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
313 syn region vimFuncFold start="\<def\s\+new\i\+(" end="\<enddef\>" contains=vimDef fold keepend extend transparent
h-east9b53c052024-02-13 21:09:22 +0100314endif
dkearns35e6f4c2024-03-22 06:41:10 +1100315
316syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
h-east9b53c052024-02-13 21:09:22 +0100317syn match vimFuncBlank contained "\s\+"
318
dkearns35e6f4c2024-03-22 06:41:10 +1100319" Types: {{{2
320" =====
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200321
Doug Kearns35699f12024-09-19 19:51:59 +0200322syn 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 +0200323syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
dkearns35e6f4c2024-03-22 06:41:10 +1100324
325syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
326syn keyword vimType contained any blob bool channel float job number string void
327syn match vimType contained "\<func\>"
328syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
329syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
330syn match vimUserType contained "\<\u\w*\>"
331
332syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100333
dkearns04e53632024-04-11 06:18:37 +1000334" Keymaps: {{{2
h-east9b53c052024-02-13 21:09:22 +0100335" =======
336
dkearns04e53632024-04-11 06:18:37 +1000337syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100338syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
339syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
340syn match vimKeymapTailComment "\S.*" contained
dkearns04e53632024-04-11 06:18:37 +1000341
342" TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk
343if s:vim9script
344 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
345else
346 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
347endif
348syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
h-east9b53c052024-02-13 21:09:22 +0100349
Doug Kearns7866d542024-08-23 18:37:55 +0200350syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
h-east9b53c052024-02-13 21:09:22 +0100351
352" Special Filenames, Modifiers, Extension Removal: {{{2
353" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100354syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
355syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
356syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
357syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
358syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
359syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100360syn match vimSpecFileMod "\(:[phtre]\)\+" contained
361
362" User-Specified Commands: {{{2
363" =======================
dkearns04e53632024-04-11 06:18:37 +1000364syn 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 +0200365syn keyword vimUserCmdKey contained com[mand]
366syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
367syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
368syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
369syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
370syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
371syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
372syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
373syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
374syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
375syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
376syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
377syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
378syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
379syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
380syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
381
382syn match vimUserCmdAttrNargs contained "[01*?+]"
383syn match vimUserCmdAttrRange contained "%"
384
h-east9b53c052024-02-13 21:09:22 +0100385if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
386 syn match vimUserCmdError contained "\S\+\>"
387endif
h-east9b53c052024-02-13 21:09:22 +0100388
Doug Kearns3c07eb02024-09-02 10:03:37 +0200389syn case ignore
390syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
391" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
392syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
393syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
394" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
395syn match vimUserCmdAttrAddr contained "?"
h-east9b53c052024-02-13 21:09:22 +0100396syn case match
h-east9b53c052024-02-13 21:09:22 +0100397
dkearns04e53632024-04-11 06:18:37 +1000398syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
399
Doug Kearns3c07eb02024-09-02 10:03:37 +0200400syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
401syn match vimDelcommandAttr contained "-buffer\>"
402
h-east9b53c052024-02-13 21:09:22 +0100403" Lower Priority Comments: after some vim commands... {{{2
404" =======================
dkearns959c3c82024-06-12 04:18:08 +1000405if get(g:, "vimsyn_comment_strings", 1)
Doug Kearns35699f12024-09-19 19:51:59 +0200406 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend
dkearns959c3c82024-06-12 04:18:08 +1000407endif
dkearns04e53632024-04-11 06:18:37 +1000408
409if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000410 syn cluster vimComment contains=vim9Comment
411else
dkearns04e53632024-04-11 06:18:37 +1000412 syn cluster vimComment contains=vimComment
413endif
h-east9b53c052024-02-13 21:09:22 +0100414
Doug Kearns35699f12024-09-19 19:51:59 +0200415VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
416VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
417VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200418" Vim9 comments - TODO: might be highlighted while they don't work
Doug Kearns35699f12024-09-19 19:51:59 +0200419Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString extend
420Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString extend
421Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200422" Vim9 comment inside expression
Doug Kearns35699f12024-09-19 19:51:59 +0200423Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained extend
424Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained extend
425Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200426
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200427syn match vim9CommentError contained "#.*"
428syn match vimCommentError contained +".*+
429
h-east9b53c052024-02-13 21:09:22 +0100430" Environment Variables: {{{2
431" =====================
432syn match vimEnvvar "\$\I\i*"
433syn match vimEnvvar "\${\I\i*}"
434
435" In-String Specials: {{{2
436" Try to catch strings, if nothing else matches (therefore it must precede the others!)
437" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
438syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
439syn match vimPatSepErr contained "\\)"
440syn match vimPatSep contained "\\|"
441syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
442syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
443syn match vimNotPatSep contained "\\\\"
444syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
Doug Kearns35699f12024-09-19 19:51:59 +0200445syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
446syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+ extend
h-east9b53c052024-02-13 21:09:22 +0100447"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
448syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
449syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
450syn match vimEscape contained "\\."
451" syn match vimEscape contained +\\[befnrt\"]+
452syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
453syn match vimEscape contained "\\<" contains=vimNotation
454syn match vimEscape contained "\\<\*[^>]*>\=>"
455
Doug Kearns35699f12024-09-19 19:51:59 +0200456syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=@vimStringInterpolation extend
457syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
dkearnsb1427b42024-02-28 05:59:30 +1100458syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
459syn match vimStringInterpolationBrace contained "{{"
460syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200461syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100462
463" Substitutions: {{{2
464" =============
465syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
466syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
467syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200468syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
469syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
470syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
471syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100472" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
473" : # is allowed but "not recommended" (see :h pattern-delimiter)
474syn 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
475syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
476syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
477syn match vimCollClassErr contained "\[:.\{-\}:\]"
478syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
479syn match vimSubstSubstr contained "\\z\=\d"
480syn match vimSubstTwoBS contained "\\\\"
481syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
482syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100483
Doug Kearns92f4e912024-06-05 19:45:43 +0200484" Vi compatibility
485syn match vimSubstDelim contained "\\"
486syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
487
h-east9b53c052024-02-13 21:09:22 +0100488" 'String': {{{2
489syn match vimString "[^(,]'[^']\{-}\zs'"
490
491" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100492syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
Doug Kearnsd8176092024-08-31 16:57:32 +0200493syn match vimMark "'[[\]{}()<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
494syn match vimMark ",\zs'[[\]{}()<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
dkearns2c51e152024-02-27 07:10:18 +1100495syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
496syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
497syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100498syn match vimPlainMark contained "'[a-zA-Z0-9]"
499syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
500
501syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
502syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
503syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
504syn match vimRegister '@"'
505syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
506syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
507
508syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
509syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
510
511syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
512syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
513syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
514
515" Complex Repeats: (:h complex-repeat) {{{2
516" ===============
517syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
518syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
519
520" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200521syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
522syn 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
523syn 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
524syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
525syn keyword vimSetAll contained all nextgroup=vimSetMod
526syn keyword vimSetTermcap contained termcap
527syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100528syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200529syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100530
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200531" Variable Declarations: {{{2
532" =====================
533VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
534VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
535syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100536
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200537VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
h-east9b53c052024-02-13 21:09:22 +0100538syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
539syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
540
Doug Kearns7884cc72024-08-23 18:01:35 +0200541VimFoldh 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 +0200542VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200543VimFoldh 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 +0200544VimFoldh 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 +0200545
546Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
547Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
548Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
549
550syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc
551syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100552
553" For: {{{2
554" ===
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200555if s:vim9script
556 syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
557else
558 syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
559endif
dkearns76d62982024-03-23 05:55:25 +1100560
h-east9b53c052024-02-13 21:09:22 +0100561" Abbreviations: {{{2
562" =============
563" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100564" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100565
566" Autocmd: {{{2
567" =======
568syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
569syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000570syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
h-east9b53c052024-02-13 21:09:22 +0100571syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000572syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
573syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100574
575" Echo And Execute: -- prefer strings! {{{2
576" ================
dkearns61887b32024-03-15 23:45:48 +1100577" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100578
dkearns61887b32024-03-15 23:45:48 +1100579syn region vimEcho
580 \ matchgroup=vimCommand
581 \ start="\<ec\%[ho]\>"
582 \ start="\<echoe\%[rr]\>"
583 \ start="\<echom\%[sg]\>"
584 \ start="\<echoc\%[onsole]\>"
585 \ start="\<echon\>"
586 \ start="\<echow\%[indow]\>"
587 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
588 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
589
590syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100591syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100592syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100593syn case match
594
dkearns35e6f4c2024-03-22 06:41:10 +1100595syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100596
597syn 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 +1100598
h-east9b53c052024-02-13 21:09:22 +0100599" Maps: {{{2
600" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200601" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
602syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
603syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100604" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200605syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
606" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
607syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
608
dkearns5d67aef2024-03-10 04:01:22 +1100609syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
610syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
611syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100612syn 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 +1100613syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
614" assume a continuation comment introduces the RHS
615syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100616syn case ignore
617syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
618syn case match
619
620" Menus: {{{2
621" =====
dkearns62b26042024-03-10 03:43:28 +1100622" NOTE: tail comments disallowed
623" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
624syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
625syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
626syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100627syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
628syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100629syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
630syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
631syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
632syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
633syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
634
635syn region vimMenutranslate
636 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
637 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
638 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
639 \ contains=@vimContinue,vimMenutranslateName keepend transparent
640" oneline is sufficient to match the current formatting in runtime/lang/*.vim
641syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
642syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100643
644" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
645" ======================
646syn case ignore
647syn 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
648
649syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
650syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
651syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
652syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
653syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
654syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
655syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
656
657syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
658syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
659syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
660syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
661syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
662syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
663
664syn match vimBracket contained "[\\<>]"
665syn case match
666
667" User Function Highlighting: {{{2
668" (following Gautam Iyer's suggestion)
669" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100670syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300671syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vimMethodName
dkearns9530fe42024-03-19 05:19:51 +1100672syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100673
Doug Kearns99984fc2024-07-18 20:45:19 +0200674syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
675
h-east9b53c052024-02-13 21:09:22 +0100676" User Command Highlighting: {{{2
677syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
678
679" Errors And Warnings: {{{2
680" ====================
681if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300682 " TODO: The new-prefix exception should only apply to constructor definitions.
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300683 " TODO: The |builtin-object-methods| exception should only apply to method
684 " definitions.
685 syn match vimFunctionError "\s\zs\%(empty\|len\|new\|string\)\@![a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100686 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
687 syn match vimElseIfErr "\<else\s\+if\>"
688 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
689endif
690
Doug Kearns4d427d42024-09-15 19:21:18 +0200691syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=@vimExprList,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100692
Doug Kearnse85fdc72024-07-07 20:45:37 +0200693" Match: {{{2
694" =====
695syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
696syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
697syn case ignore
698syn keyword vimMatchNone contained none
699syn case match
700syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
701
h-east9b53c052024-02-13 21:09:22 +0100702" Norm: {{{2
703" ====
704syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
705syn match vimNormCmds contained ".*$"
706
Doug Kearns262e25e2024-06-14 20:16:35 +0200707" Sleep: {{{2
708" =====
709syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
710syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
711syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
712
h-east9b53c052024-02-13 21:09:22 +0100713" Syntax: {{{2
714"=======
715syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
716syn 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
717syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
718
719if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
720 syn match vimSynError contained "\i\+"
721 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
722endif
723syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
724syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
725syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
726if has("conceal")
727 " no whitespace allowed after '='
728 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
729 syn match vimSynCcharValue contained "\S"
730endif
731
dkearns04e53632024-04-11 06:18:37 +1000732syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100733syn cluster vimFuncBodyList add=vimSyntax
734
735" Syntax: case {{{2
736syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
737if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
738 syn match vimSynCaseError contained "\i\+"
739endif
740syn keyword vimSynCase contained ignore match
741
742" Syntax: clear {{{2
743syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
744
745" Syntax: cluster {{{2
746syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
747syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
748syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
749syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100750
751" Syntax: foldlevel {{{2
752syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
753if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
754 syn match vimSynFoldMethodError contained "\i\+"
755endif
756syn keyword vimSynFoldMethod contained start minimum
757
758" Syntax: iskeyword {{{2
759syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
760syn match vimIskList contained '\S\+' contains=vimIskSep
761syn match vimIskSep contained ','
762
763" Syntax: include {{{2
764syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100765
766" Syntax: keyword {{{2
767syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
768syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
769syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
770syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100771
772" Syntax: match {{{2
773syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
774syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
775syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
776syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100777
778" Syntax: off and on {{{2
779syn keyword vimSynType contained enable list manual off on reset
780
781" Syntax: region {{{2
782syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
783syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
784syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
785syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
786syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
787syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
788syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
789syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
790syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
791syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
792syn match vimSynPatMod contained "lc=\d\+"
793syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
794syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
795syn match vimSynNotPatRange contained "\\\\\|\\\["
796syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100797
798" Syntax: sync {{{2
799" ============
800syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
801if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
802 syn match vimSyncError contained "\i\+"
803endif
804syn keyword vimSyncC contained ccomment clear fromstart
805syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
806syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
807syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
808syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
809syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
810syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
811syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
812syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
813syn keyword vimSyncNone contained NONE
814
815" Additional IsCommand: here by reasons of precedence {{{2
816" ====================
817syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
818
819" Highlighting: {{{2
820" ============
dkearns04e53632024-04-11 06:18:37 +1000821syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100822if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
823 syn match vimHiCtermError contained "\D\i*"
824endif
825syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100826syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100827
828syn match vimHiGroup contained "\i\+"
829syn case ignore
830syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
831syn keyword vimFgBgAttrib contained none bg background fg foreground
832syn case match
833syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
834syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
835syn case ignore
836syn 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
837syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
838
839syn case match
840syn match vimHiFontname contained "[a-zA-Z\-*]\+"
841syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
842syn match vimHiGuiRgb contained "#\x\{6}"
843
844" Highlighting: hi group key=arg ... {{{2
845syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100846syn 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 +0100847if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
848 syn match vimHiKeyError contained "\i\+="he=e-1
849endif
850syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100851syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100852syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
853syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
854syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
855syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
856syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
857syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
858syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
859syn match vimHiTermcap contained "\S\+" contains=vimNotation
860syn match vimHiNmbr contained '\d\+'
861
862" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100863syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100864
865" Highlight: link {{{2
866" see tst24 (hi def vs hi) (Jul 06, 2018)
867"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 +1100868" TODO: simplify and allow line continuations --djk
869syn 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 +0100870
871" Control Characters: {{{2
872" ==================
873syn match vimCtrlChar "[- -]"
874
875" Beginners - Patterns that involve ^ {{{2
876" =========
Doug Kearns35699f12024-09-19 19:51:59 +0200877Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend
878VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200879
h-east9b53c052024-02-13 21:09:22 +0100880syn 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 +1000881syn 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 +1000882
dkearnsae321b52024-06-15 23:06:17 +1000883" allowed anywhere in the file
884if !s:vim9script
885 syn match vimShebangError "^\s*\zs#!.*" display
886endif
887syn match vimShebang "\%^#!.*" display
888
h-east9b53c052024-02-13 21:09:22 +0100889syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +1000890syn match vimContinueComment '^\s*\zs["#]\\ .*'
h-east9b53c052024-02-13 21:09:22 +0100891syn cluster vimContinue contains=vimContinue,vimContinueComment
892syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
893syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +1000894syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +0100895
896" Searches And Globals: {{{2
897" ====================
898syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
899syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +1100900syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
901syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100902
dkearns04e53632024-04-11 06:18:37 +1000903" Vim9 Script Regions: {{{2
904" ==================
905
906if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +0200907 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
908 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +1000909
Doug Kearnsce064932024-04-13 18:24:01 +0200910 syn keyword vim9Vim9ScriptArg noclear contained
911 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +1000912endif
913
h-east9b53c052024-02-13 21:09:22 +0100914" Embedded Scripts: {{{2
915" ================
916" perl,ruby : Benoit Cerrina
917" python,tcl : Johannes Zellner
918" mzscheme, lua : Charles Campbell
919
920" Allows users to specify the type of embedded script highlighting
921" they want: (perl/python/ruby/tcl support)
922" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +0200923" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
924" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
925" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
926" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
927" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
928" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +0100929if !exists("g:vimsyn_embed")
930 let g:vimsyn_embed= "lmpPr"
931endif
932
933" [-- lua --] {{{3
934let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
935if !filereadable(s:luapath)
936 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
937 if filereadable(fnameescape(s:luapath))
938 let s:luapath= fnameescape(s:luapath)
939 break
940 endif
941 endfor
942endif
943if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
944 unlet! b:current_syntax
945 syn cluster vimFuncBodyList add=vimLuaRegion
946 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +0200947 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
948 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
949 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
950 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +0100951 syn cluster vimFuncBodyList add=vimLuaRegion
952else
Ken Takata95e90782024-08-22 21:29:39 +0200953 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
954 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
955 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
956 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +0100957endif
958unlet s:luapath
959
960" [-- perl --] {{{3
961let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
962if !filereadable(s:perlpath)
963 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
964 if filereadable(fnameescape(s:perlpath))
965 let s:perlpath= fnameescape(s:perlpath)
966 break
967 endif
968 endfor
969endif
970if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
971 unlet! b:current_syntax
972 syn cluster vimFuncBodyList add=vimPerlRegion
973 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +0200974 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
975 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
976 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
977 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +0100978 syn cluster vimFuncBodyList add=vimPerlRegion
979else
Ken Takata95e90782024-08-22 21:29:39 +0200980 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
981 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
982 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
983 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +0100984endif
985unlet s:perlpath
986
987" [-- ruby --] {{{3
988let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
989if !filereadable(s:rubypath)
990 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
991 if filereadable(fnameescape(s:rubypath))
992 let s:rubypath= fnameescape(s:rubypath)
993 break
994 endif
995 endfor
996endif
997if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
998 syn cluster vimFuncBodyList add=vimRubyRegion
999 unlet! b:current_syntax
1000 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +02001001 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
1002 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
1003 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
1004 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +01001005 syn cluster vimFuncBodyList add=vimRubyRegion
1006else
Ken Takata95e90782024-08-22 21:29:39 +02001007 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1008 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
1009 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1010 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001011endif
1012unlet s:rubypath
1013
1014" [-- python --] {{{3
1015let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1016if !filereadable(s:pythonpath)
1017 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1018 if filereadable(fnameescape(s:pythonpath))
1019 let s:pythonpath= fnameescape(s:pythonpath)
1020 break
1021 endif
1022 endfor
1023endif
1024if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1025 unlet! b:current_syntax
1026 syn cluster vimFuncBodyList add=vimPythonRegion
1027 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001028 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1029 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1030 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1031 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1032 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1033 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001034 syn cluster vimFuncBodyList add=vimPythonRegion
1035else
Ken Takata95e90782024-08-22 21:29:39 +02001036 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1037 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1038 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1039 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001040endif
1041unlet s:pythonpath
1042
1043" [-- tcl --] {{{3
1044if has("win32") || has("win95") || has("win64") || has("win16")
1045 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1046 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1047else
1048 let s:trytcl= 1
1049endif
1050if s:trytcl
1051 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1052 if !filereadable(s:tclpath)
1053 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1054 if filereadable(fnameescape(s:tclpath))
1055 let s:tclpath= fnameescape(s:tclpath)
1056 break
1057 endif
1058 endfor
1059 endif
1060 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1061 unlet! b:current_syntax
1062 syn cluster vimFuncBodyList add=vimTclRegion
1063 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001064 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1065 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1066 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1067 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001068 syn cluster vimFuncBodyList add=vimTclScript
1069 else
Ken Takata95e90782024-08-22 21:29:39 +02001070 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1071 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1072 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1073 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001074 endif
1075 unlet s:tclpath
1076else
Ken Takata95e90782024-08-22 21:29:39 +02001077 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1078 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1079 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1080 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001081endif
1082unlet s:trytcl
1083
1084" [-- mzscheme --] {{{3
1085let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1086if !filereadable(s:mzschemepath)
1087 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1088 if filereadable(fnameescape(s:mzschemepath))
1089 let s:mzschemepath= fnameescape(s:mzschemepath)
1090 break
1091 endif
1092 endfor
1093endif
1094if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1095 unlet! b:current_syntax
1096 let s:iskKeep= &isk
1097 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1098 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1099 let &isk= s:iskKeep
1100 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001101 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1102 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1103 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1104 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001105 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1106else
Ken Takata95e90782024-08-22 21:29:39 +02001107 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1108 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1109 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1110 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001111endif
1112unlet s:mzschemepath
1113
1114" Synchronize (speed) {{{2
1115"============
1116if exists("g:vimsyn_minlines")
1117 exe "syn sync minlines=".g:vimsyn_minlines
1118endif
1119exe "syn sync maxlines=".s:vimsyn_maxlines
1120syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001121syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001122syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1123
1124" ====================
1125" Highlighting Settings {{{2
1126" ====================
1127
1128if !exists("skip_vim_syntax_inits")
1129 if !exists("g:vimsyn_noerror")
1130 hi def link vimBehaveError vimError
1131 hi def link vimCollClassErr vimError
1132 hi def link vimErrSetting vimError
1133 hi def link vimEmbedError vimError
1134 hi def link vimFTError vimError
1135 hi def link vimFunctionError vimError
1136 hi def link vimFunc vimError
1137 hi def link vimHiAttribList vimError
1138 hi def link vimHiCtermError vimError
1139 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001140 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001141 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001142 hi def link vimSubstFlagErr vimError
1143 hi def link vimSynCaseError vimError
1144 hi def link vimSynFoldMethodError vimError
1145 hi def link vimBufnrWarn vimWarn
1146 endif
1147
1148 hi def link vimAbb vimCommand
1149 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001150 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001151 hi def link vimAugroupError vimError
1152 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001153 hi def link vimAutoCmd vimCommand
1154 hi def link vimAutoEvent Type
1155 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001156 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001157 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001158 hi def link vimBehaveModel vimBehave
1159 hi def link vimBehave vimCommand
1160 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001161 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001162 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001163 hi def link vimCmplxRepeat SpecialChar
1164 hi def link vimCommand Statement
1165 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001166 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001167 hi def link vimCommentString vimString
1168 hi def link vimCommentTitle PreProc
1169 hi def link vimCondHL vimCommand
1170 hi def link vimConst vimCommand
1171 hi def link vimContinue Special
1172 hi def link vimContinueComment vimComment
1173 hi def link vimCtrlChar SpecialChar
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001174 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001175 hi def link vimDefKey vimCommand
1176 hi def link vimDefParam vimVar
Doug Kearns3c07eb02024-09-02 10:03:37 +02001177 hi def link vimDelcommand vimCommand
1178 hi def link vimDelcommandAttr vimUserCmdAttr
dkearnsb1427b42024-02-28 05:59:30 +11001179 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001180 hi def link vimEchohlNone vimGroup
1181 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001182 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001183 hi def link vimEndfunction vimCommand
1184 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001185 hi def link vimEnvvar PreProc
1186 hi def link vimError Error
1187 hi def link vimEscape Special
1188 hi def link vimFBVar vimVar
1189 hi def link vimFgBgAttrib vimHiAttrib
1190 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001191 hi def link vimFor vimCommand
1192 hi def link vimFTCmd vimCommand
1193 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001194 hi def link vimFuncBang vimBang
1195 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001196 hi def link vimFuncKey vimCommand
1197 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001198 hi def link vimFuncMod Special
1199 hi def link vimFuncParam vimVar
1200 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001201 hi def link vimFuncSID Special
1202 hi def link vimFuncVar Identifier
1203 hi def link vimGroupAdd vimSynOption
1204 hi def link vimGroupName vimGroup
1205 hi def link vimGroupRem vimSynOption
1206 hi def link vimGroupSpecial Special
1207 hi def link vimGroup Type
1208 hi def link vimHiAttrib PreProc
1209 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001210 hi def link vimHiClear Type
1211 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001212 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001213 hi def link vimHiCtermfont vimHiTerm
1214 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001215 hi def link vimHiCTerm vimHiTerm
1216 hi def link vimHighlight vimCommand
1217 hi def link vimHiGroup vimGroupName
1218 hi def link vimHiGuiFgBg vimHiTerm
1219 hi def link vimHiGuiFont vimHiTerm
1220 hi def link vimHiGuiRgb vimNumber
1221 hi def link vimHiGui vimHiTerm
1222 hi def link vimHiNmbr Number
1223 hi def link vimHiStartStop vimHiTerm
1224 hi def link vimHiTerm Type
1225 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001226 hi def link vimInsert vimString
1227 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001228 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001229 hi def link vimKeymapLineComment vimComment
1230 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001231 hi def link vimLet vimCommand
1232 hi def link vimLetHereDoc vimString
1233 hi def link vimLetHereDocStart Special
1234 hi def link vimLetHereDocStop Special
1235 hi def link vimLetRegister Special
1236 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001237 hi def link vimMapBang vimBang
1238 hi def link vimMapModKey vimFuncSID
1239 hi def link vimMapMod vimBracket
1240 hi def link vimMap vimCommand
1241 hi def link vimMark Number
1242 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001243 hi def link vimMatch vimCommand
1244 hi def link vimMatchGroup vimGroup
1245 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001246 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001247 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001248 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001249 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001250 hi def link vimMenu vimCommand
1251 hi def link vimMenuNotation vimNotation
1252 hi def link vimMenuPriority Number
1253 hi def link vimMenuStatus Special
1254 hi def link vimMenutranslateComment vimComment
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +03001255 hi def link vimMethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001256 hi def link vimMtchComment vimComment
1257 hi def link vimNorm vimCommand
1258 hi def link vimNotation Special
1259 hi def link vimNotFunc vimCommand
1260 hi def link vimNotPatSep vimString
1261 hi def link vimNumber Number
1262 hi def link vimOperError Error
1263 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001264 hi def link vimOption PreProc
1265 hi def link vimParenSep Delimiter
1266 hi def link vimPatSepErr vimError
1267 hi def link vimPatSepR vimPatSep
1268 hi def link vimPatSep SpecialChar
1269 hi def link vimPatSepZone vimString
1270 hi def link vimPatSepZ vimPatSep
1271 hi def link vimPattern Type
1272 hi def link vimPlainMark vimMark
1273 hi def link vimPlainRegister vimRegister
1274 hi def link vimRegister SpecialChar
1275 hi def link vimScriptDelim Comment
1276 hi def link vimSearchDelim Statement
1277 hi def link vimSearch vimString
1278 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001279 hi def link vimSet vimCommand
1280 hi def link vimSetAll vimOption
1281 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001282 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001283 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001284 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001285 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001286 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001287 hi def link vimSleep vimCommand
1288 hi def link vimSleepArg Constant
1289 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001290 hi def link vimSpecFile Identifier
1291 hi def link vimSpecFileMod vimSpecFile
1292 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001293 hi def link vimStringCont vimString
1294 hi def link vimString String
1295 hi def link vimStringEnd vimString
1296 hi def link vimStringInterpolationBrace vimEscape
1297 hi def link vimSubst1 vimSubst
1298 hi def link vimSubstDelim Delimiter
1299 hi def link vimSubstFlags Special
1300 hi def link vimSubstSubstr SpecialChar
1301 hi def link vimSubstTwoBS vimString
1302 hi def link vimSubst vimCommand
1303 hi def link vimSynCaseError Error
1304 hi def link vimSynCase Type
1305 hi def link vimSyncC Type
1306 hi def link vimSyncError Error
1307 hi def link vimSyncGroupName vimGroupName
1308 hi def link vimSyncGroup vimGroupName
1309 hi def link vimSyncKey Type
1310 hi def link vimSyncNone Type
1311 hi def link vimSynContains vimSynOption
1312 hi def link vimSynError Error
1313 hi def link vimSynFoldMethodError Error
1314 hi def link vimSynFoldMethod Type
1315 hi def link vimSynKeyContainedin vimSynContains
1316 hi def link vimSynKeyOpt vimSynOption
1317 hi def link vimSynCchar vimSynOption
1318 hi def link vimSynCcharValue Character
1319 hi def link vimSynMtchGrp vimSynOption
1320 hi def link vimSynMtchOpt vimSynOption
1321 hi def link vimSynNextgroup vimSynOption
1322 hi def link vimSynNotPatRange vimSynRegPat
1323 hi def link vimSynOption Special
1324 hi def link vimSynPatRange vimString
1325 hi def link vimSynRegOpt vimSynOption
1326 hi def link vimSynRegPat vimString
1327 hi def link vimSynReg Type
1328 hi def link vimSyntax vimCommand
1329 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001330 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001331 hi def link vimTodo Todo
1332 hi def link vimType Type
1333 hi def link vimUnlet vimCommand
1334 hi def link vimUnletBang vimBang
1335 hi def link vimUnmap vimMap
Doug Kearns3c07eb02024-09-02 10:03:37 +02001336 hi def link vimUserCmdAttrAddr vimSpecial
1337 hi def link vimUserCmdAttrCmplt vimSpecial
1338 hi def link vimUserCmdAttrNargs vimSpecial
1339 hi def link vimUserCmdAttrRange vimSpecial
1340 hi def link vimUserCmdAttrKey vimUserCmdAttr
1341 hi def link vimUserCmdAttr Special
1342 hi def link vimUserCmdAttrError Error
h-east9b53c052024-02-13 21:09:22 +01001343 hi def link vimUserCmdError Error
Doug Kearns3c07eb02024-09-02 10:03:37 +02001344 hi def link vimUserCmdKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001345 hi def link vimUserFunc Normal
1346 hi def link vimVar Identifier
1347 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001348
1349 hi def link vim9Boolean Boolean
1350 hi def link vim9Comment Comment
1351 hi def link vim9CommentError vimError
1352 hi def link vim9CommentTitle PreProc
1353 hi def link vim9Const vimCommand
1354 hi def link vim9Final vimCommand
1355 hi def link vim9For vimCommand
1356 hi def link vim9LineComment vimComment
1357 hi def link vim9Null Constant
1358 hi def link vim9Var vimCommand
1359 hi def link vim9Variable vimVar
1360 hi def link vim9Vim9Script vimCommand
1361 hi def link vim9Vim9ScriptArg Special
h-east9b53c052024-02-13 21:09:22 +01001362endif
1363
1364" Current Syntax Variable: {{{2
1365let b:current_syntax = "vim"
1366
1367" ---------------------------------------------------------------------
1368" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001369delc Vim9
1370delc VimL
h-east9b53c052024-02-13 21:09:22 +01001371delc VimFolda
1372delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001373delc VimFoldh
1374delc VimFoldH
h-east9b53c052024-02-13 21:09:22 +01001375delc VimFoldl
1376delc VimFoldm
1377delc VimFoldp
1378delc VimFoldP
1379delc VimFoldr
1380delc VimFoldt
1381let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001382unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001383" vim:ts=18 fdm=marker ft=vim