blob: 46285f3dba93a7c7fc60d9504720cd0bfd0cfe4e [file] [log] [blame]
h-east9b53c052024-02-13 21:09:22 +01001" Vim syntax file
2" Language: Vim script
3" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
h-east5c3855b2024-02-14 21:00:01 +01004" Doug Kearns <dougkearns@gmail.com>
h-east9b53c052024-02-13 21:09:22 +01005" URL: https://github.com/vim-jp/syntax-vim-ex
dkearnsec21baf2024-03-20 04:04:42 +11006" Last Change: 2024 Mar 19
Christian Brabandtf9ca1392024-02-19 20:37:11 +01007" Former Maintainer: Charles E. Campbell
h-east9b53c052024-02-13 21:09:22 +01008" Base File URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
9" Base File Version: 9.0-25
h-east9b53c052024-02-13 21:09:22 +010010
11" DO NOT CHANGE DIRECTLY.
12" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
13" (Search string "GEN_SYN_VIM:" in this file)
14
15" Automatically generated keyword lists: {{{1
16
17" Quit when a syntax file was already loaded {{{2
18if exists("b:current_syntax")
19 finish
20endif
h-east9b53c052024-02-13 21:09:22 +010021let s:keepcpo= &cpo
22set cpo&vim
23
24" 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
32syn keyword vimCommand contained 2mat[ch] 3mat[ch]
33
Aliaksei Budaveidfcef892024-02-18 21:02:14 +030034" Lower priority for _new_ to distinguish constructors from the command.
35syn match vimCommand contained "\<new\>(\@!"
h-east9b53c052024-02-13 21:09:22 +010036syn match vimCommand contained "\<z[-+^.=]\=\>"
37syn 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
38
39" vimOptions are caught only when contained in a vimSet {{{2
40" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR=''
41
42" vimOptions: These are the turn-off setting variants {{{2
43" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
44
45" vimOptions: These are the invertible variants {{{2
46" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
47
48" termcap codes (which can also be set) {{{2
49" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR=''
50" term key codes
51syn 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
52syn match vimOption contained "t_%1"
53syn match vimOption contained "t_#2"
54syn match vimOption contained "t_#4"
55syn match vimOption contained "t_@7"
56syn match vimOption contained "t_*7"
57syn match vimOption contained "t_&8"
58syn match vimOption contained "t_%i"
59syn match vimOption contained "t_k;"
60
61" unsupported settings: some were supported by vi but don't do anything in vim {{{2
62" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
63
64" AutoCmd Events {{{2
65syn case ignore
66" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
67
68" Highlight commonly used Groupnames {{{2
69syn 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
70
71" Default highlighting groups {{{2
72" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
73syn case match
74
75" Function Names {{{2
76" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
77
78"--- syntax here and above generated by mkvimvim ---
79" Special Vim Highlighting (not automatic) {{{1
80
81" Set up folding commands for this syntax highlighting file {{{2
82if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhlmpPrt]'
83 if g:vimsyn_folding =~# 'a'
84 com! -nargs=* VimFolda <args> fold
85 else
86 com! -nargs=* VimFolda <args>
87 endif
88 if g:vimsyn_folding =~# 'f'
89 com! -nargs=* VimFoldf <args> fold
90 else
91 com! -nargs=* VimFoldf <args>
92 endif
93 if g:vimsyn_folding =~# 'h'
94 com! -nargs=* VimFoldh <args> fold
95 else
96 com! -nargs=* VimFoldh <args>
97 endif
98 if g:vimsyn_folding =~# 'l'
99 com! -nargs=* VimFoldl <args> fold
100 else
101 com! -nargs=* VimFoldl <args>
102 endif
103 if g:vimsyn_folding =~# 'm'
104 com! -nargs=* VimFoldm <args> fold
105 else
106 com! -nargs=* VimFoldm <args>
107 endif
108 if g:vimsyn_folding =~# 'p'
109 com! -nargs=* VimFoldp <args> fold
110 else
111 com! -nargs=* VimFoldp <args>
112 endif
113 if g:vimsyn_folding =~# 'P'
114 com! -nargs=* VimFoldP <args> fold
115 else
116 com! -nargs=* VimFoldP <args>
117 endif
118 if g:vimsyn_folding =~# 'r'
119 com! -nargs=* VimFoldr <args> fold
120 else
121 com! -nargs=* VimFoldr <args>
122 endif
123 if g:vimsyn_folding =~# 't'
124 com! -nargs=* VimFoldt <args> fold
125 else
126 com! -nargs=* VimFoldt <args>
127 endif
128else
129 com! -nargs=* VimFolda <args>
130 com! -nargs=* VimFoldf <args>
131 com! -nargs=* VimFoldh <args>
132 com! -nargs=* VimFoldl <args>
133 com! -nargs=* VimFoldm <args>
134 com! -nargs=* VimFoldp <args>
135 com! -nargs=* VimFoldP <args>
136 com! -nargs=* VimFoldr <args>
137 com! -nargs=* VimFoldt <args>
138endif
139
140" Deprecated variable options {{{2
141if exists("g:vim_minlines")
142 let g:vimsyn_minlines= g:vim_minlines
143endif
144if exists("g:vim_maxlines")
145 let g:vimsyn_maxlines= g:vim_maxlines
146endif
147if exists("g:vimsyntax_noerror")
148 let g:vimsyn_noerror= g:vimsyntax_noerror
149endif
150
151" Variable options {{{2
152if exists("g:vim_maxlines")
153 let s:vimsyn_maxlines= g:vim_maxlines
154else
155 let s:vimsyn_maxlines= 60
156endif
157
158" Numbers {{{2
159" =======
dkearns5cd86c62024-03-12 07:40:58 +1100160syn case ignore
161syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
162syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
163syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
164syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
165syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
166syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
167syn case match
h-east9b53c052024-02-13 21:09:22 +0100168
169" All vimCommands are contained by vimIsCommand. {{{2
dkearns61887b32024-03-15 23:45:48 +1100170syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,@vimEcho,vimExecute,vimIsCommand,vimExtCmd,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSyntax,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
dkearnsc4aef9a2024-03-04 02:42:47 +1100171syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100172syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
173syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
174syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
175syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
176syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
177syn match vimVar "\s\zs&t_k;"
178syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
179syn keyword vimCommand contained in
180
dkearnsb1427b42024-02-28 05:59:30 +1100181syn cluster vimExprList contains=vimEnvvar,vimFunc,vimFuncVar,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar
182
h-east9b53c052024-02-13 21:09:22 +0100183" Insertions And Appends: insert append {{{2
184" (buftype != nofile test avoids having append, change, insert show up in the command window)
185" =======================
186if &buftype != 'nofile'
187 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$""
188 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$""
189 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$""
190endif
191
192" Behave! {{{2
193" =======
h-east9b53c052024-02-13 21:09:22 +0100194if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
195 syn match vimBehaveError contained "[^ ]\+"
196endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100197syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
198syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
199syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100200
201" Filetypes {{{2
202" =========
203syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
204if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
205 syn match vimFTError contained "\I\i*"
206endif
207syn keyword vimFTCmd contained filet[ype]
208syn keyword vimFTOption contained detect indent off on plugin
209
210" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
211" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
dkearnse5c9ba62024-03-05 05:15:42 +1100212syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vim9Comment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimRegion,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
dkearnsc4aef9a2024-03-04 02:42:47 +1100213syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100214if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100215 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 +0100216else
dkearnsc4aef9a2024-03-04 02:42:47 +1100217 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 +0100218endif
h-east9b53c052024-02-13 21:09:22 +0100219if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100220 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100221endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100222
223syn match vimAutoCmdGroup contained "\S\+"
224syn match vimAugroupEnd contained "\c\<END\>"
225syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
226syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100227
228" Operators: {{{2
229" =========
230syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimType,vimRegister,@vimContinue,vim9Comment,vimVar
231syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
232syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
233syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
234syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=vimoperStar,@vimOperGroup
235syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
236if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
237 syn match vimOperError ")"
238endif
239
240" Functions : Tag is provided for those who wish to highlight tagged functions {{{2
241" =========
242syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
dkearnse5c9ba62024-03-05 05:15:42 +1100243syn cluster vimFuncBodyList contains=@vimCmdList,vimCmplxRepeat,vimComment,vim9Comment,vimContinue,vimCtrlChar,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimLetHereDoc,vimLineComment,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst
h-east9b53c052024-02-13 21:09:22 +0100244syn match vimFunction "\<\(fu\%[nction]\)!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300245syn match vimFunction "\<def\s\+new\i\{-}(" contains=@vimFuncList nextgroup=vimFuncBody
h-east9b53c052024-02-13 21:09:22 +0100246syn match vimFunction "\<def!\=\s\+\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
247"syn match vimFunction "\<def!\=\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
248
249if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
250 syn region vimFuncBody contained fold start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList
251else
252 syn region vimFuncBody contained start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList
253endif
254syn match vimFuncVar contained "a:\(\K\k*\|\d\+\)"
255syn match vimFuncSID contained "\c<sid>\|\<s:"
256syn keyword vimFuncKey contained fu[nction]
257syn keyword vimFuncKey contained def
258syn match vimFuncBlank contained "\s\+"
259
260syn keyword vimPattern contained start skip end
261
262" vimTypes : new for vim9
263syn match vimType ":\s*\zs\<\(bool\|number\|float\|string\|blob\|list<\|dict<\|job\|channel\|func\)\>"
264
265" Keymaps: (Vim Project Addition) {{{2
266" =======
267
268" TODO: autogenerated vimCommand keyword list does not handle all abbreviations
269" : handle Vim9 script comments when something like #13104 is merged
270syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,vimKeymapLineComment
271syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
272syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
273syn match vimKeymapTailComment "\S.*" contained
274syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
275
276syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
277
278" Special Filenames, Modifiers, Extension Removal: {{{2
279" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100280syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
281syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
282syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
283syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
284syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
285syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100286syn match vimSpecFileMod "\(:[phtre]\)\+" contained
287
288" User-Specified Commands: {{{2
289" =======================
dkearnse5c9ba62024-03-05 05:15:42 +1100290syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,vimComment,vim9Comment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
h-east9b53c052024-02-13 21:09:22 +0100291syn keyword vimUserCommand contained com[mand]
292syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter
293syn match vimUserAttrbError contained "-\a\+\ze\s"
294syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
295syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
296syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
297syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
298syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey
299syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey
300syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey
301syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey
302if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
303 syn match vimUserCmdError contained "\S\+\>"
304endif
305syn case ignore
306syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
307" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
308syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
309syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
310
311syn case match
312syn match vimUserAttrbCmplt contained "custom,\u\w*"
313
314" Lower Priority Comments: after some vim commands... {{{2
315" =======================
316syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
317syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
318syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
319syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
320" Vim9 comments - TODO: might be highlighted while they don't work
321syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
322syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
323syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
324" Vim9 comment inside expression
325syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
326syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
327syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
328
329" Environment Variables: {{{2
330" =====================
331syn match vimEnvvar "\$\I\i*"
332syn match vimEnvvar "\${\I\i*}"
333
334" In-String Specials: {{{2
335" Try to catch strings, if nothing else matches (therefore it must precede the others!)
336" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
337syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
338syn match vimPatSepErr contained "\\)"
339syn match vimPatSep contained "\\|"
340syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
341syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
342syn match vimNotPatSep contained "\\\\"
343syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
344syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup
345syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+
h-east9b53c052024-02-13 21:09:22 +0100346"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
347syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
348syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
349syn match vimEscape contained "\\."
350" syn match vimEscape contained +\\[befnrt\"]+
351syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
352syn match vimEscape contained "\\<" contains=vimNotation
353syn match vimEscape contained "\\<\*[^>]*>\=>"
354
dkearnsb1427b42024-02-28 05:59:30 +1100355syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
356syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
357syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
358syn match vimStringInterpolationBrace contained "{{"
359syn match vimStringInterpolationBrace contained "}}"
h-east9b53c052024-02-13 21:09:22 +0100360
361" Substitutions: {{{2
362" =============
363syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
364syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
365syn cluster vimSubstList add=vimCollection
dkearns2c51e152024-02-27 07:10:18 +1100366syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
367syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
368syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
369syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
370syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
371syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
372" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
373" : # is allowed but "not recommended" (see :h pattern-delimiter)
374syn 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
375syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
376syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
377syn match vimCollClassErr contained "\[:.\{-\}:\]"
378syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
379syn match vimSubstSubstr contained "\\z\=\d"
380syn match vimSubstTwoBS contained "\\\\"
381syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
382syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100383
384" 'String': {{{2
385syn match vimString "[^(,]'[^']\{-}\zs'"
386
387" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100388syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
389syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
390syn match vimMark ",\zs'[<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
391syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
392syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
393syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100394syn match vimPlainMark contained "'[a-zA-Z0-9]"
395syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
396
397syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
398syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
399syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
400syn match vimRegister '@"'
401syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
402syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
403
404syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
405syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
406
407syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
408syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
409syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
410
411" Complex Repeats: (:h complex-repeat) {{{2
412" ===============
413syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
414syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
415
416" Set command and associated set-options (vimOptions) with comment {{{2
417syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\.\n\@!" end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vim9Comment,vimSetString,vimSetMod
418syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
419syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
420syn match vimSetSep contained "[,:]"
421syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
422
423" Let And Var: {{{2
424" ===========
425syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
426syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
427syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
428
429syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
430syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
431syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
432
433VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$'
434syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
435
436" For: {{{2
437" ===
438syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
439" Abbreviations: {{{2
440" =============
441" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
442
443" Autocmd: {{{2
444" =======
445syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
446syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
447syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod
448syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
449syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)"
450
451" Echo And Execute: -- prefer strings! {{{2
452" ================
dkearns61887b32024-03-15 23:45:48 +1100453" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100454
dkearns61887b32024-03-15 23:45:48 +1100455syn region vimEcho
456 \ matchgroup=vimCommand
457 \ start="\<ec\%[ho]\>"
458 \ start="\<echoe\%[rr]\>"
459 \ start="\<echom\%[sg]\>"
460 \ start="\<echoc\%[onsole]\>"
461 \ start="\<echon\>"
462 \ start="\<echow\%[indow]\>"
463 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
464 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
465
466syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100467syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100468syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100469syn case match
470
dkearns61887b32024-03-15 23:45:48 +1100471syn cluster vimEcho contains=vimEcho.*
472
473syn 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 +1100474
h-east9b53c052024-02-13 21:09:22 +0100475" Maps: {{{2
476" ====
477syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
478syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
479" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns16249702024-02-23 05:45:05 +1100480" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
481syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
h-east9b53c052024-02-13 21:09:22 +0100482" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns5d67aef2024-03-10 04:01:22 +1100483syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
484syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
485syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100486syn 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 +1100487syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
488" assume a continuation comment introduces the RHS
489syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100490syn case ignore
491syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
492syn case match
493
494" Menus: {{{2
495" =====
dkearns62b26042024-03-10 03:43:28 +1100496" NOTE: tail comments disallowed
497" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
498syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
499syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
500syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100501syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
502syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100503syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
504syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
505syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
506syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
507syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
508
509syn region vimMenutranslate
510 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
511 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
512 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
513 \ contains=@vimContinue,vimMenutranslateName keepend transparent
514" oneline is sufficient to match the current formatting in runtime/lang/*.vim
515syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
516syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100517
518" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
519" ======================
520syn case ignore
521syn 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
522
523syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
524syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
525syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
526syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
527syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
528syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
529syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
530
531syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
532syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
533syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
534syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
535syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
536syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
537
538syn match vimBracket contained "[\\<>]"
539syn case match
540
541" User Function Highlighting: {{{2
542" (following Gautam Iyer's suggestion)
543" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100544syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
545syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
546syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100547
548" User Command Highlighting: {{{2
549syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
550
551" Errors And Warnings: {{{2
552" ====================
553if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300554 " TODO: The new-prefix exception should only apply to constructor definitions.
555 syn match vimFunctionError "\s\zs\%(new\)\@![a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100556 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
557 syn match vimElseIfErr "\<else\s\+if\>"
558 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
559endif
560
561syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
562
563" Norm: {{{2
564" ====
565syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
566syn match vimNormCmds contained ".*$"
567
568" Syntax: {{{2
569"=======
570syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
571syn 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
572syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
573
574if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
575 syn match vimSynError contained "\i\+"
576 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
577endif
578syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
579syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
580syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
581if has("conceal")
582 " no whitespace allowed after '='
583 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
584 syn match vimSynCcharValue contained "\S"
585endif
586
587syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment
588syn match vimAuSyntax contained "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment
589syn cluster vimFuncBodyList add=vimSyntax
590
591" Syntax: case {{{2
592syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
593if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
594 syn match vimSynCaseError contained "\i\+"
595endif
596syn keyword vimSynCase contained ignore match
597
598" Syntax: clear {{{2
599syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
600
601" Syntax: cluster {{{2
602syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
603syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
604syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
605syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100606
607" Syntax: foldlevel {{{2
608syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
609if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
610 syn match vimSynFoldMethodError contained "\i\+"
611endif
612syn keyword vimSynFoldMethod contained start minimum
613
614" Syntax: iskeyword {{{2
615syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
616syn match vimIskList contained '\S\+' contains=vimIskSep
617syn match vimIskSep contained ','
618
619" Syntax: include {{{2
620syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100621
622" Syntax: keyword {{{2
623syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
624syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
625syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
626syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100627
628" Syntax: match {{{2
629syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
630syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
631syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
632syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100633
634" Syntax: off and on {{{2
635syn keyword vimSynType contained enable list manual off on reset
636
637" Syntax: region {{{2
638syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
639syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
640syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
641syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
642syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
643syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
644syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
645syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
646syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
647syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
648syn match vimSynPatMod contained "lc=\d\+"
649syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
650syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
651syn match vimSynNotPatRange contained "\\\\\|\\\["
652syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100653
654" Syntax: sync {{{2
655" ============
656syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
657if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
658 syn match vimSyncError contained "\i\+"
659endif
660syn keyword vimSyncC contained ccomment clear fromstart
661syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
662syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
663syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
664syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
665syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
666syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
667syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
668syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
669syn keyword vimSyncNone contained NONE
670
671" Additional IsCommand: here by reasons of precedence {{{2
672" ====================
673syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
674
675" Highlighting: {{{2
676" ============
677syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment,vim9Comment
678if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
679 syn match vimHiCtermError contained "\D\i*"
680endif
681syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100682syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100683
684syn match vimHiGroup contained "\i\+"
685syn case ignore
686syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
687syn keyword vimFgBgAttrib contained none bg background fg foreground
688syn case match
689syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
690syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
691syn case ignore
692syn 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
693syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
694
695syn case match
696syn match vimHiFontname contained "[a-zA-Z\-*]\+"
697syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
698syn match vimHiGuiRgb contained "#\x\{6}"
699
700" Highlighting: hi group key=arg ... {{{2
701syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100702syn 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 +0100703if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
704 syn match vimHiKeyError contained "\i\+="he=e-1
705endif
706syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100707syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100708syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
709syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
710syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
711syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
712syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
713syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
714syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
715syn match vimHiTermcap contained "\S\+" contains=vimNotation
716syn match vimHiNmbr contained '\d\+'
717
718" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100719syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100720
721" Highlight: link {{{2
722" see tst24 (hi def vs hi) (Jul 06, 2018)
723"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 +1100724" TODO: simplify and allow line continuations --djk
725syn 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 +0100726
727" Control Characters: {{{2
728" ==================
729syn match vimCtrlChar "[- -]"
730
731" Beginners - Patterns that involve ^ {{{2
732" =========
733syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle,vimComment
734syn match vimLineComment +^[ \t:]*"\("[^"]*"\|[^"]\)*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
735syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
736syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
737" Note: Look-behind to work around nextgroup skipnl consuming leading whitespace and preventing a match
738syn match vimContinue "^\s*\zs\\"
739syn match vimContinueComment '^\s*\zs["#]\\ .*' contained
740syn cluster vimContinue contains=vimContinue,vimContinueComment
741syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
742syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
743
744" Searches And Globals: {{{2
745" ====================
746syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
747syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +1100748syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
749syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100750
751" Embedded Scripts: {{{2
752" ================
753" perl,ruby : Benoit Cerrina
754" python,tcl : Johannes Zellner
755" mzscheme, lua : Charles Campbell
756
757" Allows users to specify the type of embedded script highlighting
758" they want: (perl/python/ruby/tcl support)
759" g:vimsyn_embed == 0 : don't embed any scripts
760" g:vimsyn_embed =~# 'l' : embed lua (but only if vim supports it)
761" g:vimsyn_embed =~# 'm' : embed mzscheme (but only if vim supports it)
762" g:vimsyn_embed =~# 'p' : embed perl (but only if vim supports it)
763" g:vimsyn_embed =~# 'P' : embed python (but only if vim supports it)
764" g:vimsyn_embed =~# 'r' : embed ruby (but only if vim supports it)
765" g:vimsyn_embed =~# 't' : embed tcl (but only if vim supports it)
766if !exists("g:vimsyn_embed")
767 let g:vimsyn_embed= "lmpPr"
768endif
769
770" [-- lua --] {{{3
771let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
772if !filereadable(s:luapath)
773 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
774 if filereadable(fnameescape(s:luapath))
775 let s:luapath= fnameescape(s:luapath)
776 break
777 endif
778 endfor
779endif
780if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
781 unlet! b:current_syntax
782 syn cluster vimFuncBodyList add=vimLuaRegion
783 exe "syn include @vimLuaScript ".s:luapath
784 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
785 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
786 syn cluster vimFuncBodyList add=vimLuaRegion
787else
788 syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
789 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
790endif
791unlet s:luapath
792
793" [-- perl --] {{{3
794let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
795if !filereadable(s:perlpath)
796 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
797 if filereadable(fnameescape(s:perlpath))
798 let s:perlpath= fnameescape(s:perlpath)
799 break
800 endif
801 endfor
802endif
803if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
804 unlet! b:current_syntax
805 syn cluster vimFuncBodyList add=vimPerlRegion
806 exe "syn include @vimPerlScript ".s:perlpath
807 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
808 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
809 syn cluster vimFuncBodyList add=vimPerlRegion
810else
811 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
812 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
813endif
814unlet s:perlpath
815
816" [-- ruby --] {{{3
817let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
818if !filereadable(s:rubypath)
819 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
820 if filereadable(fnameescape(s:rubypath))
821 let s:rubypath= fnameescape(s:rubypath)
822 break
823 endif
824 endfor
825endif
826if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
827 syn cluster vimFuncBodyList add=vimRubyRegion
828 unlet! b:current_syntax
829 exe "syn include @vimRubyScript ".s:rubypath
830 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
831 syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
832 syn cluster vimFuncBodyList add=vimRubyRegion
833else
834 syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
835 syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
836endif
837unlet s:rubypath
838
839" [-- python --] {{{3
840let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
841if !filereadable(s:pythonpath)
842 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
843 if filereadable(fnameescape(s:pythonpath))
844 let s:pythonpath= fnameescape(s:pythonpath)
845 break
846 endif
847 endfor
848endif
849if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
850 unlet! b:current_syntax
851 syn cluster vimFuncBodyList add=vimPythonRegion
852 exe "syn include @vimPythonScript ".s:pythonpath
853 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
854 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
855 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
856 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
857 syn cluster vimFuncBodyList add=vimPythonRegion
858else
859 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
860 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
861endif
862unlet s:pythonpath
863
864" [-- tcl --] {{{3
865if has("win32") || has("win95") || has("win64") || has("win16")
866 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
867 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
868else
869 let s:trytcl= 1
870endif
871if s:trytcl
872 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
873 if !filereadable(s:tclpath)
874 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
875 if filereadable(fnameescape(s:tclpath))
876 let s:tclpath= fnameescape(s:tclpath)
877 break
878 endif
879 endfor
880 endif
881 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
882 unlet! b:current_syntax
883 syn cluster vimFuncBodyList add=vimTclRegion
884 exe "syn include @vimTclScript ".s:tclpath
885 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
886 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
887 syn cluster vimFuncBodyList add=vimTclScript
888 else
889 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
890 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
891 endif
892 unlet s:tclpath
893else
894 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
895 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
896endif
897unlet s:trytcl
898
899" [-- mzscheme --] {{{3
900let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
901if !filereadable(s:mzschemepath)
902 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
903 if filereadable(fnameescape(s:mzschemepath))
904 let s:mzschemepath= fnameescape(s:mzschemepath)
905 break
906 endif
907 endfor
908endif
909if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
910 unlet! b:current_syntax
911 let s:iskKeep= &isk
912 syn cluster vimFuncBodyList add=vimMzSchemeRegion
913 exe "syn include @vimMzSchemeScript ".s:mzschemepath
914 let &isk= s:iskKeep
915 unlet s:iskKeep
916 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
917 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
918 syn cluster vimFuncBodyList add=vimMzSchemeRegion
919else
920 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
921 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
922endif
923unlet s:mzschemepath
924
925" Synchronize (speed) {{{2
926"============
927if exists("g:vimsyn_minlines")
928 exe "syn sync minlines=".g:vimsyn_minlines
929endif
930exe "syn sync maxlines=".s:vimsyn_maxlines
931syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +1100932syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +0100933syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
934
935" ====================
936" Highlighting Settings {{{2
937" ====================
938
939if !exists("skip_vim_syntax_inits")
940 if !exists("g:vimsyn_noerror")
941 hi def link vimBehaveError vimError
942 hi def link vimCollClassErr vimError
943 hi def link vimErrSetting vimError
944 hi def link vimEmbedError vimError
945 hi def link vimFTError vimError
946 hi def link vimFunctionError vimError
947 hi def link vimFunc vimError
948 hi def link vimHiAttribList vimError
949 hi def link vimHiCtermError vimError
950 hi def link vimHiKeyError vimError
951 hi def link vimKeyCodeError vimError
952 hi def link vimMapModErr vimError
953 hi def link vimSubstFlagErr vimError
954 hi def link vimSynCaseError vimError
955 hi def link vimSynFoldMethodError vimError
956 hi def link vimBufnrWarn vimWarn
957 endif
958
959 hi def link vimAbb vimCommand
960 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +1100961 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +0100962 hi def link vimAugroupError vimError
963 hi def link vimAugroupKey vimCommand
964 hi def link vimAuHighlight vimHighlight
965 hi def link vimAutoCmdOpt vimOption
966 hi def link vimAutoCmd vimCommand
967 hi def link vimAutoEvent Type
968 hi def link vimAutoCmdMod Special
969 hi def link vimAutoSet vimCommand
970 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +1100971 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +0100972 hi def link vimBehaveModel vimBehave
973 hi def link vimBehave vimCommand
974 hi def link vimBracket Delimiter
975 hi def link vimCmplxRepeat SpecialChar
976 hi def link vimCommand Statement
977 hi def link vimComment Comment
978 hi def link vim9Comment Comment
979 hi def link vimCommentString vimString
980 hi def link vimCommentTitle PreProc
981 hi def link vimCondHL vimCommand
982 hi def link vimConst vimCommand
983 hi def link vimContinue Special
984 hi def link vimContinueComment vimComment
985 hi def link vimCtrlChar SpecialChar
dkearnsb1427b42024-02-28 05:59:30 +1100986 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +1100987 hi def link vimEchohlNone vimGroup
988 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +0100989 hi def link vimElseIfErr Error
990 hi def link vimElseif vimCondHL
991 hi def link vimEnvvar PreProc
992 hi def link vimError Error
993 hi def link vimEscape Special
994 hi def link vimFBVar vimVar
995 hi def link vimFgBgAttrib vimHiAttrib
996 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +0100997 hi def link vimFold Folded
998 hi def link vimFor vimCommand
999 hi def link vimFTCmd vimCommand
1000 hi def link vimFTOption vimSynType
1001 hi def link vimFuncKey vimCommand
1002 hi def link vimFuncName Function
1003 hi def link vimFuncSID Special
1004 hi def link vimFuncVar Identifier
1005 hi def link vimGroupAdd vimSynOption
1006 hi def link vimGroupName vimGroup
1007 hi def link vimGroupRem vimSynOption
1008 hi def link vimGroupSpecial Special
1009 hi def link vimGroup Type
1010 hi def link vimHiAttrib PreProc
1011 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001012 hi def link vimHiClear Type
1013 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001014 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001015 hi def link vimHiCtermfont vimHiTerm
1016 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001017 hi def link vimHiCTerm vimHiTerm
1018 hi def link vimHighlight vimCommand
1019 hi def link vimHiGroup vimGroupName
1020 hi def link vimHiGuiFgBg vimHiTerm
1021 hi def link vimHiGuiFont vimHiTerm
1022 hi def link vimHiGuiRgb vimNumber
1023 hi def link vimHiGui vimHiTerm
1024 hi def link vimHiNmbr Number
1025 hi def link vimHiStartStop vimHiTerm
1026 hi def link vimHiTerm Type
1027 hi def link vimHLGroup vimGroup
1028 hi def link vimHLMod PreProc
1029 hi def link vimInsert vimString
1030 hi def link vimIskSep Delimiter
1031 hi def link vimKeyCode vimSpecFile
1032 hi def link vimKeymapLineComment vimComment
1033 hi def link vimKeymapTailComment vimComment
1034 hi def link vimKeyword Statement
1035 hi def link vimLet vimCommand
1036 hi def link vimLetHereDoc vimString
1037 hi def link vimLetHereDocStart Special
1038 hi def link vimLetHereDocStop Special
1039 hi def link vimLetRegister Special
1040 hi def link vimLineComment vimComment
1041 hi def link vim9LineComment vimComment
1042 hi def link vimMapBang vimBang
1043 hi def link vimMapModKey vimFuncSID
1044 hi def link vimMapMod vimBracket
1045 hi def link vimMap vimCommand
1046 hi def link vimMark Number
1047 hi def link vimMarkNumber vimNumber
1048 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001049 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001050 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001051 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001052 hi def link vimMenu vimCommand
1053 hi def link vimMenuNotation vimNotation
1054 hi def link vimMenuPriority Number
1055 hi def link vimMenuStatus Special
1056 hi def link vimMenutranslateComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001057 hi def link vimMtchComment vimComment
1058 hi def link vimNorm vimCommand
1059 hi def link vimNotation Special
1060 hi def link vimNotFunc vimCommand
1061 hi def link vimNotPatSep vimString
1062 hi def link vimNumber Number
1063 hi def link vimOperError Error
1064 hi def link vimOper Operator
1065 hi def link vimOperStar vimOper
1066 hi def link vimOption PreProc
1067 hi def link vimParenSep Delimiter
1068 hi def link vimPatSepErr vimError
1069 hi def link vimPatSepR vimPatSep
1070 hi def link vimPatSep SpecialChar
1071 hi def link vimPatSepZone vimString
1072 hi def link vimPatSepZ vimPatSep
1073 hi def link vimPattern Type
1074 hi def link vimPlainMark vimMark
1075 hi def link vimPlainRegister vimRegister
1076 hi def link vimRegister SpecialChar
1077 hi def link vimScriptDelim Comment
1078 hi def link vimSearchDelim Statement
1079 hi def link vimSearch vimString
1080 hi def link vimSep Delimiter
1081 hi def link vimSetMod vimOption
1082 hi def link vimSetSep Statement
1083 hi def link vimSetString vimString
1084 hi def link vimSpecFile Identifier
1085 hi def link vimSpecFileMod vimSpecFile
1086 hi def link vimSpecial Type
1087 hi def link vimStatement Statement
1088 hi def link vimStringCont vimString
1089 hi def link vimString String
1090 hi def link vimStringEnd vimString
1091 hi def link vimStringInterpolationBrace vimEscape
1092 hi def link vimSubst1 vimSubst
1093 hi def link vimSubstDelim Delimiter
1094 hi def link vimSubstFlags Special
1095 hi def link vimSubstSubstr SpecialChar
1096 hi def link vimSubstTwoBS vimString
1097 hi def link vimSubst vimCommand
1098 hi def link vimSynCaseError Error
1099 hi def link vimSynCase Type
1100 hi def link vimSyncC Type
1101 hi def link vimSyncError Error
1102 hi def link vimSyncGroupName vimGroupName
1103 hi def link vimSyncGroup vimGroupName
1104 hi def link vimSyncKey Type
1105 hi def link vimSyncNone Type
1106 hi def link vimSynContains vimSynOption
1107 hi def link vimSynError Error
1108 hi def link vimSynFoldMethodError Error
1109 hi def link vimSynFoldMethod Type
1110 hi def link vimSynKeyContainedin vimSynContains
1111 hi def link vimSynKeyOpt vimSynOption
1112 hi def link vimSynCchar vimSynOption
1113 hi def link vimSynCcharValue Character
1114 hi def link vimSynMtchGrp vimSynOption
1115 hi def link vimSynMtchOpt vimSynOption
1116 hi def link vimSynNextgroup vimSynOption
1117 hi def link vimSynNotPatRange vimSynRegPat
1118 hi def link vimSynOption Special
1119 hi def link vimSynPatRange vimString
1120 hi def link vimSynRegOpt vimSynOption
1121 hi def link vimSynRegPat vimString
1122 hi def link vimSynReg Type
1123 hi def link vimSyntax vimCommand
1124 hi def link vimSynType vimSpecial
1125 hi def link vimTodo Todo
1126 hi def link vimType Type
1127 hi def link vimUnlet vimCommand
1128 hi def link vimUnletBang vimBang
1129 hi def link vimUnmap vimMap
1130 hi def link vimUserAttrbCmpltFunc Special
1131 hi def link vimUserAttrbCmplt vimSpecial
1132 hi def link vimUserAttrbKey vimOption
1133 hi def link vimUserAttrb vimSpecial
1134 hi def link vimUserAttrbError Error
1135 hi def link vimUserCmdError Error
1136 hi def link vimUserCommand vimCommand
1137 hi def link vimUserFunc Normal
1138 hi def link vimVar Identifier
1139 hi def link vimWarn WarningMsg
1140endif
1141
1142" Current Syntax Variable: {{{2
1143let b:current_syntax = "vim"
1144
1145" ---------------------------------------------------------------------
1146" Cleanup: {{{1
1147delc VimFolda
1148delc VimFoldf
1149delc VimFoldl
1150delc VimFoldm
1151delc VimFoldp
1152delc VimFoldP
1153delc VimFoldr
1154delc VimFoldt
1155let &cpo = s:keepcpo
1156unlet s:keepcpo
dkearns5d67aef2024-03-10 04:01:22 +11001157" vim:ts=18 fdm=marker ft=vim