blob: 4c91df416191ba9f9fca28d3c83e028f68466450 [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>
5" URL: https://github.com/vim-jp/syntax-vim-ex
Doug Kearns7884cc72024-08-23 18:01:35 +02006" Last Change: 2024 Aug 23
Christian Brabandtf9ca1392024-02-19 20:37:11 +01007" Former Maintainer: Charles E. Campbell
h-east9b53c052024-02-13 21:09:22 +01008
9" DO NOT CHANGE DIRECTLY.
10" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
11" (Search string "GEN_SYN_VIM:" in this file)
12
13" Automatically generated keyword lists: {{{1
14
15" Quit when a syntax file was already loaded {{{2
16if exists("b:current_syntax")
17 finish
18endif
h-east9b53c052024-02-13 21:09:22 +010019let s:keepcpo= &cpo
20set cpo&vim
21
dkearns04e53632024-04-11 06:18:37 +100022let s:vim9script = "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>'
23
h-east9b53c052024-02-13 21:09:22 +010024" vimTodo: contains common special-notices for comments {{{2
25" Use the vimCommentGroup cluster to add your own.
26syn keyword vimTodo contained COMBAK FIXME TODO XXX
27syn cluster vimCommentGroup contains=vimTodo,@Spell
28
29" regular vim commands {{{2
30" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR=''
31
Aliaksei Budaveidfcef892024-02-18 21:02:14 +030032" Lower priority for _new_ to distinguish constructors from the command.
33syn match vimCommand contained "\<new\>(\@!"
h-east9b53c052024-02-13 21:09:22 +010034syn match vimCommand contained "\<z[-+^.=]\=\>"
35syn 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
36
37" vimOptions are caught only when contained in a vimSet {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +020038" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
h-east9b53c052024-02-13 21:09:22 +010039
40" vimOptions: These are the turn-off setting variants {{{2
41" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
42
43" vimOptions: These are the invertible variants {{{2
44" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
45
46" termcap codes (which can also be set) {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +020047" 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 +010048" term key codes
49syn 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
50syn match vimOption contained "t_%1"
51syn match vimOption contained "t_#2"
52syn match vimOption contained "t_#4"
53syn match vimOption contained "t_@7"
54syn match vimOption contained "t_*7"
55syn match vimOption contained "t_&8"
56syn match vimOption contained "t_%i"
57syn match vimOption contained "t_k;"
58
59" unsupported settings: some were supported by vi but don't do anything in vim {{{2
60" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
61
62" AutoCmd Events {{{2
63syn case ignore
64" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
65
66" Highlight commonly used Groupnames {{{2
67syn 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
68
69" Default highlighting groups {{{2
70" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
h_eastc984b2f2024-05-27 22:40:25 +090071syn match vimHLGroup contained "\<Conceal\>"
h-east9b53c052024-02-13 21:09:22 +010072syn case match
73
74" Function Names {{{2
75" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
76
77"--- syntax here and above generated by mkvimvim ---
78" Special Vim Highlighting (not automatic) {{{1
79
Doug Kearnsd65e58f2024-07-17 19:34:14 +020080" Set up commands for this syntax highlighting file {{{2
81
82com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
83com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
84
Doug Kearnsce064932024-04-13 18:24:01 +020085if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhHlmpPrt]'
h-east9b53c052024-02-13 21:09:22 +010086 if g:vimsyn_folding =~# 'a'
87 com! -nargs=* VimFolda <args> fold
88 else
89 com! -nargs=* VimFolda <args>
90 endif
91 if g:vimsyn_folding =~# 'f'
92 com! -nargs=* VimFoldf <args> fold
93 else
94 com! -nargs=* VimFoldf <args>
95 endif
96 if g:vimsyn_folding =~# 'h'
97 com! -nargs=* VimFoldh <args> fold
98 else
99 com! -nargs=* VimFoldh <args>
100 endif
Doug Kearnsce064932024-04-13 18:24:01 +0200101 if g:vimsyn_folding =~# 'H'
102 com! -nargs=* VimFoldH <args> fold
103 else
104 com! -nargs=* VimFoldH <args>
105 endif
h-east9b53c052024-02-13 21:09:22 +0100106 if g:vimsyn_folding =~# 'l'
107 com! -nargs=* VimFoldl <args> fold
108 else
109 com! -nargs=* VimFoldl <args>
110 endif
111 if g:vimsyn_folding =~# 'm'
112 com! -nargs=* VimFoldm <args> fold
113 else
114 com! -nargs=* VimFoldm <args>
115 endif
116 if g:vimsyn_folding =~# 'p'
117 com! -nargs=* VimFoldp <args> fold
118 else
119 com! -nargs=* VimFoldp <args>
120 endif
121 if g:vimsyn_folding =~# 'P'
122 com! -nargs=* VimFoldP <args> fold
123 else
124 com! -nargs=* VimFoldP <args>
125 endif
126 if g:vimsyn_folding =~# 'r'
127 com! -nargs=* VimFoldr <args> fold
128 else
129 com! -nargs=* VimFoldr <args>
130 endif
131 if g:vimsyn_folding =~# 't'
132 com! -nargs=* VimFoldt <args> fold
133 else
134 com! -nargs=* VimFoldt <args>
135 endif
136else
137 com! -nargs=* VimFolda <args>
138 com! -nargs=* VimFoldf <args>
139 com! -nargs=* VimFoldh <args>
Doug Kearnsce064932024-04-13 18:24:01 +0200140 com! -nargs=* VimFoldH <args>
h-east9b53c052024-02-13 21:09:22 +0100141 com! -nargs=* VimFoldl <args>
142 com! -nargs=* VimFoldm <args>
143 com! -nargs=* VimFoldp <args>
144 com! -nargs=* VimFoldP <args>
145 com! -nargs=* VimFoldr <args>
146 com! -nargs=* VimFoldt <args>
147endif
148
149" Deprecated variable options {{{2
150if exists("g:vim_minlines")
151 let g:vimsyn_minlines= g:vim_minlines
152endif
153if exists("g:vim_maxlines")
154 let g:vimsyn_maxlines= g:vim_maxlines
155endif
156if exists("g:vimsyntax_noerror")
157 let g:vimsyn_noerror= g:vimsyntax_noerror
158endif
159
160" Variable options {{{2
161if exists("g:vim_maxlines")
162 let s:vimsyn_maxlines= g:vim_maxlines
163else
164 let s:vimsyn_maxlines= 60
165endif
166
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200167" Nulls {{{2
168" =====
169Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string
170
171" Booleans {{{2
172" ========
173Vim9 syn keyword vim9Boolean true false
174
h-east9b53c052024-02-13 21:09:22 +0100175" Numbers {{{2
176" =======
dkearns5cd86c62024-03-12 07:40:58 +1100177syn case ignore
dkearns04e53632024-04-11 06:18:37 +1000178syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
179syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
180syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
181syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
182syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
183syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
184syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,@vimComment
dkearns5cd86c62024-03-12 07:40:58 +1100185syn case match
h-east9b53c052024-02-13 21:09:22 +0100186
187" All vimCommands are contained by vimIsCommand. {{{2
Doug Kearns99984fc2024-07-18 20:45:19 +0200188syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimMatch,vimNotFunc,vimNorm,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200189syn cluster vim9CmdList contains=vim9Const,vim9Final,vim9For,vim9Var
dkearnsc4aef9a2024-03-04 02:42:47 +1100190syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100191syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
192syn 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
286syn match vimFuncComment contained +".*+ skipwhite skipnl nextgroup=vimFuncBody,vimEndfunction
287syn match vimDefComment contained "#.*" skipwhite skipnl nextgroup=vimDefBody,vimEnddef
288
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 Kearnsfc64ac02024-06-22 11:20:36 +0200296syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError contains=vimFuncParam,@vimContinue
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200297syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl 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
301syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200302syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod,vim9CommentError
dkearns35e6f4c2024-03-22 06:41:10 +1100303
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200304syn region vimFuncBody contained start="^.\=" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
305syn region vimDefBody contained 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'
dkearns4ba70ca2024-04-15 04:32:56 +1000311 syn region vimFuncFold start="^\s*:\=\s*fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="^\s*:\=\s*endf\%[unction]\>" contains=vimFunction fold keepend extend transparent
312 syn region vimFuncFold start="^\s*:\=\s*def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="^\s*:\=\s*enddef\>" contains=vimDef fold keepend extend transparent
313 syn region vimFuncFold start="^\s*:\=\s*def\s\+new\i\+(" end="^\s*:\=\s*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 Kearnsfc64ac02024-06-22 11:20:36 +0200322syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" skipwhite skipnl 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
350syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
351
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
h-east9b53c052024-02-13 21:09:22 +0100365syn keyword vimUserCommand contained com[mand]
dkearns04e53632024-04-11 06:18:37 +1000366syn match vimUserCmdName contained "\<\u\w*\>" nextgroup=vimUserCmdBlock skipwhite
367syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter,vimCmdBlock,vimUserCmdName
h-east9b53c052024-02-13 21:09:22 +0100368syn match vimUserAttrbError contained "-\a\+\ze\s"
369syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
370syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
371syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
372syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
373syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey
374syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey
375syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey
376syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey
377if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
378 syn match vimUserCmdError contained "\S\+\>"
379endif
380syn case ignore
381syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
382" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
383syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
384syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
385
386syn case match
387syn match vimUserAttrbCmplt contained "custom,\u\w*"
388
dkearns04e53632024-04-11 06:18:37 +1000389syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
390
h-east9b53c052024-02-13 21:09:22 +0100391" Lower Priority Comments: after some vim commands... {{{2
392" =======================
dkearns959c3c82024-06-12 04:18:08 +1000393if get(g:, "vimsyn_comment_strings", 1)
394 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
395endif
dkearns04e53632024-04-11 06:18:37 +1000396
397if s:vim9script
dkearns04e53632024-04-11 06:18:37 +1000398 syn cluster vimComment contains=vim9Comment
399else
dkearns04e53632024-04-11 06:18:37 +1000400 syn cluster vimComment contains=vimComment
401endif
h-east9b53c052024-02-13 21:09:22 +0100402
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200403VimL syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
404VimL syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
405VimL syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
406" Vim9 comments - TODO: might be highlighted while they don't work
407Vim9 syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
408Vim9 syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
409Vim9 syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
410" Vim9 comment inside expression
411Vim9 syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString contained
412Vim9 syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString contained
413Vim9 syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString contained
414
Doug Kearnsfc64ac02024-06-22 11:20:36 +0200415syn match vim9CommentError contained "#.*"
416syn match vimCommentError contained +".*+
417
h-east9b53c052024-02-13 21:09:22 +0100418" Environment Variables: {{{2
419" =====================
420syn match vimEnvvar "\$\I\i*"
421syn match vimEnvvar "\${\I\i*}"
422
423" In-String Specials: {{{2
424" Try to catch strings, if nothing else matches (therefore it must precede the others!)
425" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
426syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
427syn match vimPatSepErr contained "\\)"
428syn match vimPatSep contained "\\|"
429syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
430syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
431syn match vimNotPatSep contained "\\\\"
432syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
433syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup
434syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+
h-east9b53c052024-02-13 21:09:22 +0100435"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
436syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
437syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
438syn match vimEscape contained "\\."
439" syn match vimEscape contained +\\[befnrt\"]+
440syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
441syn match vimEscape contained "\\<" contains=vimNotation
442syn match vimEscape contained "\\<\*[^>]*>\=>"
443
Ken Takata95e90782024-08-22 21:29:39 +0200444syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=@vimStringInterpolation
445syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,@vimStringInterpolation
dkearnsb1427b42024-02-28 05:59:30 +1100446syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
447syn match vimStringInterpolationBrace contained "{{"
448syn match vimStringInterpolationBrace contained "}}"
Ken Takata95e90782024-08-22 21:29:39 +0200449syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
h-east9b53c052024-02-13 21:09:22 +0100450
451" Substitutions: {{{2
452" =============
453syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
454syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
455syn cluster vimSubstList add=vimCollection
Doug Kearns92f4e912024-06-05 19:45:43 +0200456syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
457syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
458syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat
459syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
dkearns2c51e152024-02-27 07:10:18 +1100460" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
461" : # is allowed but "not recommended" (see :h pattern-delimiter)
462syn 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
463syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
464syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
465syn match vimCollClassErr contained "\[:.\{-\}:\]"
466syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
467syn match vimSubstSubstr contained "\\z\=\d"
468syn match vimSubstTwoBS contained "\\\\"
469syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
470syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100471
Doug Kearns92f4e912024-06-05 19:45:43 +0200472" Vi compatibility
473syn match vimSubstDelim contained "\\"
474syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
475
h-east9b53c052024-02-13 21:09:22 +0100476" 'String': {{{2
477syn match vimString "[^(,]'[^']\{-}\zs'"
478
479" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100480syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
481syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
482syn match vimMark ",\zs'[<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
483syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
484syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
485syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100486syn match vimPlainMark contained "'[a-zA-Z0-9]"
487syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
488
489syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
490syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
491syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
492syn match vimRegister '@"'
493syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
494syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
495
496syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
497syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
498
499syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
500syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
501syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
502
503" Complex Repeats: (:h complex-repeat) {{{2
504" ===============
505syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
506syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
507
508" Set command and associated set-options (vimOptions) with comment {{{2
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200509syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetRegion
510syn 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
511syn 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
512syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
513syn keyword vimSetAll contained all nextgroup=vimSetMod
514syn keyword vimSetTermcap contained termcap
515syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
h-east9b53c052024-02-13 21:09:22 +0100516syn match vimSetSep contained "[,:]"
Doug Kearnsddbb6fe2024-07-24 20:21:22 +0200517syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
h-east9b53c052024-02-13 21:09:22 +0100518
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200519" Variable Declarations: {{{2
520" =====================
521VimL syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetRegister,vimVarList
522VimL syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimVarList
523syn region vimVarList contained start="\[" end="]" contains=vimVar,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100524
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200525VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
h-east9b53c052024-02-13 21:09:22 +0100526syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
527syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
528
Doug Kearns7884cc72024-08-23 18:01:35 +0200529VimFoldh 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 +0200530VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\z1$' extend
Doug Kearns7884cc72024-08-23 18:01:35 +0200531VimFoldh 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 +0200532VimFoldh 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 +0200533
534Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList
535Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList
536Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList
537
538syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHereDoc
539syn region vim9VariableList contained start="\[" end="]" contains=vim9Variable,@vimContinue
h-east9b53c052024-02-13 21:09:22 +0100540
541" For: {{{2
542" ===
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200543if s:vim9script
544 syn keyword vim9For for skipwhite nextgroup=vim9Variable,vim9VariableList
545else
546 syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
547endif
dkearns76d62982024-03-23 05:55:25 +1100548
h-east9b53c052024-02-13 21:09:22 +0100549" Abbreviations: {{{2
550" =============
551" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100552" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100553
554" Autocmd: {{{2
555" =======
556syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
557syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
dkearns04e53632024-04-11 06:18:37 +1000558syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod,vimAutoCmdBlock
h-east9b53c052024-02-13 21:09:22 +0100559syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
dkearns04e53632024-04-11 06:18:37 +1000560syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" skipwhite nextgroup=vimAutoCmdBlock
561syn region vimAutoCmdBlock contained matchgroup=vimSep start="{" end="}" contains=@vimDefBodyList
h-east9b53c052024-02-13 21:09:22 +0100562
563" Echo And Execute: -- prefer strings! {{{2
564" ================
dkearns61887b32024-03-15 23:45:48 +1100565" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100566
dkearns61887b32024-03-15 23:45:48 +1100567syn region vimEcho
568 \ matchgroup=vimCommand
569 \ start="\<ec\%[ho]\>"
570 \ start="\<echoe\%[rr]\>"
571 \ start="\<echom\%[sg]\>"
572 \ start="\<echoc\%[onsole]\>"
573 \ start="\<echon\>"
574 \ start="\<echow\%[indow]\>"
575 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
576 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
577
578syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100579syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100580syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100581syn case match
582
dkearns35e6f4c2024-03-22 06:41:10 +1100583syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100584
585syn 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 +1100586
h-east9b53c052024-02-13 21:09:22 +0100587" Maps: {{{2
588" ====
Doug Kearns99984fc2024-07-18 20:45:19 +0200589" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
590syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
591syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
dkearns16249702024-02-23 05:45:05 +1100592" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
Doug Kearns99984fc2024-07-18 20:45:19 +0200593syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
594" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
595syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
596
dkearns5d67aef2024-03-10 04:01:22 +1100597syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
598syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
599syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100600syn 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 +1100601syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
602" assume a continuation comment introduces the RHS
603syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100604syn case ignore
605syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
606syn case match
607
608" Menus: {{{2
609" =====
dkearns62b26042024-03-10 03:43:28 +1100610" NOTE: tail comments disallowed
611" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
612syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
613syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
614syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100615syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
616syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100617syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
618syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
619syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
620syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
621syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
622
623syn region vimMenutranslate
624 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
625 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
626 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
627 \ contains=@vimContinue,vimMenutranslateName keepend transparent
628" oneline is sufficient to match the current formatting in runtime/lang/*.vim
629syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
630syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100631
632" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
633" ======================
634syn case ignore
635syn 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
636
637syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
638syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
639syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
640syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
641syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
642syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
643syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
644
645syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
646syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
647syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
648syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
649syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
650syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
651
652syn match vimBracket contained "[\\<>]"
653syn case match
654
655" User Function Highlighting: {{{2
656" (following Gautam Iyer's suggestion)
657" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100658syn 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 +0300659syn 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 +1100660syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100661
Doug Kearns99984fc2024-07-18 20:45:19 +0200662syn match vimMap "\<map\%(\s\+(\)\@=" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
663
h-east9b53c052024-02-13 21:09:22 +0100664" User Command Highlighting: {{{2
665syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
666
667" Errors And Warnings: {{{2
668" ====================
669if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300670 " TODO: The new-prefix exception should only apply to constructor definitions.
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300671 " TODO: The |builtin-object-methods| exception should only apply to method
672 " definitions.
673 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 +0100674 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
675 syn match vimElseIfErr "\<else\s\+if\>"
676 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
677endif
678
679syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
680
Doug Kearnse85fdc72024-07-07 20:45:37 +0200681" Match: {{{2
682" =====
683syn match vimMatch "\<[23]\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
684syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
685syn case ignore
686syn keyword vimMatchNone contained none
687syn case match
688syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
689
h-east9b53c052024-02-13 21:09:22 +0100690" Norm: {{{2
691" ====
692syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
693syn match vimNormCmds contained ".*$"
694
Doug Kearns262e25e2024-06-14 20:16:35 +0200695" Sleep: {{{2
696" =====
697syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
698syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
699syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
700
h-east9b53c052024-02-13 21:09:22 +0100701" Syntax: {{{2
702"=======
703syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
704syn 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
705syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
706
707if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
708 syn match vimSynError contained "\i\+"
709 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
710endif
711syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
712syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
713syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
714if has("conceal")
715 " no whitespace allowed after '='
716 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
717 syn match vimSynCcharValue contained "\S"
718endif
719
dkearns04e53632024-04-11 06:18:37 +1000720syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100721syn cluster vimFuncBodyList add=vimSyntax
722
723" Syntax: case {{{2
724syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
725if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
726 syn match vimSynCaseError contained "\i\+"
727endif
728syn keyword vimSynCase contained ignore match
729
730" Syntax: clear {{{2
731syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
732
733" Syntax: cluster {{{2
734syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
735syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
736syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
737syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100738
739" Syntax: foldlevel {{{2
740syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
741if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
742 syn match vimSynFoldMethodError contained "\i\+"
743endif
744syn keyword vimSynFoldMethod contained start minimum
745
746" Syntax: iskeyword {{{2
747syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
748syn match vimIskList contained '\S\+' contains=vimIskSep
749syn match vimIskSep contained ','
750
751" Syntax: include {{{2
752syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100753
754" Syntax: keyword {{{2
755syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
756syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
757syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
758syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100759
760" Syntax: match {{{2
761syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
762syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
763syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
764syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100765
766" Syntax: off and on {{{2
767syn keyword vimSynType contained enable list manual off on reset
768
769" Syntax: region {{{2
770syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
771syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
772syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
773syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
774syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
775syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
776syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
777syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
778syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
779syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
780syn match vimSynPatMod contained "lc=\d\+"
781syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
782syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
783syn match vimSynNotPatRange contained "\\\\\|\\\["
784syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100785
786" Syntax: sync {{{2
787" ============
788syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
789if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
790 syn match vimSyncError contained "\i\+"
791endif
792syn keyword vimSyncC contained ccomment clear fromstart
793syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
794syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
795syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
796syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
797syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
798syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
799syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
800syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
801syn keyword vimSyncNone contained NONE
802
803" Additional IsCommand: here by reasons of precedence {{{2
804" ====================
805syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
806
807" Highlighting: {{{2
808" ============
dkearns04e53632024-04-11 06:18:37 +1000809syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
h-east9b53c052024-02-13 21:09:22 +0100810if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
811 syn match vimHiCtermError contained "\D\i*"
812endif
813syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100814syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100815
816syn match vimHiGroup contained "\i\+"
817syn case ignore
818syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
819syn keyword vimFgBgAttrib contained none bg background fg foreground
820syn case match
821syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
822syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
823syn case ignore
824syn 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
825syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
826
827syn case match
828syn match vimHiFontname contained "[a-zA-Z\-*]\+"
829syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
830syn match vimHiGuiRgb contained "#\x\{6}"
831
832" Highlighting: hi group key=arg ... {{{2
833syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100834syn 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 +0100835if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
836 syn match vimHiKeyError contained "\i\+="he=e-1
837endif
838syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100839syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100840syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
841syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
842syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
843syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
844syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
845syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
846syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
847syn match vimHiTermcap contained "\S\+" contains=vimNotation
848syn match vimHiNmbr contained '\d\+'
849
850" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100851syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100852
853" Highlight: link {{{2
854" see tst24 (hi def vs hi) (Jul 06, 2018)
855"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 +1100856" TODO: simplify and allow line continuations --djk
857syn 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 +0100858
859" Control Characters: {{{2
860" ==================
861syn match vimCtrlChar "[- -]"
862
863" Beginners - Patterns that involve ^ {{{2
864" =========
Doug Kearnsd65e58f2024-07-17 19:34:14 +0200865Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\\\|\n\s*#\\ + end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
866VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\\\|\n\s*"\\ + end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
867
h-east9b53c052024-02-13 21:09:22 +0100868syn 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 +1000869syn 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 +1000870
dkearnsae321b52024-06-15 23:06:17 +1000871" allowed anywhere in the file
872if !s:vim9script
873 syn match vimShebangError "^\s*\zs#!.*" display
874endif
875syn match vimShebang "\%^#!.*" display
876
h-east9b53c052024-02-13 21:09:22 +0100877syn match vimContinue "^\s*\zs\\"
dkearns059cbe82024-06-12 03:27:53 +1000878syn match vimContinueComment '^\s*\zs["#]\\ .*'
h-east9b53c052024-02-13 21:09:22 +0100879syn cluster vimContinue contains=vimContinue,vimContinueComment
880syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
881syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
dkearns04e53632024-04-11 06:18:37 +1000882syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
h-east9b53c052024-02-13 21:09:22 +0100883
884" Searches And Globals: {{{2
885" ====================
886syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
887syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +1100888syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
889syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100890
dkearns04e53632024-04-11 06:18:37 +1000891" Vim9 Script Regions: {{{2
892" ==================
893
894if s:vim9script
Doug Kearnsce064932024-04-13 18:24:01 +0200895 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment
896 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment
dkearns04e53632024-04-11 06:18:37 +1000897
Doug Kearnsce064932024-04-13 18:24:01 +0200898 syn keyword vim9Vim9ScriptArg noclear contained
899 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
dkearns04e53632024-04-11 06:18:37 +1000900endif
901
h-east9b53c052024-02-13 21:09:22 +0100902" Embedded Scripts: {{{2
903" ================
904" perl,ruby : Benoit Cerrina
905" python,tcl : Johannes Zellner
906" mzscheme, lua : Charles Campbell
907
908" Allows users to specify the type of embedded script highlighting
909" they want: (perl/python/ruby/tcl support)
910" g:vimsyn_embed == 0 : don't embed any scripts
h-east84ac2122024-06-17 18:12:30 +0200911" g:vimsyn_embed =~# 'l' : embed Lua (but only if vim supports it)
912" g:vimsyn_embed =~# 'm' : embed MzScheme (but only if vim supports it)
913" g:vimsyn_embed =~# 'p' : embed Perl (but only if vim supports it)
914" g:vimsyn_embed =~# 'P' : embed Python (but only if vim supports it)
915" g:vimsyn_embed =~# 'r' : embed Ruby (but only if vim supports it)
916" g:vimsyn_embed =~# 't' : embed Tcl (but only if vim supports it)
h-east9b53c052024-02-13 21:09:22 +0100917if !exists("g:vimsyn_embed")
918 let g:vimsyn_embed= "lmpPr"
919endif
920
921" [-- lua --] {{{3
922let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
923if !filereadable(s:luapath)
924 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
925 if filereadable(fnameescape(s:luapath))
926 let s:luapath= fnameescape(s:luapath)
927 break
928 endif
929 endfor
930endif
931if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
932 unlet! b:current_syntax
933 syn cluster vimFuncBodyList add=vimLuaRegion
934 exe "syn include @vimLuaScript ".s:luapath
Ken Takata95e90782024-08-22 21:29:39 +0200935 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimLuaScript
936 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimLuaScript
937 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+^\z(\s*\)lua\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimLuaScript
938 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+^\.$+ contains=@vimLuaScript
h-east9b53c052024-02-13 21:09:22 +0100939 syn cluster vimFuncBodyList add=vimLuaRegion
940else
Ken Takata95e90782024-08-22 21:29:39 +0200941 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
942 syn region vimEmbedError start=+lua\s*<<\s*\z(\S*\)+ end=+^\z1$+
943 syn region vimEmbedError start=+^\z(\s*\)lua\s*<<\s*trim\s\*$+ end=+^\z1\.$+
944 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +0100945endif
946unlet s:luapath
947
948" [-- perl --] {{{3
949let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
950if !filereadable(s:perlpath)
951 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
952 if filereadable(fnameescape(s:perlpath))
953 let s:perlpath= fnameescape(s:perlpath)
954 break
955 endif
956 endfor
957endif
958if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
959 unlet! b:current_syntax
960 syn cluster vimFuncBodyList add=vimPerlRegion
961 exe "syn include @vimPerlScript ".s:perlpath
Ken Takata95e90782024-08-22 21:29:39 +0200962 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPerlScript
963 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimPerlScript
964 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPerlScript
965 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
h-east9b53c052024-02-13 21:09:22 +0100966 syn cluster vimFuncBodyList add=vimPerlRegion
967else
Ken Takata95e90782024-08-22 21:29:39 +0200968 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
969 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(\S*\)+ end=+^\z1$+
970 syn region vimEmbedError start=+^\z(\s*\)pe\%[rl]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
971 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +0100972endif
973unlet s:perlpath
974
975" [-- ruby --] {{{3
976let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
977if !filereadable(s:rubypath)
978 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
979 if filereadable(fnameescape(s:rubypath))
980 let s:rubypath= fnameescape(s:rubypath)
981 break
982 endif
983 endfor
984endif
985if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
986 syn cluster vimFuncBodyList add=vimRubyRegion
987 unlet! b:current_syntax
988 exe "syn include @vimRubyScript ".s:rubypath
Ken Takata95e90782024-08-22 21:29:39 +0200989 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimRubyScript
990 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimRubyScript
991 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimRubyScript
992 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub\%[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
h-east9b53c052024-02-13 21:09:22 +0100993 syn cluster vimFuncBodyList add=vimRubyRegion
994else
Ken Takata95e90782024-08-22 21:29:39 +0200995 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
996 syn region vimEmbedError start=+rub\%[y]\s*<<\s*\z(\S.*\)+ end=+^\z1$+
997 syn region vimEmbedError start=+^\z(\s*\)rub\%[y]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
998 syn region vimEmbedError start=+rub\%[y]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +0100999endif
1000unlet s:rubypath
1001
1002" [-- python --] {{{3
1003let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
1004if !filereadable(s:pythonpath)
1005 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
1006 if filereadable(fnameescape(s:pythonpath))
1007 let s:pythonpath= fnameescape(s:pythonpath)
1008 break
1009 endif
1010 endfor
1011endif
1012if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
1013 unlet! b:current_syntax
1014 syn cluster vimFuncBodyList add=vimPythonRegion
1015 exe "syn include @vimPythonScript ".s:pythonpath
Ken Takata95e90782024-08-22 21:29:39 +02001016 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimPythonScript
1017 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1018 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimPythonScript
1019 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+ contains=@vimPythonScript
1020 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S\+\)+ end=+^\z1$+ contains=@vimPythonScript
1021 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=$+ end=+^\.$+ contains=@vimPythonScript
h-east9b53c052024-02-13 21:09:22 +01001022 syn cluster vimFuncBodyList add=vimPythonRegion
1023else
Ken Takata95e90782024-08-22 21:29:39 +02001024 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1025 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*\z(\S\+\)+ end=+^\z1$+
1026 syn region vimEmbedError start=+^\z(\s*\)py\%[thon][3x]\=\s*<<\s*trim\s*$+ end=+^\z1\.$+
1027 syn region vimEmbedError start=+py\%[thon][3x]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001028endif
1029unlet s:pythonpath
1030
1031" [-- tcl --] {{{3
1032if has("win32") || has("win95") || has("win64") || has("win16")
1033 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
1034 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
1035else
1036 let s:trytcl= 1
1037endif
1038if s:trytcl
1039 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
1040 if !filereadable(s:tclpath)
1041 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
1042 if filereadable(fnameescape(s:tclpath))
1043 let s:tclpath= fnameescape(s:tclpath)
1044 break
1045 endif
1046 endfor
1047 endif
1048 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
1049 unlet! b:current_syntax
1050 syn cluster vimFuncBodyList add=vimTclRegion
1051 exe "syn include @vimTclScript ".s:tclpath
Ken Takata95e90782024-08-22 21:29:39 +02001052 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimTclScript
1053 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimTclScript
1054 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimTclScript
1055 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+ contains=@vimTclScript
h-east9b53c052024-02-13 21:09:22 +01001056 syn cluster vimFuncBodyList add=vimTclScript
1057 else
Ken Takata95e90782024-08-22 21:29:39 +02001058 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1059 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1060 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1061 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001062 endif
1063 unlet s:tclpath
1064else
Ken Takata95e90782024-08-22 21:29:39 +02001065 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1066 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*\z(\S*\)+ end=+^\z1$+
1067 syn region vimEmbedError start=+^\z(\s*\)tc\%[l]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1068 syn region vimEmbedError start=+tc\%[l]\=\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001069endif
1070unlet s:trytcl
1071
1072" [-- mzscheme --] {{{3
1073let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
1074if !filereadable(s:mzschemepath)
1075 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
1076 if filereadable(fnameescape(s:mzschemepath))
1077 let s:mzschemepath= fnameescape(s:mzschemepath)
1078 break
1079 endif
1080 endfor
1081endif
1082if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
1083 unlet! b:current_syntax
1084 let s:iskKeep= &isk
1085 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1086 exe "syn include @vimMzSchemeScript ".s:mzschemepath
1087 let &isk= s:iskKeep
1088 unlet s:iskKeep
Ken Takata95e90782024-08-22 21:29:39 +02001089 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+ contains=@vimMzSchemeScript
1090 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+ contains=@vimMzSchemeScript
1091 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s*$+ end=+^\z1\.$+ contains=@vimMzSchemeScript
1092 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+ contains=@vimMzSchemeScript
h-east9b53c052024-02-13 21:09:22 +01001093 syn cluster vimFuncBodyList add=vimMzSchemeRegion
1094else
Ken Takata95e90782024-08-22 21:29:39 +02001095 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\+\z(\S\+\)+ end=+^\z1\z2$+
1096 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(\S*\)+ end=+^\z1$+
1097 syn region vimEmbedError start=+^\z(\s*\)mz\%[scheme]\s*<<\s*trim\s\*$+ end=+^\z1\.$+
1098 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+^\.$+
h-east9b53c052024-02-13 21:09:22 +01001099endif
1100unlet s:mzschemepath
1101
1102" Synchronize (speed) {{{2
1103"============
1104if exists("g:vimsyn_minlines")
1105 exe "syn sync minlines=".g:vimsyn_minlines
1106endif
1107exe "syn sync maxlines=".s:vimsyn_maxlines
1108syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +11001109syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +01001110syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
1111
1112" ====================
1113" Highlighting Settings {{{2
1114" ====================
1115
1116if !exists("skip_vim_syntax_inits")
1117 if !exists("g:vimsyn_noerror")
1118 hi def link vimBehaveError vimError
1119 hi def link vimCollClassErr vimError
1120 hi def link vimErrSetting vimError
1121 hi def link vimEmbedError vimError
1122 hi def link vimFTError vimError
1123 hi def link vimFunctionError vimError
1124 hi def link vimFunc vimError
1125 hi def link vimHiAttribList vimError
1126 hi def link vimHiCtermError vimError
1127 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +01001128 hi def link vimMapModErr vimError
dkearnsae321b52024-06-15 23:06:17 +10001129 hi def link vimShebangError vimError
h-east9b53c052024-02-13 21:09:22 +01001130 hi def link vimSubstFlagErr vimError
1131 hi def link vimSynCaseError vimError
1132 hi def link vimSynFoldMethodError vimError
1133 hi def link vimBufnrWarn vimWarn
1134 endif
1135
1136 hi def link vimAbb vimCommand
1137 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +11001138 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001139 hi def link vimAugroupError vimError
1140 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001141 hi def link vimAutoCmd vimCommand
1142 hi def link vimAutoEvent Type
1143 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001144 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001145 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001146 hi def link vimBehaveModel vimBehave
1147 hi def link vimBehave vimCommand
1148 hi def link vimBracket Delimiter
Doug Kearns99984fc2024-07-18 20:45:19 +02001149 hi def link vimCall vimCommand
dkearnsa3bddb72024-06-14 01:48:10 +10001150 hi def link vimCatch vimCommand
h-east9b53c052024-02-13 21:09:22 +01001151 hi def link vimCmplxRepeat SpecialChar
1152 hi def link vimCommand Statement
1153 hi def link vimComment Comment
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001154 hi def link vimCommentError vimError
h-east9b53c052024-02-13 21:09:22 +01001155 hi def link vimCommentString vimString
1156 hi def link vimCommentTitle PreProc
1157 hi def link vimCondHL vimCommand
1158 hi def link vimConst vimCommand
1159 hi def link vimContinue Special
1160 hi def link vimContinueComment vimComment
1161 hi def link vimCtrlChar SpecialChar
Doug Kearnsfc64ac02024-06-22 11:20:36 +02001162 hi def link vimDefComment vim9Comment
dkearns35e6f4c2024-03-22 06:41:10 +11001163 hi def link vimDefKey vimCommand
1164 hi def link vimDefParam vimVar
dkearnsb1427b42024-02-28 05:59:30 +11001165 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001166 hi def link vimEchohlNone vimGroup
1167 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001168 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001169 hi def link vimEndfunction vimCommand
1170 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001171 hi def link vimEnvvar PreProc
1172 hi def link vimError Error
1173 hi def link vimEscape Special
1174 hi def link vimFBVar vimVar
1175 hi def link vimFgBgAttrib vimHiAttrib
1176 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001177 hi def link vimFor vimCommand
1178 hi def link vimFTCmd vimCommand
1179 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001180 hi def link vimFuncBang vimBang
1181 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001182 hi def link vimFuncKey vimCommand
1183 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001184 hi def link vimFuncMod Special
1185 hi def link vimFuncParam vimVar
1186 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001187 hi def link vimFuncSID Special
1188 hi def link vimFuncVar Identifier
1189 hi def link vimGroupAdd vimSynOption
1190 hi def link vimGroupName vimGroup
1191 hi def link vimGroupRem vimSynOption
1192 hi def link vimGroupSpecial Special
1193 hi def link vimGroup Type
1194 hi def link vimHiAttrib PreProc
1195 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001196 hi def link vimHiClear Type
1197 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001198 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001199 hi def link vimHiCtermfont vimHiTerm
1200 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001201 hi def link vimHiCTerm vimHiTerm
1202 hi def link vimHighlight vimCommand
1203 hi def link vimHiGroup vimGroupName
1204 hi def link vimHiGuiFgBg vimHiTerm
1205 hi def link vimHiGuiFont vimHiTerm
1206 hi def link vimHiGuiRgb vimNumber
1207 hi def link vimHiGui vimHiTerm
1208 hi def link vimHiNmbr Number
1209 hi def link vimHiStartStop vimHiTerm
1210 hi def link vimHiTerm Type
1211 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001212 hi def link vimInsert vimString
1213 hi def link vimIskSep Delimiter
dkearns04e53632024-04-11 06:18:37 +10001214 hi def link vim9KeymapLineComment vimKeymapLineComment
h-east9b53c052024-02-13 21:09:22 +01001215 hi def link vimKeymapLineComment vimComment
1216 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001217 hi def link vimLet vimCommand
1218 hi def link vimLetHereDoc vimString
1219 hi def link vimLetHereDocStart Special
1220 hi def link vimLetHereDocStop Special
1221 hi def link vimLetRegister Special
1222 hi def link vimLineComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001223 hi def link vimMapBang vimBang
1224 hi def link vimMapModKey vimFuncSID
1225 hi def link vimMapMod vimBracket
1226 hi def link vimMap vimCommand
1227 hi def link vimMark Number
1228 hi def link vimMarkNumber vimNumber
Doug Kearnse85fdc72024-07-07 20:45:37 +02001229 hi def link vimMatch vimCommand
1230 hi def link vimMatchGroup vimGroup
1231 hi def link vimMatchNone vimGroup
h-east9b53c052024-02-13 21:09:22 +01001232 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001233 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001234 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001235 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001236 hi def link vimMenu vimCommand
1237 hi def link vimMenuNotation vimNotation
1238 hi def link vimMenuPriority Number
1239 hi def link vimMenuStatus Special
1240 hi def link vimMenutranslateComment vimComment
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +03001241 hi def link vimMethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001242 hi def link vimMtchComment vimComment
1243 hi def link vimNorm vimCommand
1244 hi def link vimNotation Special
1245 hi def link vimNotFunc vimCommand
1246 hi def link vimNotPatSep vimString
1247 hi def link vimNumber Number
1248 hi def link vimOperError Error
1249 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001250 hi def link vimOption PreProc
1251 hi def link vimParenSep Delimiter
1252 hi def link vimPatSepErr vimError
1253 hi def link vimPatSepR vimPatSep
1254 hi def link vimPatSep SpecialChar
1255 hi def link vimPatSepZone vimString
1256 hi def link vimPatSepZ vimPatSep
1257 hi def link vimPattern Type
1258 hi def link vimPlainMark vimMark
1259 hi def link vimPlainRegister vimRegister
1260 hi def link vimRegister SpecialChar
1261 hi def link vimScriptDelim Comment
1262 hi def link vimSearchDelim Statement
1263 hi def link vimSearch vimString
1264 hi def link vimSep Delimiter
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001265 hi def link vimSet vimCommand
1266 hi def link vimSetAll vimOption
1267 hi def link vimSetBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001268 hi def link vimSetMod vimOption
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001269 hi def link vimSetSep vimSep
h-east9b53c052024-02-13 21:09:22 +01001270 hi def link vimSetString vimString
Doug Kearnsddbb6fe2024-07-24 20:21:22 +02001271 hi def link vimSetTermcap vimOption
dkearnsae321b52024-06-15 23:06:17 +10001272 hi def link vimShebang PreProc
Doug Kearns262e25e2024-06-14 20:16:35 +02001273 hi def link vimSleep vimCommand
1274 hi def link vimSleepArg Constant
1275 hi def link vimSleepBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001276 hi def link vimSpecFile Identifier
1277 hi def link vimSpecFileMod vimSpecFile
1278 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001279 hi def link vimStringCont vimString
1280 hi def link vimString String
1281 hi def link vimStringEnd vimString
1282 hi def link vimStringInterpolationBrace vimEscape
1283 hi def link vimSubst1 vimSubst
1284 hi def link vimSubstDelim Delimiter
1285 hi def link vimSubstFlags Special
1286 hi def link vimSubstSubstr SpecialChar
1287 hi def link vimSubstTwoBS vimString
1288 hi def link vimSubst vimCommand
1289 hi def link vimSynCaseError Error
1290 hi def link vimSynCase Type
1291 hi def link vimSyncC Type
1292 hi def link vimSyncError Error
1293 hi def link vimSyncGroupName vimGroupName
1294 hi def link vimSyncGroup vimGroupName
1295 hi def link vimSyncKey Type
1296 hi def link vimSyncNone Type
1297 hi def link vimSynContains vimSynOption
1298 hi def link vimSynError Error
1299 hi def link vimSynFoldMethodError Error
1300 hi def link vimSynFoldMethod Type
1301 hi def link vimSynKeyContainedin vimSynContains
1302 hi def link vimSynKeyOpt vimSynOption
1303 hi def link vimSynCchar vimSynOption
1304 hi def link vimSynCcharValue Character
1305 hi def link vimSynMtchGrp vimSynOption
1306 hi def link vimSynMtchOpt vimSynOption
1307 hi def link vimSynNextgroup vimSynOption
1308 hi def link vimSynNotPatRange vimSynRegPat
1309 hi def link vimSynOption Special
1310 hi def link vimSynPatRange vimString
1311 hi def link vimSynRegOpt vimSynOption
1312 hi def link vimSynRegPat vimString
1313 hi def link vimSynReg Type
1314 hi def link vimSyntax vimCommand
1315 hi def link vimSynType vimSpecial
dkearnsa3bddb72024-06-14 01:48:10 +10001316 hi def link vimThrow vimCommand
h-east9b53c052024-02-13 21:09:22 +01001317 hi def link vimTodo Todo
1318 hi def link vimType Type
1319 hi def link vimUnlet vimCommand
1320 hi def link vimUnletBang vimBang
1321 hi def link vimUnmap vimMap
1322 hi def link vimUserAttrbCmpltFunc Special
1323 hi def link vimUserAttrbCmplt vimSpecial
1324 hi def link vimUserAttrbKey vimOption
1325 hi def link vimUserAttrb vimSpecial
1326 hi def link vimUserAttrbError Error
1327 hi def link vimUserCmdError Error
1328 hi def link vimUserCommand vimCommand
1329 hi def link vimUserFunc Normal
1330 hi def link vimVar Identifier
1331 hi def link vimWarn WarningMsg
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001332
1333 hi def link vim9Boolean Boolean
1334 hi def link vim9Comment Comment
1335 hi def link vim9CommentError vimError
1336 hi def link vim9CommentTitle PreProc
1337 hi def link vim9Const vimCommand
1338 hi def link vim9Final vimCommand
1339 hi def link vim9For vimCommand
1340 hi def link vim9LineComment vimComment
1341 hi def link vim9Null Constant
1342 hi def link vim9Var vimCommand
1343 hi def link vim9Variable vimVar
1344 hi def link vim9Vim9Script vimCommand
1345 hi def link vim9Vim9ScriptArg Special
h-east9b53c052024-02-13 21:09:22 +01001346endif
1347
1348" Current Syntax Variable: {{{2
1349let b:current_syntax = "vim"
1350
1351" ---------------------------------------------------------------------
1352" Cleanup: {{{1
Doug Kearnsd65e58f2024-07-17 19:34:14 +02001353delc Vim9
1354delc VimL
h-east9b53c052024-02-13 21:09:22 +01001355delc VimFolda
1356delc VimFoldf
Doug Kearnsce064932024-04-13 18:24:01 +02001357delc VimFoldh
1358delc VimFoldH
h-east9b53c052024-02-13 21:09:22 +01001359delc VimFoldl
1360delc VimFoldm
1361delc VimFoldp
1362delc VimFoldP
1363delc VimFoldr
1364delc VimFoldt
1365let &cpo = s:keepcpo
dkearns04e53632024-04-11 06:18:37 +10001366unlet s:keepcpo s:vim9script
dkearns5d67aef2024-03-10 04:01:22 +11001367" vim:ts=18 fdm=marker ft=vim