blob: fe871199087204025d2b4e00cf3db4339bcb4a42 [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
dkearns62b26042024-03-10 03:43:28 +11006" Last Change: 2024 Mar 09
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" =======
dkearns2c51e152024-02-27 07:10:18 +1100160syn match vimNumber '\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
161syn match vimNumber '-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
162syn match vimNumber '\<0[xX]\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
163syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
164syn match vimNumber '\<0[zZ][a-zA-Z0-9.]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
165syn match vimNumber '0[0-7]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
166syn match vimNumber '0[bB][01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
h-east9b53c052024-02-13 21:09:22 +0100167
168" All vimCommands are contained by vimIsCommand. {{{2
dkearns62b26042024-03-10 03:43:28 +1100169syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimEcho,vimEchoHL,vimExecute,vimIsCommand,vimExtCmd,vimFunction,vimGlobal,vimHighlight,vimLet,vimMap,vimMark,vimNotFunc,vimNorm,vimSet,vimSyntax,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate
dkearnsc4aef9a2024-03-04 02:42:47 +1100170syn match vimCmdSep "[:|]\+" skipwhite nextgroup=@vimCmdList,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100171syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>" contains=vimCommand
172syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>"
173syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
174syn match vimVar "\s\zs&\%([lg]:\)\=\a\+\>"
175syn match vimVar "\s\zs&t_\S[a-zA-Z0-9]\>"
176syn match vimVar "\s\zs&t_k;"
177syn match vimFBVar contained "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
178syn keyword vimCommand contained in
179
dkearnsb1427b42024-02-28 05:59:30 +1100180syn cluster vimExprList contains=vimEnvvar,vimFunc,vimFuncVar,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar
181
h-east9b53c052024-02-13 21:09:22 +0100182" Insertions And Appends: insert append {{{2
183" (buftype != nofile test avoids having append, change, insert show up in the command window)
184" =======================
185if &buftype != 'nofile'
186 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$""
187 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$""
188 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$""
189endif
190
191" Behave! {{{2
192" =======
h-east9b53c052024-02-13 21:09:22 +0100193if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
194 syn match vimBehaveError contained "[^ ]\+"
195endif
Doug Kearnsfe6d5b02024-02-14 21:17:43 +0100196syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
197syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
198syn keyword vimBehaveModel contained mswin xterm
h-east9b53c052024-02-13 21:09:22 +0100199
200" Filetypes {{{2
201" =========
202syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
203if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
204 syn match vimFTError contained "\I\i*"
205endif
206syn keyword vimFTCmd contained filet[ype]
207syn keyword vimFTOption contained detect indent off on plugin
208
209" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
210" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
dkearnse5c9ba62024-03-05 05:15:42 +1100211syn 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 +1100212syn match vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
h-east9b53c052024-02-13 21:09:22 +0100213if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
dkearnsc4aef9a2024-03-04 02:42:47 +1100214 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 +0100215else
dkearnsc4aef9a2024-03-04 02:42:47 +1100216 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 +0100217endif
h-east9b53c052024-02-13 21:09:22 +0100218if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
dkearnsc4aef9a2024-03-04 02:42:47 +1100219 syn match vimAugroupError "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
h-east9b53c052024-02-13 21:09:22 +0100220endif
dkearnsc4aef9a2024-03-04 02:42:47 +1100221
222syn match vimAutoCmdGroup contained "\S\+"
223syn match vimAugroupEnd contained "\c\<END\>"
224syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAutoCmdGroup
225syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup,vimAugroupEnd
h-east9b53c052024-02-13 21:09:22 +0100226
227" Operators: {{{2
228" =========
229syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimType,vimRegister,@vimContinue,vim9Comment,vimVar
230syn match vimOper "||\|&&\|[-+*/%.!]" skipwhite nextgroup=vimString,vimSpecFile
231syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\|!\~#\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
232syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile
233syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=vimoperStar,@vimOperGroup
234syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
235if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
236 syn match vimOperError ")"
237endif
238
239" Functions : Tag is provided for those who wish to highlight tagged functions {{{2
240" =========
241syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
dkearnse5c9ba62024-03-05 05:15:42 +1100242syn 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 +0100243syn match vimFunction "\<\(fu\%[nction]\)!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300244syn match vimFunction "\<def\s\+new\i\{-}(" contains=@vimFuncList nextgroup=vimFuncBody
h-east9b53c052024-02-13 21:09:22 +0100245syn match vimFunction "\<def!\=\s\+\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
246"syn match vimFunction "\<def!\=\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
247
248if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
249 syn region vimFuncBody contained fold start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList
250else
251 syn region vimFuncBody contained start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList
252endif
253syn match vimFuncVar contained "a:\(\K\k*\|\d\+\)"
254syn match vimFuncSID contained "\c<sid>\|\<s:"
255syn keyword vimFuncKey contained fu[nction]
256syn keyword vimFuncKey contained def
257syn match vimFuncBlank contained "\s\+"
258
259syn keyword vimPattern contained start skip end
260
261" vimTypes : new for vim9
262syn match vimType ":\s*\zs\<\(bool\|number\|float\|string\|blob\|list<\|dict<\|job\|channel\|func\)\>"
263
264" Keymaps: (Vim Project Addition) {{{2
265" =======
266
267" TODO: autogenerated vimCommand keyword list does not handle all abbreviations
268" : handle Vim9 script comments when something like #13104 is merged
269syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,vimKeymapLineComment
270syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
271syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
272syn match vimKeymapTailComment "\S.*" contained
273syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
274
275syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
276
277" Special Filenames, Modifiers, Extension Removal: {{{2
278" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100279syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
280syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
281syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
282syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
283syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
284syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100285syn match vimSpecFileMod "\(:[phtre]\)\+" contained
286
287" User-Specified Commands: {{{2
288" =======================
dkearnse5c9ba62024-03-05 05:15:42 +1100289syn 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 +0100290syn keyword vimUserCommand contained com[mand]
291syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter
292syn match vimUserAttrbError contained "-\a\+\ze\s"
293syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
294syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
295syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
296syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
297syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey
298syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey
299syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey
300syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey
301if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
302 syn match vimUserCmdError contained "\S\+\>"
303endif
304syn case ignore
305syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
306" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
307syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
308syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
309
310syn case match
311syn match vimUserAttrbCmplt contained "custom,\u\w*"
312
313" Lower Priority Comments: after some vim commands... {{{2
314" =======================
315syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
316syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
317syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
318syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
319" Vim9 comments - TODO: might be highlighted while they don't work
320syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
321syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
322syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
323" Vim9 comment inside expression
324syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
325syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
326syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
327
328" Environment Variables: {{{2
329" =====================
330syn match vimEnvvar "\$\I\i*"
331syn match vimEnvvar "\${\I\i*}"
332
333" In-String Specials: {{{2
334" Try to catch strings, if nothing else matches (therefore it must precede the others!)
335" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
336syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
337syn match vimPatSepErr contained "\\)"
338syn match vimPatSep contained "\\|"
339syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
340syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
341syn match vimNotPatSep contained "\\\\"
342syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
343syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup
344syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+
h-east9b53c052024-02-13 21:09:22 +0100345"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
346syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
347syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
348syn match vimEscape contained "\\."
349" syn match vimEscape contained +\\[befnrt\"]+
350syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
351syn match vimEscape contained "\\<" contains=vimNotation
352syn match vimEscape contained "\\<\*[^>]*>\=>"
353
dkearnsb1427b42024-02-28 05:59:30 +1100354syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
355syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
356syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
357syn match vimStringInterpolationBrace contained "{{"
358syn match vimStringInterpolationBrace contained "}}"
h-east9b53c052024-02-13 21:09:22 +0100359
360" Substitutions: {{{2
361" =============
362syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
363syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
364syn cluster vimSubstList add=vimCollection
dkearns2c51e152024-02-27 07:10:18 +1100365syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
366syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
367syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
368syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
369syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
370syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
371" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
372" : # is allowed but "not recommended" (see :h pattern-delimiter)
373syn 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
374syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
375syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
376syn match vimCollClassErr contained "\[:.\{-\}:\]"
377syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
378syn match vimSubstSubstr contained "\\z\=\d"
379syn match vimSubstTwoBS contained "\\\\"
380syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
381syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100382
383" 'String': {{{2
384syn match vimString "[^(,]'[^']\{-}\zs'"
385
386" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100387syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
388syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
389syn match vimMark ",\zs'[<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
390syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
391syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
392syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100393syn match vimPlainMark contained "'[a-zA-Z0-9]"
394syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
395
396syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
397syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
398syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
399syn match vimRegister '@"'
400syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
401syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
402
403syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
404syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
405
406syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
407syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
408syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
409
410" Complex Repeats: (:h complex-repeat) {{{2
411" ===============
412syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
413syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
414
415" Set command and associated set-options (vimOptions) with comment {{{2
416syn 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
417syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
418syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
419syn match vimSetSep contained "[,:]"
420syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
421
422" Let And Var: {{{2
423" ===========
424syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
425syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
426syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
427
428syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
429syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
430syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
431
432VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$'
433syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
434
435" For: {{{2
436" ===
437syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
438" Abbreviations: {{{2
439" =============
440" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
441
442" Autocmd: {{{2
443" =======
444syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
445syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
446syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod
447syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
448syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)"
449
450" Echo And Execute: -- prefer strings! {{{2
451" ================
dkearnsb1427b42024-02-28 05:59:30 +1100452" GEN_SYN_VIM: vimCommand echo, START_STR='syn keyword vimEcho', END_STR='skipwhite nextgroup=vimEchoExpr'
453syn region vimEchoExpr contained start="[^[:space:]|]" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" end="$" contains=@vimContinue,@vimExprList
454
455syn match vimEchoHL "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchoHLNone
h-east9b53c052024-02-13 21:09:22 +0100456syn case ignore
457syn keyword vimEchoHLNone none
458syn case match
459
dkearnsb1427b42024-02-28 05:59:30 +1100460syn region vimExecute oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimFuncVar,vimIsCommand,vimOper,vimNotation,vimOperParen,vimString,vimVar
461
h-east9b53c052024-02-13 21:09:22 +0100462" Maps: {{{2
463" ====
464syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
465syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
466" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns16249702024-02-23 05:45:05 +1100467" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
468syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
h-east9b53c052024-02-13 21:09:22 +0100469" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns5d67aef2024-03-10 04:01:22 +1100470syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
471syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
472syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100473syn 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 +1100474syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
475" assume a continuation comment introduces the RHS
476syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100477syn case ignore
478syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
479syn case match
480
481" Menus: {{{2
482" =====
dkearns62b26042024-03-10 03:43:28 +1100483" NOTE: tail comments disallowed
484" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
485syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
486syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
487syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
488syn match vimMenuName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
489syn match vimMenuName "\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
490syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
491syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
492syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
493syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
494syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
495
496syn region vimMenutranslate
497 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
498 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
499 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
500 \ contains=@vimContinue,vimMenutranslateName keepend transparent
501" oneline is sufficient to match the current formatting in runtime/lang/*.vim
502syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
503syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100504
505" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
506" ======================
507syn case ignore
508syn 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
509
510syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
511syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
512syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
513syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
514syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
515syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
516syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
517
518syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
519syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
520syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
521syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
522syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
523syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
524
525syn match vimBracket contained "[\\<>]"
526syn case match
527
528" User Function Highlighting: {{{2
529" (following Gautam Iyer's suggestion)
530" ==========================
531syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
532syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
533syn keyword vimFuncEcho contained ec ech echo
534
535" User Command Highlighting: {{{2
536syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
537
538" Errors And Warnings: {{{2
539" ====================
540if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300541 " TODO: The new-prefix exception should only apply to constructor definitions.
542 syn match vimFunctionError "\s\zs\%(new\)\@![a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100543 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
544 syn match vimElseIfErr "\<else\s\+if\>"
545 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
546endif
547
548syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
549
550" Norm: {{{2
551" ====
552syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
553syn match vimNormCmds contained ".*$"
554
555" Syntax: {{{2
556"=======
557syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
558syn 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
559syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
560
561if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
562 syn match vimSynError contained "\i\+"
563 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
564endif
565syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
566syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
567syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
568if has("conceal")
569 " no whitespace allowed after '='
570 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
571 syn match vimSynCcharValue contained "\S"
572endif
573
574syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment
575syn match vimAuSyntax contained "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment
576syn cluster vimFuncBodyList add=vimSyntax
577
578" Syntax: case {{{2
579syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
580if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
581 syn match vimSynCaseError contained "\i\+"
582endif
583syn keyword vimSynCase contained ignore match
584
585" Syntax: clear {{{2
586syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
587
588" Syntax: cluster {{{2
589syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
590syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
591syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
592syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100593
594" Syntax: foldlevel {{{2
595syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
596if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
597 syn match vimSynFoldMethodError contained "\i\+"
598endif
599syn keyword vimSynFoldMethod contained start minimum
600
601" Syntax: iskeyword {{{2
602syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
603syn match vimIskList contained '\S\+' contains=vimIskSep
604syn match vimIskSep contained ','
605
606" Syntax: include {{{2
607syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100608
609" Syntax: keyword {{{2
610syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
611syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
612syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
613syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100614
615" Syntax: match {{{2
616syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
617syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
618syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
619syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100620
621" Syntax: off and on {{{2
622syn keyword vimSynType contained enable list manual off on reset
623
624" Syntax: region {{{2
625syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
626syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
627syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
628syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
629syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
630syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
631syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
632syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
633syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
634syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
635syn match vimSynPatMod contained "lc=\d\+"
636syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
637syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
638syn match vimSynNotPatRange contained "\\\\\|\\\["
639syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100640
641" Syntax: sync {{{2
642" ============
643syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
644if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
645 syn match vimSyncError contained "\i\+"
646endif
647syn keyword vimSyncC contained ccomment clear fromstart
648syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
649syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
650syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
651syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
652syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
653syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
654syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
655syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
656syn keyword vimSyncNone contained NONE
657
658" Additional IsCommand: here by reasons of precedence {{{2
659" ====================
660syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
661
662" Highlighting: {{{2
663" ============
664syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment,vim9Comment
665if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
666 syn match vimHiCtermError contained "\D\i*"
667endif
668syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
669syn match vimHiBang contained "!" skipwhite nextgroup=@vimHighlightCluster
670
671syn match vimHiGroup contained "\i\+"
672syn case ignore
673syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
674syn keyword vimFgBgAttrib contained none bg background fg foreground
675syn case match
676syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
677syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
678syn case ignore
679syn 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
680syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
681
682syn case match
683syn match vimHiFontname contained "[a-zA-Z\-*]\+"
684syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
685syn match vimHiGuiRgb contained "#\x\{6}"
686
687" Highlighting: hi group key=arg ... {{{2
688syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
689syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster
690if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
691 syn match vimHiKeyError contained "\i\+="he=e-1
692endif
693syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
694syn match vimHiStartStop contained "\c\(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
695syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
696syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
697syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
698syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
699syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
700syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
701syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
702syn match vimHiTermcap contained "\S\+" contains=vimNotation
703syn match vimHiNmbr contained '\d\+'
704
705" Highlight: clear {{{2
706syn keyword vimHiClear contained clear nextgroup=vimHiGroup
707
708" Highlight: link {{{2
709" see tst24 (hi def vs hi) (Jul 06, 2018)
710"syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
711syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=@vimHiCluster
h-east9b53c052024-02-13 21:09:22 +0100712
713" Control Characters: {{{2
714" ==================
715syn match vimCtrlChar "[- -]"
716
717" Beginners - Patterns that involve ^ {{{2
718" =========
719syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle,vimComment
720syn match vimLineComment +^[ \t:]*"\("[^"]*"\|[^"]\)*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
721syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
722syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
723" Note: Look-behind to work around nextgroup skipnl consuming leading whitespace and preventing a match
724syn match vimContinue "^\s*\zs\\"
725syn match vimContinueComment '^\s*\zs["#]\\ .*' contained
726syn cluster vimContinue contains=vimContinue,vimContinueComment
727syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
728syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
729
730" Searches And Globals: {{{2
731" ====================
732syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
733syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +1100734syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
735syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100736
737" Embedded Scripts: {{{2
738" ================
739" perl,ruby : Benoit Cerrina
740" python,tcl : Johannes Zellner
741" mzscheme, lua : Charles Campbell
742
743" Allows users to specify the type of embedded script highlighting
744" they want: (perl/python/ruby/tcl support)
745" g:vimsyn_embed == 0 : don't embed any scripts
746" g:vimsyn_embed =~# 'l' : embed lua (but only if vim supports it)
747" g:vimsyn_embed =~# 'm' : embed mzscheme (but only if vim supports it)
748" g:vimsyn_embed =~# 'p' : embed perl (but only if vim supports it)
749" g:vimsyn_embed =~# 'P' : embed python (but only if vim supports it)
750" g:vimsyn_embed =~# 'r' : embed ruby (but only if vim supports it)
751" g:vimsyn_embed =~# 't' : embed tcl (but only if vim supports it)
752if !exists("g:vimsyn_embed")
753 let g:vimsyn_embed= "lmpPr"
754endif
755
756" [-- lua --] {{{3
757let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
758if !filereadable(s:luapath)
759 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
760 if filereadable(fnameescape(s:luapath))
761 let s:luapath= fnameescape(s:luapath)
762 break
763 endif
764 endfor
765endif
766if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
767 unlet! b:current_syntax
768 syn cluster vimFuncBodyList add=vimLuaRegion
769 exe "syn include @vimLuaScript ".s:luapath
770 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
771 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
772 syn cluster vimFuncBodyList add=vimLuaRegion
773else
774 syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
775 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
776endif
777unlet s:luapath
778
779" [-- perl --] {{{3
780let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
781if !filereadable(s:perlpath)
782 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
783 if filereadable(fnameescape(s:perlpath))
784 let s:perlpath= fnameescape(s:perlpath)
785 break
786 endif
787 endfor
788endif
789if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
790 unlet! b:current_syntax
791 syn cluster vimFuncBodyList add=vimPerlRegion
792 exe "syn include @vimPerlScript ".s:perlpath
793 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
794 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
795 syn cluster vimFuncBodyList add=vimPerlRegion
796else
797 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
798 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
799endif
800unlet s:perlpath
801
802" [-- ruby --] {{{3
803let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
804if !filereadable(s:rubypath)
805 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
806 if filereadable(fnameescape(s:rubypath))
807 let s:rubypath= fnameescape(s:rubypath)
808 break
809 endif
810 endfor
811endif
812if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
813 syn cluster vimFuncBodyList add=vimRubyRegion
814 unlet! b:current_syntax
815 exe "syn include @vimRubyScript ".s:rubypath
816 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
817 syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
818 syn cluster vimFuncBodyList add=vimRubyRegion
819else
820 syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
821 syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
822endif
823unlet s:rubypath
824
825" [-- python --] {{{3
826let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
827if !filereadable(s:pythonpath)
828 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
829 if filereadable(fnameescape(s:pythonpath))
830 let s:pythonpath= fnameescape(s:pythonpath)
831 break
832 endif
833 endfor
834endif
835if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
836 unlet! b:current_syntax
837 syn cluster vimFuncBodyList add=vimPythonRegion
838 exe "syn include @vimPythonScript ".s:pythonpath
839 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
840 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
841 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
842 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
843 syn cluster vimFuncBodyList add=vimPythonRegion
844else
845 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
846 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
847endif
848unlet s:pythonpath
849
850" [-- tcl --] {{{3
851if has("win32") || has("win95") || has("win64") || has("win16")
852 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
853 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
854else
855 let s:trytcl= 1
856endif
857if s:trytcl
858 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
859 if !filereadable(s:tclpath)
860 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
861 if filereadable(fnameescape(s:tclpath))
862 let s:tclpath= fnameescape(s:tclpath)
863 break
864 endif
865 endfor
866 endif
867 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
868 unlet! b:current_syntax
869 syn cluster vimFuncBodyList add=vimTclRegion
870 exe "syn include @vimTclScript ".s:tclpath
871 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
872 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
873 syn cluster vimFuncBodyList add=vimTclScript
874 else
875 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
876 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
877 endif
878 unlet s:tclpath
879else
880 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
881 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
882endif
883unlet s:trytcl
884
885" [-- mzscheme --] {{{3
886let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
887if !filereadable(s:mzschemepath)
888 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
889 if filereadable(fnameescape(s:mzschemepath))
890 let s:mzschemepath= fnameescape(s:mzschemepath)
891 break
892 endif
893 endfor
894endif
895if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
896 unlet! b:current_syntax
897 let s:iskKeep= &isk
898 syn cluster vimFuncBodyList add=vimMzSchemeRegion
899 exe "syn include @vimMzSchemeScript ".s:mzschemepath
900 let &isk= s:iskKeep
901 unlet s:iskKeep
902 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
903 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
904 syn cluster vimFuncBodyList add=vimMzSchemeRegion
905else
906 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
907 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
908endif
909unlet s:mzschemepath
910
911" Synchronize (speed) {{{2
912"============
913if exists("g:vimsyn_minlines")
914 exe "syn sync minlines=".g:vimsyn_minlines
915endif
916exe "syn sync maxlines=".s:vimsyn_maxlines
917syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +1100918syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +0100919syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
920
921" ====================
922" Highlighting Settings {{{2
923" ====================
924
925if !exists("skip_vim_syntax_inits")
926 if !exists("g:vimsyn_noerror")
927 hi def link vimBehaveError vimError
928 hi def link vimCollClassErr vimError
929 hi def link vimErrSetting vimError
930 hi def link vimEmbedError vimError
931 hi def link vimFTError vimError
932 hi def link vimFunctionError vimError
933 hi def link vimFunc vimError
934 hi def link vimHiAttribList vimError
935 hi def link vimHiCtermError vimError
936 hi def link vimHiKeyError vimError
937 hi def link vimKeyCodeError vimError
938 hi def link vimMapModErr vimError
939 hi def link vimSubstFlagErr vimError
940 hi def link vimSynCaseError vimError
941 hi def link vimSynFoldMethodError vimError
942 hi def link vimBufnrWarn vimWarn
943 endif
944
945 hi def link vimAbb vimCommand
946 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +1100947 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +0100948 hi def link vimAugroupError vimError
949 hi def link vimAugroupKey vimCommand
950 hi def link vimAuHighlight vimHighlight
951 hi def link vimAutoCmdOpt vimOption
952 hi def link vimAutoCmd vimCommand
953 hi def link vimAutoEvent Type
954 hi def link vimAutoCmdMod Special
955 hi def link vimAutoSet vimCommand
956 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +1100957 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +0100958 hi def link vimBehaveModel vimBehave
959 hi def link vimBehave vimCommand
960 hi def link vimBracket Delimiter
961 hi def link vimCmplxRepeat SpecialChar
962 hi def link vimCommand Statement
963 hi def link vimComment Comment
964 hi def link vim9Comment Comment
965 hi def link vimCommentString vimString
966 hi def link vimCommentTitle PreProc
967 hi def link vimCondHL vimCommand
968 hi def link vimConst vimCommand
969 hi def link vimContinue Special
970 hi def link vimContinueComment vimComment
971 hi def link vimCtrlChar SpecialChar
dkearnsb1427b42024-02-28 05:59:30 +1100972 hi def link vimEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +0100973 hi def link vimEchoHLNone vimGroup
974 hi def link vimEchoHL vimCommand
975 hi def link vimElseIfErr Error
976 hi def link vimElseif vimCondHL
977 hi def link vimEnvvar PreProc
978 hi def link vimError Error
979 hi def link vimEscape Special
980 hi def link vimFBVar vimVar
981 hi def link vimFgBgAttrib vimHiAttrib
982 hi def link vimFuncEcho vimCommand
983 hi def link vimHiCtermul vimHiTerm
984 hi def link vimHiCtermfont vimHiTerm
985 hi def link vimFold Folded
986 hi def link vimFor vimCommand
987 hi def link vimFTCmd vimCommand
988 hi def link vimFTOption vimSynType
989 hi def link vimFuncKey vimCommand
990 hi def link vimFuncName Function
991 hi def link vimFuncSID Special
992 hi def link vimFuncVar Identifier
993 hi def link vimGroupAdd vimSynOption
994 hi def link vimGroupName vimGroup
995 hi def link vimGroupRem vimSynOption
996 hi def link vimGroupSpecial Special
997 hi def link vimGroup Type
998 hi def link vimHiAttrib PreProc
999 hi def link vimHiBang vimBang
1000 hi def link vimHiClear vimHighlight
1001 hi def link vimHiCtermFgBg vimHiTerm
1002 hi def link vimHiCTerm vimHiTerm
1003 hi def link vimHighlight vimCommand
1004 hi def link vimHiGroup vimGroupName
1005 hi def link vimHiGuiFgBg vimHiTerm
1006 hi def link vimHiGuiFont vimHiTerm
1007 hi def link vimHiGuiRgb vimNumber
1008 hi def link vimHiGui vimHiTerm
1009 hi def link vimHiNmbr Number
1010 hi def link vimHiStartStop vimHiTerm
1011 hi def link vimHiTerm Type
1012 hi def link vimHLGroup vimGroup
1013 hi def link vimHLMod PreProc
1014 hi def link vimInsert vimString
1015 hi def link vimIskSep Delimiter
1016 hi def link vimKeyCode vimSpecFile
1017 hi def link vimKeymapLineComment vimComment
1018 hi def link vimKeymapTailComment vimComment
1019 hi def link vimKeyword Statement
1020 hi def link vimLet vimCommand
1021 hi def link vimLetHereDoc vimString
1022 hi def link vimLetHereDocStart Special
1023 hi def link vimLetHereDocStop Special
1024 hi def link vimLetRegister Special
1025 hi def link vimLineComment vimComment
1026 hi def link vim9LineComment vimComment
1027 hi def link vimMapBang vimBang
1028 hi def link vimMapModKey vimFuncSID
1029 hi def link vimMapMod vimBracket
1030 hi def link vimMap vimCommand
1031 hi def link vimMark Number
1032 hi def link vimMarkNumber vimNumber
1033 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001034 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001035 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001036 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001037 hi def link vimMenu vimCommand
1038 hi def link vimMenuNotation vimNotation
1039 hi def link vimMenuPriority Number
1040 hi def link vimMenuStatus Special
1041 hi def link vimMenutranslateComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001042 hi def link vimMtchComment vimComment
1043 hi def link vimNorm vimCommand
1044 hi def link vimNotation Special
1045 hi def link vimNotFunc vimCommand
1046 hi def link vimNotPatSep vimString
1047 hi def link vimNumber Number
1048 hi def link vimOperError Error
1049 hi def link vimOper Operator
1050 hi def link vimOperStar vimOper
1051 hi def link vimOption PreProc
1052 hi def link vimParenSep Delimiter
1053 hi def link vimPatSepErr vimError
1054 hi def link vimPatSepR vimPatSep
1055 hi def link vimPatSep SpecialChar
1056 hi def link vimPatSepZone vimString
1057 hi def link vimPatSepZ vimPatSep
1058 hi def link vimPattern Type
1059 hi def link vimPlainMark vimMark
1060 hi def link vimPlainRegister vimRegister
1061 hi def link vimRegister SpecialChar
1062 hi def link vimScriptDelim Comment
1063 hi def link vimSearchDelim Statement
1064 hi def link vimSearch vimString
1065 hi def link vimSep Delimiter
1066 hi def link vimSetMod vimOption
1067 hi def link vimSetSep Statement
1068 hi def link vimSetString vimString
1069 hi def link vimSpecFile Identifier
1070 hi def link vimSpecFileMod vimSpecFile
1071 hi def link vimSpecial Type
1072 hi def link vimStatement Statement
1073 hi def link vimStringCont vimString
1074 hi def link vimString String
1075 hi def link vimStringEnd vimString
1076 hi def link vimStringInterpolationBrace vimEscape
1077 hi def link vimSubst1 vimSubst
1078 hi def link vimSubstDelim Delimiter
1079 hi def link vimSubstFlags Special
1080 hi def link vimSubstSubstr SpecialChar
1081 hi def link vimSubstTwoBS vimString
1082 hi def link vimSubst vimCommand
1083 hi def link vimSynCaseError Error
1084 hi def link vimSynCase Type
1085 hi def link vimSyncC Type
1086 hi def link vimSyncError Error
1087 hi def link vimSyncGroupName vimGroupName
1088 hi def link vimSyncGroup vimGroupName
1089 hi def link vimSyncKey Type
1090 hi def link vimSyncNone Type
1091 hi def link vimSynContains vimSynOption
1092 hi def link vimSynError Error
1093 hi def link vimSynFoldMethodError Error
1094 hi def link vimSynFoldMethod Type
1095 hi def link vimSynKeyContainedin vimSynContains
1096 hi def link vimSynKeyOpt vimSynOption
1097 hi def link vimSynCchar vimSynOption
1098 hi def link vimSynCcharValue Character
1099 hi def link vimSynMtchGrp vimSynOption
1100 hi def link vimSynMtchOpt vimSynOption
1101 hi def link vimSynNextgroup vimSynOption
1102 hi def link vimSynNotPatRange vimSynRegPat
1103 hi def link vimSynOption Special
1104 hi def link vimSynPatRange vimString
1105 hi def link vimSynRegOpt vimSynOption
1106 hi def link vimSynRegPat vimString
1107 hi def link vimSynReg Type
1108 hi def link vimSyntax vimCommand
1109 hi def link vimSynType vimSpecial
1110 hi def link vimTodo Todo
1111 hi def link vimType Type
1112 hi def link vimUnlet vimCommand
1113 hi def link vimUnletBang vimBang
1114 hi def link vimUnmap vimMap
1115 hi def link vimUserAttrbCmpltFunc Special
1116 hi def link vimUserAttrbCmplt vimSpecial
1117 hi def link vimUserAttrbKey vimOption
1118 hi def link vimUserAttrb vimSpecial
1119 hi def link vimUserAttrbError Error
1120 hi def link vimUserCmdError Error
1121 hi def link vimUserCommand vimCommand
1122 hi def link vimUserFunc Normal
1123 hi def link vimVar Identifier
1124 hi def link vimWarn WarningMsg
1125endif
1126
1127" Current Syntax Variable: {{{2
1128let b:current_syntax = "vim"
1129
1130" ---------------------------------------------------------------------
1131" Cleanup: {{{1
1132delc VimFolda
1133delc VimFoldf
1134delc VimFoldl
1135delc VimFoldm
1136delc VimFoldp
1137delc VimFoldP
1138delc VimFoldr
1139delc VimFoldt
1140let &cpo = s:keepcpo
1141unlet s:keepcpo
dkearns5d67aef2024-03-10 04:01:22 +11001142" vim:ts=18 fdm=marker ft=vim