blob: 9ab923c4f473ced1617057b58feb8e8e4eff540b [file] [log] [blame]
h-east9b53c052024-02-13 21:09:22 +01001" Vim syntax file
dkearns982e1912024-03-28 20:06:03 +11002" Language: Vim script
3" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
4" Doug Kearns <dougkearns@gmail.com>
5" URL: https://github.com/vim-jp/syntax-vim-ex
dkearnse43ace52024-04-10 05:19:41 +10006" Last Change: 2024 Apr 09
Christian Brabandtf9ca1392024-02-19 20:37:11 +01007" Former Maintainer: Charles E. Campbell
h-east9b53c052024-02-13 21:09:22 +01008
9" DO NOT CHANGE DIRECTLY.
10" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
11" (Search string "GEN_SYN_VIM:" in this file)
12
13" Automatically generated keyword lists: {{{1
14
15" Quit when a syntax file was already loaded {{{2
16if exists("b:current_syntax")
17 finish
18endif
h-east9b53c052024-02-13 21:09:22 +010019let s:keepcpo= &cpo
20set cpo&vim
21
22" vimTodo: contains common special-notices for comments {{{2
23" Use the vimCommentGroup cluster to add your own.
24syn keyword vimTodo contained COMBAK FIXME TODO XXX
25syn cluster vimCommentGroup contains=vimTodo,@Spell
26
27" regular vim commands {{{2
28" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR=''
29
30syn keyword vimCommand contained 2mat[ch] 3mat[ch]
31
Aliaksei Budaveidfcef892024-02-18 21:02:14 +030032" Lower priority for _new_ to distinguish constructors from the command.
33syn match vimCommand contained "\<new\>(\@!"
h-east9b53c052024-02-13 21:09:22 +010034syn match vimCommand contained "\<z[-+^.=]\=\>"
35syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man Over Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns
36
37" vimOptions are caught only when contained in a vimSet {{{2
38" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR=''
39
40" vimOptions: These are the turn-off setting variants {{{2
41" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
42
43" vimOptions: These are the invertible variants {{{2
44" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
45
46" termcap codes (which can also be set) {{{2
47" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR=''
48" term key codes
49syn keyword vimOption contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
50syn match vimOption contained "t_%1"
51syn match vimOption contained "t_#2"
52syn match vimOption contained "t_#4"
53syn match vimOption contained "t_@7"
54syn match vimOption contained "t_*7"
55syn match vimOption contained "t_&8"
56syn match vimOption contained "t_%i"
57syn match vimOption contained "t_k;"
58
59" unsupported settings: some were supported by vi but don't do anything in vim {{{2
60" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
61
62" AutoCmd Events {{{2
63syn case ignore
64" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR=''
65
66" Highlight commonly used Groupnames {{{2
67syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
68
69" Default highlighting groups {{{2
70" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
71syn case match
72
73" Function Names {{{2
74" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
75
76"--- syntax here and above generated by mkvimvim ---
77" Special Vim Highlighting (not automatic) {{{1
78
79" Set up folding commands for this syntax highlighting file {{{2
80if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhlmpPrt]'
81 if g:vimsyn_folding =~# 'a'
82 com! -nargs=* VimFolda <args> fold
83 else
84 com! -nargs=* VimFolda <args>
85 endif
86 if g:vimsyn_folding =~# 'f'
87 com! -nargs=* VimFoldf <args> fold
88 else
89 com! -nargs=* VimFoldf <args>
90 endif
91 if g:vimsyn_folding =~# 'h'
92 com! -nargs=* VimFoldh <args> fold
93 else
94 com! -nargs=* VimFoldh <args>
95 endif
96 if g:vimsyn_folding =~# 'l'
97 com! -nargs=* VimFoldl <args> fold
98 else
99 com! -nargs=* VimFoldl <args>
100 endif
101 if g:vimsyn_folding =~# 'm'
102 com! -nargs=* VimFoldm <args> fold
103 else
104 com! -nargs=* VimFoldm <args>
105 endif
106 if g:vimsyn_folding =~# 'p'
107 com! -nargs=* VimFoldp <args> fold
108 else
109 com! -nargs=* VimFoldp <args>
110 endif
111 if g:vimsyn_folding =~# 'P'
112 com! -nargs=* VimFoldP <args> fold
113 else
114 com! -nargs=* VimFoldP <args>
115 endif
116 if g:vimsyn_folding =~# 'r'
117 com! -nargs=* VimFoldr <args> fold
118 else
119 com! -nargs=* VimFoldr <args>
120 endif
121 if g:vimsyn_folding =~# 't'
122 com! -nargs=* VimFoldt <args> fold
123 else
124 com! -nargs=* VimFoldt <args>
125 endif
126else
127 com! -nargs=* VimFolda <args>
128 com! -nargs=* VimFoldf <args>
129 com! -nargs=* VimFoldh <args>
130 com! -nargs=* VimFoldl <args>
131 com! -nargs=* VimFoldm <args>
132 com! -nargs=* VimFoldp <args>
133 com! -nargs=* VimFoldP <args>
134 com! -nargs=* VimFoldr <args>
135 com! -nargs=* VimFoldt <args>
136endif
137
138" Deprecated variable options {{{2
139if exists("g:vim_minlines")
140 let g:vimsyn_minlines= g:vim_minlines
141endif
142if exists("g:vim_maxlines")
143 let g:vimsyn_maxlines= g:vim_maxlines
144endif
145if exists("g:vimsyntax_noerror")
146 let g:vimsyn_noerror= g:vimsyntax_noerror
147endif
148
149" Variable options {{{2
150if exists("g:vim_maxlines")
151 let s:vimsyn_maxlines= g:vim_maxlines
152else
153 let s:vimsyn_maxlines= 60
154endif
155
156" Numbers {{{2
157" =======
dkearns5cd86c62024-03-12 07:40:58 +1100158syn case ignore
159syn match vimNumber '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
160syn match vimNumber '\<0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
161syn match vimNumber '\<0o\=\o\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
162syn match vimNumber '\<0x\x\+' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
dkearns982e1912024-03-28 20:06:03 +1100163syn match vimNumber '\<0z\>' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
dkearns5cd86c62024-03-12 07:40:58 +1100164syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
165syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst1,vimCommand,vimComment,vim9Comment
166syn case match
h-east9b53c052024-02-13 21:09:22 +0100167
168" All vimCommands are contained by vimIsCommand. {{{2
dkearns35e6f4c2024-03-22 06:41:10 +1100169syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimDef,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,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.
dkearns76d62982024-03-23 05:55:25 +1100211syn cluster vimAugroupList contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vim9Comment,vimString,vimSubst,vimRegister,vimCmplxRepeat,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" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100229syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar
h-east9b53c052024-02-13 21:09:22 +0100230syn 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
dkearns76d62982024-03-23 05:55:25 +1100233syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
h-east9b53c052024-02-13 21:09:22 +0100234syn 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" =========
dkearns35e6f4c2024-03-22 06:41:10 +1100241syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
242syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
243syn cluster vimFuncBodyList contains=@vimCmdList,vimCmplxRepeat,vimComment,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimLetHereDoc,vimLineComment,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst
244syn cluster vimDefBodyList contains=@vimCmdList,vimCmplxRepeat,vim9Comment,vimContinue,vimCtrlChar,vimDef,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vim9LineComment,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSpecFile,vimString,vimSubst
245
246syn region vimFuncPattern contained matchgroup=vimOper start="/" end="$" contains=@vimSubstList
247syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
248syn match vimDef "\<def\>" skipwhite nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimDefKey
249
250syn match vimFunction "\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimFuncList skipwhite nextgroup=vimFuncParams
251syn match vimDef "\<def\s\+new\%(\i\|{.\{-1,}}\)\+" contains=@vimDefList nextgroup=vimDefParams
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300252syn match vimDef "\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+" contains=@vimDefList,vimMethodName nextgroup=vimDefParams
dkearns35e6f4c2024-03-22 06:41:10 +1100253
254syn match vimFuncComment contained +".*+ skipwhite skipnl nextgroup=vimFuncBody,vimEndfunction
255syn match vimDefComment contained "#.*" skipwhite skipnl nextgroup=vimDefBody,vimEnddef
256
257syn match vimFuncBang contained "!"
258syn match vimFuncSID contained "\c<sid>"
259syn match vimFuncSID contained "\<[sg]:"
260syn keyword vimFuncKey contained fu[nction]
261syn keyword vimDefKey contained def
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300262syn keyword vimMethodName contained empty len string
dkearns35e6f4c2024-03-22 06:41:10 +1100263
264syn region vimFuncParams contained matchgroup=Delimiter start="(" skip=+\n\s*\\\|\n\s*"\\ + end=")" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod contains=vimFuncParam,@vimContinue
265syn region vimDefParams contained matchgroup=Delimiter start="(" end=")" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType contains=vimDefParam,vim9Comment
266syn match vimFuncParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFuncParamEquals
267syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFuncParamEquals
268
269syn match vimFuncParamEquals contained "=" skipwhite nextgroup=@vimExprList
270syn match vimFuncMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipnl nextgroup=vimFuncBody,vimFuncComment,vimEndfunction,vimFuncMod
271
272syn region vimFuncBody contained start="^" matchgroup=vimCommand end="\<endfu\%[nction]\>" contains=@vimFuncBodyList
273syn region vimDefBody contained start="^" matchgroup=vimCommand end="\<enddef\>" contains=@vimDefBodyList
274
275syn match vimEndfunction "\<endf\%[unction]\>"
276syn match vimEnddef "\<enddef\>"
h-east9b53c052024-02-13 21:09:22 +0100277
278if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
dkearns35e6f4c2024-03-22 06:41:10 +1100279 syn region vimFuncFold start="\<fu\%[nction]\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)\+\s*(" end="\<endf\%[unction]\>" contains=vimFunction fold keepend transparent
dkearnse43ace52024-04-10 05:19:41 +1000280 syn region vimFuncFold start="\<def\>!\=\s*\%(<[sS][iI][dD]>\|[sg]:\)\=\%(\i\|[#.]\)\+(" end="\<enddef\>" contains=vimDef fold keepend transparent
281 syn region vimFuncFold start="\<def\s\+new\i\+(" end="\<enddef\>" contains=vimDef fold keepend transparent
h-east9b53c052024-02-13 21:09:22 +0100282endif
dkearns35e6f4c2024-03-22 06:41:10 +1100283
284syn match vimFuncVar contained "a:\%(\K\k*\|\d\+\)\>"
h-east9b53c052024-02-13 21:09:22 +0100285syn match vimFuncBlank contained "\s\+"
286
dkearns35e6f4c2024-03-22 06:41:10 +1100287" Types: {{{2
288" =====
h-east9b53c052024-02-13 21:09:22 +0100289" vimTypes : new for vim9
dkearns35e6f4c2024-03-22 06:41:10 +1100290syn region vimReturnType contained start=":\s" end="$" matchgroup=vim9Comment end="\ze#" skipwhite skipnl nextgroup=vimDefBody,vimDefComment,vimEnddef contains=vimTypeSep transparent
291syn match vimParamType contained ":\s\+\a" skipwhite skipnl nextgroup=vimFuncParamEquals contains=vimTypeSep,@vimType
292
293syn match vimTypeSep contained ":\s\@=" skipwhite nextgroup=@vimType
294syn keyword vimType contained any blob bool channel float job number string void
295syn match vimType contained "\<func\>"
296syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
297syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
298syn match vimUserType contained "\<\u\w*\>"
299
300syn cluster vimType contains=vimType,vimCompoundType,vimUserType
h-east9b53c052024-02-13 21:09:22 +0100301
302" Keymaps: (Vim Project Addition) {{{2
303" =======
304
dkearns76d62982024-03-23 05:55:25 +1100305" TODO: handle Vim9 script comments when something like #13104 is merged
h-east9b53c052024-02-13 21:09:22 +0100306syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,vimKeymapLineComment
307syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation
308syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
309syn match vimKeymapTailComment "\S.*" contained
310syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
311
312syn region vimKeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart
313
314" Special Filenames, Modifiers, Extension Removal: {{{2
315" ===============================================
dkearns2c51e152024-02-27 07:10:18 +1100316syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1
317syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1
318syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
319syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1
320syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1
321syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100322syn match vimSpecFileMod "\(:[phtre]\)\+" contained
323
324" User-Specified Commands: {{{2
325" =======================
dkearns76d62982024-03-23 05:55:25 +1100326syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,vimComment,vim9Comment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
h-east9b53c052024-02-13 21:09:22 +0100327syn keyword vimUserCommand contained com[mand]
328syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter
329syn match vimUserAttrbError contained "-\a\+\ze\s"
330syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
331syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
332syn match vimUserAttrb contained "-range\(=%\|=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
333syn match vimUserAttrb contained "-count\(=\d\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
334syn match vimUserAttrb contained "-bang\>" contains=vimOper,vimUserAttrbKey
335syn match vimUserAttrb contained "-bar\>" contains=vimOper,vimUserAttrbKey
336syn match vimUserAttrb contained "-buffer\>" contains=vimOper,vimUserAttrbKey
337syn match vimUserAttrb contained "-register\>" contains=vimOper,vimUserAttrbKey
338if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
339 syn match vimUserCmdError contained "\S\+\>"
340endif
341syn case ignore
342syn keyword vimUserAttrbKey contained bar ban[g] cou[nt] ra[nge] com[plete] n[args] re[gister]
343" GEN_SYN_VIM: vimUserAttrbCmplt, START_STR='syn keyword vimUserAttrbCmplt contained', END_STR=''
344syn keyword vimUserAttrbCmplt contained custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
345syn match vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
346
347syn case match
348syn match vimUserAttrbCmplt contained "custom,\u\w*"
349
350" Lower Priority Comments: after some vim commands... {{{2
351" =======================
352syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup,vimCommentString
353syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString
354syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
355syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
356" Vim9 comments - TODO: might be highlighted while they don't work
357syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
358syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
359syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
360" Vim9 comment inside expression
361syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString
362syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString
363syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString
364
365" Environment Variables: {{{2
366" =====================
367syn match vimEnvvar "\$\I\i*"
368syn match vimEnvvar "\${\I\i*}"
369
370" In-String Specials: {{{2
371" Try to catch strings, if nothing else matches (therefore it must precede the others!)
372" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
373syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
374syn match vimPatSepErr contained "\\)"
375syn match vimPatSep contained "\\|"
376syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
377syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
378syn match vimNotPatSep contained "\\\\"
379syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
380syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup
381syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+
h-east9b53c052024-02-13 21:09:22 +0100382"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
383syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont
384syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+
385syn match vimEscape contained "\\."
386" syn match vimEscape contained +\\[befnrt\"]+
387syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
388syn match vimEscape contained "\\<" contains=vimNotation
389syn match vimEscape contained "\\<\*[^>]*>\=>"
390
dkearnsb1427b42024-02-28 05:59:30 +1100391syn region vimString oneline start=+$'+ skip=+''+ end=+'+ contains=vimStringInterpolationBrace,vimStringInterpolationExpr
392syn region vimString oneline start=+$"+ end=+"+ contains=@vimStringGroup,vimStringInterpolationBrace,vimStringInterpolationExpr
393syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
394syn match vimStringInterpolationBrace contained "{{"
395syn match vimStringInterpolationBrace contained "}}"
h-east9b53c052024-02-13 21:09:22 +0100396
397" Substitutions: {{{2
398" =============
399syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
400syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
401syn cluster vimSubstList add=vimCollection
dkearns2c51e152024-02-27 07:10:18 +1100402syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
403syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
404syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
405syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>[\"#|]\@!" nextgroup=vimSubstPat
406syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)_\@=" nextgroup=vimSubstPat
407syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat
408" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
409" : # is allowed but "not recommended" (see :h pattern-delimiter)
410syn 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
411syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline
412syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
413syn match vimCollClassErr contained "\[:.\{-\}:\]"
414syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
415syn match vimSubstSubstr contained "\\z\=\d"
416syn match vimSubstTwoBS contained "\\\\"
417syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
418syn match vimSubstFlags contained "[&cegiIlnpr#]\+"
h-east9b53c052024-02-13 21:09:22 +0100419
420" 'String': {{{2
421syn match vimString "[^(,]'[^']\{-}\zs'"
422
423" Marks, Registers, Addresses, Filters: {{{2
dkearns2c51e152024-02-27 07:10:18 +1100424syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
425syn match vimMark "'[<>]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
426syn match vimMark ",\zs'[<>]\ze" nextgroup=vimFilter,vimMarkNumber,vimSubst1
427syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
428syn match vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1
429syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100430syn match vimPlainMark contained "'[a-zA-Z0-9]"
431syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter
432
433syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
434syn match vimRegister '\<norm\s\+\zs"[a-zA-Z0-9]'
435syn match vimRegister '\<normal\s\+\zs"[a-zA-Z0-9]'
436syn match vimRegister '@"'
437syn match vimPlainRegister contained '"[a-zA-Z0-9\-:.%#*+=]'
438syn match vimLetRegister contained '@["0-9\-a-zA-Z#=*+_/]'
439
440syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1
441syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1
442
443syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
444syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
445syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
446
447" Complex Repeats: (:h complex-repeat) {{{2
448" ===============
449syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
450syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
451
452" Set command and associated set-options (vimOptions) with comment {{{2
453syn 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
454syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]"me=e-1 end="$" contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar
455syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
456syn match vimSetSep contained "[,:]"
457syn match vimSetMod contained "&vim\=\|[!&?<]\|all&"
458
459" Let And Var: {{{2
460" ===========
461syn keyword vimLet let skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc,vimLetRegister,vimVarList
462syn keyword vimConst cons[t] skipwhite nextgroup=vimVar,vimLetHereDoc,vimVarList
463syn region vimVarList contained start="\[" end="]" contains=vimVar,vimContinue
464
465syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
466syn match vimUnletBang contained "!" skipwhite nextgroup=vimUnletVars
467syn region vimUnletVars contained start="$\I\|\h" skip="\n\s*\\" end="$" end="|" contains=vimVar,vimEnvvar,vimContinue,vimString,vimNumber
468
469VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s*\%(trim\s\+\%(eval\s\+\)\=\|eval\s\+\%(trim\s\+\)\=\)\=\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$'
470syn keyword vimLet var skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc
471
472" For: {{{2
473" ===
474syn keyword vimFor for skipwhite nextgroup=vimVar,vimVarList
dkearns76d62982024-03-23 05:55:25 +1100475
h-east9b53c052024-02-13 21:09:22 +0100476" Abbreviations: {{{2
477" =============
478" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
dkearns982e1912024-03-28 20:06:03 +1100479" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod'
h-east9b53c052024-02-13 21:09:22 +0100480
481" Autocmd: {{{2
482" =======
483syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace
484syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList
485syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod
486syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
487syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)"
488
489" Echo And Execute: -- prefer strings! {{{2
490" ================
dkearns61887b32024-03-15 23:45:48 +1100491" NOTE: No trailing comments
dkearnsb1427b42024-02-28 05:59:30 +1100492
dkearns61887b32024-03-15 23:45:48 +1100493syn region vimEcho
494 \ matchgroup=vimCommand
495 \ start="\<ec\%[ho]\>"
496 \ start="\<echoe\%[rr]\>"
497 \ start="\<echom\%[sg]\>"
498 \ start="\<echoc\%[onsole]\>"
499 \ start="\<echon\>"
500 \ start="\<echow\%[indow]\>"
501 \ skip=+\\|\|\n\s*\\\|\n\s*"\\ +
502 \ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
503
504syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
h-east9b53c052024-02-13 21:09:22 +0100505syn case ignore
dkearns61887b32024-03-15 23:45:48 +1100506syn keyword vimEchohlNone contained none
h-east9b53c052024-02-13 21:09:22 +0100507syn case match
508
dkearns35e6f4c2024-03-22 06:41:10 +1100509syn cluster vimEcho contains=vimEcho,vimEchohl
dkearns61887b32024-03-15 23:45:48 +1100510
511syn 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 +1100512
h-east9b53c052024-02-13 21:09:22 +0100513" Maps: {{{2
514" ====
515syn match vimMap "\<map\>\ze\s*(\@!" skipwhite nextgroup=vimMapMod,vimMapLhs
516syn match vimMap "\<map!" contains=vimMapBang skipwhite nextgroup=vimMapMod,vimMapLhs
517" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns16249702024-02-23 05:45:05 +1100518" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod'
519syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
h-east9b53c052024-02-13 21:09:22 +0100520" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs'
dkearns5d67aef2024-03-10 04:01:22 +1100521syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation skipwhite nextgroup=vimMapRhs
522syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation skipwhite skipnl nextgroup=vimMapRhsContinue
523syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
h-east9b53c052024-02-13 21:09:22 +0100524syn 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 +1100525syn region vimMapRhs contained start="\S" skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation skipnl nextgroup=vimMapRhsContinue
526" assume a continuation comment introduces the RHS
527syn region vimMapRhsContinue contained start=+^\s*\%(\\\|"\\ \)+ skip=+\\|\|\@1<=|\|\n\s*\\\|\n\s*"\\ + end="|" end="$" contains=@vimContinue,vimCtrlChar,vimNotation
h-east9b53c052024-02-13 21:09:22 +0100528syn case ignore
529syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique
530syn case match
531
532" Menus: {{{2
533" =====
dkearns62b26042024-03-10 03:43:28 +1100534" NOTE: tail comments disallowed
535" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
536syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
537syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
538syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + end="$" matchgroup=vimSep end="|"
dkearnsec21baf2024-03-20 04:04:42 +1100539syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
540syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
dkearns62b26042024-03-10 03:43:28 +1100541syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
542syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
543syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
544syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
545syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
546
547syn region vimMenutranslate
548 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>"
549 \ skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ +
550 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)"
551 \ contains=@vimContinue,vimMenutranslateName keepend transparent
552" oneline is sufficient to match the current formatting in runtime/lang/*.vim
553syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
554syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
h-east9b53c052024-02-13 21:09:22 +0100555
556" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
557" ======================
558syn case ignore
559syn 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
560
561syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
562syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
563syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
564syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
565syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
566syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
567syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
568
569syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
570syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
571syn match vimNotation '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
572syn match vimNotation '\%#=1\%(\\\|<lt>\)\=<\%(q-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>' contains=vimBracket
573syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
574syn match vimNotation "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
575
576syn match vimBracket contained "[\\<>]"
577syn case match
578
579" User Function Highlighting: {{{2
580" (following Gautam Iyer's suggestion)
581" ==========================
dkearns9530fe42024-03-19 05:19:51 +1100582syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncEcho,vimFuncName,vimUserFunc,vimExecute
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300583syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation,vimMethodName
dkearns9530fe42024-03-19 05:19:51 +1100584syn keyword vimFuncEcho contained ec ech echo
h-east9b53c052024-02-13 21:09:22 +0100585
586" User Command Highlighting: {{{2
587syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!'
588
589" Errors And Warnings: {{{2
590" ====================
591if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
Aliaksei Budaveidfcef892024-02-18 21:02:14 +0300592 " TODO: The new-prefix exception should only apply to constructor definitions.
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +0300593 " TODO: The |builtin-object-methods| exception should only apply to method
594 " definitions.
595 syn match vimFunctionError "\s\zs\%(empty\|len\|new\|string\)\@![a-z0-9]\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
h-east9b53c052024-02-13 21:09:22 +0100596 syn match vimFunctionError "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\d\i\{-}\ze\s*(" contained contains=vimFuncKey,vimFuncBlank
597 syn match vimElseIfErr "\<else\s\+if\>"
598 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
599endif
600
601syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<retu\%[rn]\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation
602
603" Norm: {{{2
604" ====
605syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
606syn match vimNormCmds contained ".*$"
607
608" Syntax: {{{2
609"=======
610syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
611syn 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
612syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
613
614if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
615 syn match vimSynError contained "\i\+"
616 syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
617endif
618syn match vimSynContains contained "\<contain\%(s\|edin\)=" skipwhite skipnl nextgroup=vimGroupList
619syn match vimSynKeyContainedin contained "\<containedin=" skipwhite skipnl nextgroup=vimGroupList
620syn match vimSynNextgroup contained "\<nextgroup=" skipwhite skipnl nextgroup=vimGroupList
621if has("conceal")
622 " no whitespace allowed after '='
623 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
624 syn match vimSynCcharValue contained "\S"
625endif
626
627syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment
h-east9b53c052024-02-13 21:09:22 +0100628syn cluster vimFuncBodyList add=vimSyntax
629
630" Syntax: case {{{2
631syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
632if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
633 syn match vimSynCaseError contained "\i\+"
634endif
635syn keyword vimSynCase contained ignore match
636
637" Syntax: clear {{{2
638syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
639
640" Syntax: cluster {{{2
641syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
642syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
643syn match vimGroupAdd contained keepend "\<add=" skipwhite skipnl nextgroup=vimGroupList
644syn match vimGroupRem contained keepend "\<remove=" skipwhite skipnl nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100645
646" Syntax: foldlevel {{{2
647syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldMethod,vimSynFoldMethodError
648if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldmethoderror")
649 syn match vimSynFoldMethodError contained "\i\+"
650endif
651syn keyword vimSynFoldMethod contained start minimum
652
653" Syntax: iskeyword {{{2
654syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimIskList
655syn match vimIskList contained '\S\+' contains=vimIskSep
656syn match vimIskSep contained ','
657
658" Syntax: include {{{2
659syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
h-east9b53c052024-02-13 21:09:22 +0100660
661" Syntax: keyword {{{2
662syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
663syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
664syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
665syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
h-east9b53c052024-02-13 21:09:22 +0100666
667" Syntax: match {{{2
668syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
669syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
670syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup
671syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
h-east9b53c052024-02-13 21:09:22 +0100672
673" Syntax: off and on {{{2
674syn keyword vimSynType contained enable list manual off on reset
675
676" Syntax: region {{{2
677syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
678syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
679syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
680syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\\|\n\s*\\\|\n\s*"\\ + end="|\|$" contains=@vimSynRegGroup
681syn match vimSynRegOpt contained "\%#=1\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
682syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
683syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
684syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\\\|\n\s*"\\ / end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
685syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
686syn match vimSynPatMod contained "\%#=1\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
687syn match vimSynPatMod contained "lc=\d\+"
688syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
689syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
690syn match vimSynNotPatRange contained "\\\\\|\\\["
691syn match vimMtchComment contained '"[^"]\+$'
h-east9b53c052024-02-13 21:09:22 +0100692
693" Syntax: sync {{{2
694" ============
695syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
696if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
697 syn match vimSyncError contained "\i\+"
698endif
699syn keyword vimSyncC contained ccomment clear fromstart
700syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
701syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynReg
702syn match vimSyncLinebreak contained "\<linebreaks=" skipwhite nextgroup=vimNumber
703syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
704syn match vimSyncLines contained "\(min\|max\)\=lines=" nextgroup=vimNumber
705syn match vimSyncGroupName contained "\h\w*" skipwhite nextgroup=vimSyncKey
706syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
707syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone
708syn keyword vimSyncNone contained NONE
709
710" Additional IsCommand: here by reasons of precedence {{{2
711" ====================
712syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation
713
714" Highlighting: {{{2
715" ============
716syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment,vim9Comment
717if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
718 syn match vimHiCtermError contained "\D\i*"
719endif
720syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
dkearns9530fe42024-03-19 05:19:51 +1100721syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
h-east9b53c052024-02-13 21:09:22 +0100722
723syn match vimHiGroup contained "\i\+"
724syn case ignore
725syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
726syn keyword vimFgBgAttrib contained none bg background fg foreground
727syn case match
728syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
729syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
730syn case ignore
731syn 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
732syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
733
734syn case match
735syn match vimHiFontname contained "[a-zA-Z\-*]\+"
736syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
737syn match vimHiGuiRgb contained "#\x\{6}"
738
739" Highlighting: hi group key=arg ... {{{2
740syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment
dkearns9530fe42024-03-19 05:19:51 +1100741syn 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 +0100742if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
743 syn match vimHiKeyError contained "\i\+="he=e-1
744endif
745syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
dkearns9530fe42024-03-19 05:19:51 +1100746syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
h-east9b53c052024-02-13 21:09:22 +0100747syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
748syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
749syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
750syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
751syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
752syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
753syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
754syn match vimHiTermcap contained "\S\+" contains=vimNotation
755syn match vimHiNmbr contained '\d\+'
756
757" Highlight: clear {{{2
dkearns9530fe42024-03-19 05:19:51 +1100758syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHiGroup
h-east9b53c052024-02-13 21:09:22 +0100759
760" Highlight: link {{{2
761" see tst24 (hi def vs hi) (Jul 06, 2018)
762"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 +1100763" TODO: simplify and allow line continuations --djk
764syn 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 +0100765
766" Control Characters: {{{2
767" ==================
768syn match vimCtrlChar "[- -]"
769
770" Beginners - Patterns that involve ^ {{{2
771" =========
772syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle,vimComment
773syn match vimLineComment +^[ \t:]*"\("[^"]*"\|[^"]\)*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
774syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
775syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
776" Note: Look-behind to work around nextgroup skipnl consuming leading whitespace and preventing a match
777syn match vimContinue "^\s*\zs\\"
778syn match vimContinueComment '^\s*\zs["#]\\ .*' contained
779syn cluster vimContinue contains=vimContinue,vimContinueComment
780syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
781syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
782
783" Searches And Globals: {{{2
784" ====================
785syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim
786syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained
dkearns2c51e152024-02-27 07:10:18 +1100787syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
788syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1
h-east9b53c052024-02-13 21:09:22 +0100789
790" Embedded Scripts: {{{2
791" ================
792" perl,ruby : Benoit Cerrina
793" python,tcl : Johannes Zellner
794" mzscheme, lua : Charles Campbell
795
796" Allows users to specify the type of embedded script highlighting
797" they want: (perl/python/ruby/tcl support)
798" g:vimsyn_embed == 0 : don't embed any scripts
799" g:vimsyn_embed =~# 'l' : embed lua (but only if vim supports it)
800" g:vimsyn_embed =~# 'm' : embed mzscheme (but only if vim supports it)
801" g:vimsyn_embed =~# 'p' : embed perl (but only if vim supports it)
802" g:vimsyn_embed =~# 'P' : embed python (but only if vim supports it)
803" g:vimsyn_embed =~# 'r' : embed ruby (but only if vim supports it)
804" g:vimsyn_embed =~# 't' : embed tcl (but only if vim supports it)
805if !exists("g:vimsyn_embed")
806 let g:vimsyn_embed= "lmpPr"
807endif
808
809" [-- lua --] {{{3
810let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
811if !filereadable(s:luapath)
812 for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
813 if filereadable(fnameescape(s:luapath))
814 let s:luapath= fnameescape(s:luapath)
815 break
816 endif
817 endfor
818endif
819if (g:vimsyn_embed =~# 'l' && has("lua")) && filereadable(s:luapath)
820 unlet! b:current_syntax
821 syn cluster vimFuncBodyList add=vimLuaRegion
822 exe "syn include @vimLuaScript ".s:luapath
823 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimLuaScript
824 VimFoldl syn region vimLuaRegion matchgroup=vimScriptDelim start=+lua\s*<<\s*$+ end=+\.$+ contains=@vimLuaScript
825 syn cluster vimFuncBodyList add=vimLuaRegion
826else
827 syn region vimEmbedError start=+lua\s*<<\s*\z(.*\)$+ end=+^\z1$+
828 syn region vimEmbedError start=+lua\s*<<\s*$+ end=+\.$+
829endif
830unlet s:luapath
831
832" [-- perl --] {{{3
833let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
834if !filereadable(s:perlpath)
835 for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
836 if filereadable(fnameescape(s:perlpath))
837 let s:perlpath= fnameescape(s:perlpath)
838 break
839 endif
840 endfor
841endif
842if (g:vimsyn_embed =~# 'p' && has("perl")) && filereadable(s:perlpath)
843 unlet! b:current_syntax
844 syn cluster vimFuncBodyList add=vimPerlRegion
845 exe "syn include @vimPerlScript ".s:perlpath
846 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(\S*\)\ze\(\s*["#].*\)\=$+ end=+^\z1\ze\(\s*[#"].*\)\=$+ contains=@vimPerlScript
847 VimFoldp syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
848 syn cluster vimFuncBodyList add=vimPerlRegion
849else
850 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
851 syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
852endif
853unlet s:perlpath
854
855" [-- ruby --] {{{3
856let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
857if !filereadable(s:rubypath)
858 for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
859 if filereadable(fnameescape(s:rubypath))
860 let s:rubypath= fnameescape(s:rubypath)
861 break
862 endif
863 endfor
864endif
865if (g:vimsyn_embed =~# 'r' && has("ruby")) && filereadable(s:rubypath)
866 syn cluster vimFuncBodyList add=vimRubyRegion
867 unlet! b:current_syntax
868 exe "syn include @vimRubyScript ".s:rubypath
869 VimFoldr syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimRubyScript
870 syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
871 syn cluster vimFuncBodyList add=vimRubyRegion
872else
873 syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
874 syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
875endif
876unlet s:rubypath
877
878" [-- python --] {{{3
879let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
880if !filereadable(s:pythonpath)
881 for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
882 if filereadable(fnameescape(s:pythonpath))
883 let s:pythonpath= fnameescape(s:pythonpath)
884 break
885 endif
886 endfor
887endif
888if g:vimsyn_embed =~# 'P' && has("pythonx") && filereadable(s:pythonpath)
889 unlet! b:current_syntax
890 syn cluster vimFuncBodyList add=vimPythonRegion
891 exe "syn include @vimPythonScript ".s:pythonpath
892 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
893 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
894 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\%(trim\s*\)\=\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript
895 VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*\%(trim\s*\)\=$+ end=+\.$+ contains=@vimPythonScript
896 syn cluster vimFuncBodyList add=vimPythonRegion
897else
898 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
899 syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+
900endif
901unlet s:pythonpath
902
903" [-- tcl --] {{{3
904if has("win32") || has("win95") || has("win64") || has("win16")
905 " apparently has("tcl") has been hanging vim on some windows systems with cygwin
906 let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
907else
908 let s:trytcl= 1
909endif
910if s:trytcl
911 let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
912 if !filereadable(s:tclpath)
913 for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
914 if filereadable(fnameescape(s:tclpath))
915 let s:tclpath= fnameescape(s:tclpath)
916 break
917 endif
918 endfor
919 endif
920 if (g:vimsyn_embed =~# 't' && has("tcl")) && filereadable(s:tclpath)
921 unlet! b:current_syntax
922 syn cluster vimFuncBodyList add=vimTclRegion
923 exe "syn include @vimTclScript ".s:tclpath
924 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
925 VimFoldt syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
926 syn cluster vimFuncBodyList add=vimTclScript
927 else
928 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
929 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
930 endif
931 unlet s:tclpath
932else
933 syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
934 syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
935endif
936unlet s:trytcl
937
938" [-- mzscheme --] {{{3
939let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
940if !filereadable(s:mzschemepath)
941 for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
942 if filereadable(fnameescape(s:mzschemepath))
943 let s:mzschemepath= fnameescape(s:mzschemepath)
944 break
945 endif
946 endfor
947endif
948if (g:vimsyn_embed =~# 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
949 unlet! b:current_syntax
950 let s:iskKeep= &isk
951 syn cluster vimFuncBodyList add=vimMzSchemeRegion
952 exe "syn include @vimMzSchemeScript ".s:mzschemepath
953 let &isk= s:iskKeep
954 unlet s:iskKeep
955 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
956 VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
957 syn cluster vimFuncBodyList add=vimMzSchemeRegion
958else
959 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
960 syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
961endif
962unlet s:mzschemepath
963
964" Synchronize (speed) {{{2
965"============
966if exists("g:vimsyn_minlines")
967 exe "syn sync minlines=".g:vimsyn_minlines
968endif
969exe "syn sync maxlines=".s:vimsyn_maxlines
970syn sync linecont "^\s\+\\"
dkearns62b26042024-03-10 03:43:28 +1100971syn sync linebreaks=1
h-east9b53c052024-02-13 21:09:22 +0100972syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
973
974" ====================
975" Highlighting Settings {{{2
976" ====================
977
978if !exists("skip_vim_syntax_inits")
979 if !exists("g:vimsyn_noerror")
980 hi def link vimBehaveError vimError
981 hi def link vimCollClassErr vimError
982 hi def link vimErrSetting vimError
983 hi def link vimEmbedError vimError
984 hi def link vimFTError vimError
985 hi def link vimFunctionError vimError
986 hi def link vimFunc vimError
987 hi def link vimHiAttribList vimError
988 hi def link vimHiCtermError vimError
989 hi def link vimHiKeyError vimError
h-east9b53c052024-02-13 21:09:22 +0100990 hi def link vimMapModErr vimError
991 hi def link vimSubstFlagErr vimError
992 hi def link vimSynCaseError vimError
993 hi def link vimSynFoldMethodError vimError
994 hi def link vimBufnrWarn vimWarn
995 endif
996
997 hi def link vimAbb vimCommand
998 hi def link vimAddress vimMark
dkearnsc4aef9a2024-03-04 02:42:47 +1100999 hi def link vimAugroupBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001000 hi def link vimAugroupError vimError
1001 hi def link vimAugroupKey vimCommand
h-east9b53c052024-02-13 21:09:22 +01001002 hi def link vimAutoCmd vimCommand
1003 hi def link vimAutoEvent Type
1004 hi def link vimAutoCmdMod Special
h-east9b53c052024-02-13 21:09:22 +01001005 hi def link vimBang vimOper
dkearns2c51e152024-02-27 07:10:18 +11001006 hi def link vimBehaveBang vimBang
h-east9b53c052024-02-13 21:09:22 +01001007 hi def link vimBehaveModel vimBehave
1008 hi def link vimBehave vimCommand
1009 hi def link vimBracket Delimiter
1010 hi def link vimCmplxRepeat SpecialChar
1011 hi def link vimCommand Statement
1012 hi def link vimComment Comment
1013 hi def link vim9Comment Comment
1014 hi def link vimCommentString vimString
1015 hi def link vimCommentTitle PreProc
1016 hi def link vimCondHL vimCommand
1017 hi def link vimConst vimCommand
1018 hi def link vimContinue Special
1019 hi def link vimContinueComment vimComment
1020 hi def link vimCtrlChar SpecialChar
dkearns35e6f4c2024-03-22 06:41:10 +11001021 hi def link vimDefComment vimComment
1022 hi def link vimDefKey vimCommand
1023 hi def link vimDefParam vimVar
dkearnsb1427b42024-02-28 05:59:30 +11001024 hi def link vimEcho vimCommand
dkearns61887b32024-03-15 23:45:48 +11001025 hi def link vimEchohlNone vimGroup
1026 hi def link vimEchohl vimCommand
h-east9b53c052024-02-13 21:09:22 +01001027 hi def link vimElseIfErr Error
dkearns35e6f4c2024-03-22 06:41:10 +11001028 hi def link vimEndfunction vimCommand
1029 hi def link vimEnddef vimCommand
h-east9b53c052024-02-13 21:09:22 +01001030 hi def link vimEnvvar PreProc
1031 hi def link vimError Error
1032 hi def link vimEscape Special
1033 hi def link vimFBVar vimVar
1034 hi def link vimFgBgAttrib vimHiAttrib
1035 hi def link vimFuncEcho vimCommand
h-east9b53c052024-02-13 21:09:22 +01001036 hi def link vimFor vimCommand
1037 hi def link vimFTCmd vimCommand
1038 hi def link vimFTOption vimSynType
dkearns35e6f4c2024-03-22 06:41:10 +11001039 hi def link vimFuncBang vimBang
1040 hi def link vimFuncComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001041 hi def link vimFuncKey vimCommand
1042 hi def link vimFuncName Function
dkearns35e6f4c2024-03-22 06:41:10 +11001043 hi def link vimFuncMod Special
1044 hi def link vimFuncParam vimVar
1045 hi def link vimFuncParamEquals vimOper
h-east9b53c052024-02-13 21:09:22 +01001046 hi def link vimFuncSID Special
1047 hi def link vimFuncVar Identifier
1048 hi def link vimGroupAdd vimSynOption
1049 hi def link vimGroupName vimGroup
1050 hi def link vimGroupRem vimSynOption
1051 hi def link vimGroupSpecial Special
1052 hi def link vimGroup Type
1053 hi def link vimHiAttrib PreProc
1054 hi def link vimHiBang vimBang
dkearns9530fe42024-03-19 05:19:51 +11001055 hi def link vimHiClear Type
1056 hi def link vimHiCtermColor Constant
h-east9b53c052024-02-13 21:09:22 +01001057 hi def link vimHiCtermFgBg vimHiTerm
dkearns9530fe42024-03-19 05:19:51 +11001058 hi def link vimHiCtermfont vimHiTerm
1059 hi def link vimHiCtermul vimHiTerm
h-east9b53c052024-02-13 21:09:22 +01001060 hi def link vimHiCTerm vimHiTerm
1061 hi def link vimHighlight vimCommand
1062 hi def link vimHiGroup vimGroupName
1063 hi def link vimHiGuiFgBg vimHiTerm
1064 hi def link vimHiGuiFont vimHiTerm
1065 hi def link vimHiGuiRgb vimNumber
1066 hi def link vimHiGui vimHiTerm
1067 hi def link vimHiNmbr Number
1068 hi def link vimHiStartStop vimHiTerm
1069 hi def link vimHiTerm Type
1070 hi def link vimHLGroup vimGroup
h-east9b53c052024-02-13 21:09:22 +01001071 hi def link vimInsert vimString
1072 hi def link vimIskSep Delimiter
h-east9b53c052024-02-13 21:09:22 +01001073 hi def link vimKeymapLineComment vimComment
1074 hi def link vimKeymapTailComment vimComment
h-east9b53c052024-02-13 21:09:22 +01001075 hi def link vimLet vimCommand
1076 hi def link vimLetHereDoc vimString
1077 hi def link vimLetHereDocStart Special
1078 hi def link vimLetHereDocStop Special
1079 hi def link vimLetRegister Special
1080 hi def link vimLineComment vimComment
1081 hi def link vim9LineComment vimComment
1082 hi def link vimMapBang vimBang
1083 hi def link vimMapModKey vimFuncSID
1084 hi def link vimMapMod vimBracket
1085 hi def link vimMap vimCommand
1086 hi def link vimMark Number
1087 hi def link vimMarkNumber vimNumber
1088 hi def link vimMenuBang vimBang
dkearns62b26042024-03-10 03:43:28 +11001089 hi def link vimMenuClear Special
h-east9b53c052024-02-13 21:09:22 +01001090 hi def link vimMenuMod vimMapMod
h-east9b53c052024-02-13 21:09:22 +01001091 hi def link vimMenuName PreProc
dkearns62b26042024-03-10 03:43:28 +11001092 hi def link vimMenu vimCommand
1093 hi def link vimMenuNotation vimNotation
1094 hi def link vimMenuPriority Number
1095 hi def link vimMenuStatus Special
1096 hi def link vimMenutranslateComment vimComment
Aliaksei Budavei80aabaa2024-03-31 19:26:32 +03001097 hi def link vimMethodName vimFuncName
h-east9b53c052024-02-13 21:09:22 +01001098 hi def link vimMtchComment vimComment
1099 hi def link vimNorm vimCommand
1100 hi def link vimNotation Special
1101 hi def link vimNotFunc vimCommand
1102 hi def link vimNotPatSep vimString
1103 hi def link vimNumber Number
1104 hi def link vimOperError Error
1105 hi def link vimOper Operator
h-east9b53c052024-02-13 21:09:22 +01001106 hi def link vimOption PreProc
1107 hi def link vimParenSep Delimiter
1108 hi def link vimPatSepErr vimError
1109 hi def link vimPatSepR vimPatSep
1110 hi def link vimPatSep SpecialChar
1111 hi def link vimPatSepZone vimString
1112 hi def link vimPatSepZ vimPatSep
1113 hi def link vimPattern Type
1114 hi def link vimPlainMark vimMark
1115 hi def link vimPlainRegister vimRegister
1116 hi def link vimRegister SpecialChar
1117 hi def link vimScriptDelim Comment
1118 hi def link vimSearchDelim Statement
1119 hi def link vimSearch vimString
1120 hi def link vimSep Delimiter
1121 hi def link vimSetMod vimOption
1122 hi def link vimSetSep Statement
1123 hi def link vimSetString vimString
1124 hi def link vimSpecFile Identifier
1125 hi def link vimSpecFileMod vimSpecFile
1126 hi def link vimSpecial Type
h-east9b53c052024-02-13 21:09:22 +01001127 hi def link vimStringCont vimString
1128 hi def link vimString String
1129 hi def link vimStringEnd vimString
1130 hi def link vimStringInterpolationBrace vimEscape
1131 hi def link vimSubst1 vimSubst
1132 hi def link vimSubstDelim Delimiter
1133 hi def link vimSubstFlags Special
1134 hi def link vimSubstSubstr SpecialChar
1135 hi def link vimSubstTwoBS vimString
1136 hi def link vimSubst vimCommand
1137 hi def link vimSynCaseError Error
1138 hi def link vimSynCase Type
1139 hi def link vimSyncC Type
1140 hi def link vimSyncError Error
1141 hi def link vimSyncGroupName vimGroupName
1142 hi def link vimSyncGroup vimGroupName
1143 hi def link vimSyncKey Type
1144 hi def link vimSyncNone Type
1145 hi def link vimSynContains vimSynOption
1146 hi def link vimSynError Error
1147 hi def link vimSynFoldMethodError Error
1148 hi def link vimSynFoldMethod Type
1149 hi def link vimSynKeyContainedin vimSynContains
1150 hi def link vimSynKeyOpt vimSynOption
1151 hi def link vimSynCchar vimSynOption
1152 hi def link vimSynCcharValue Character
1153 hi def link vimSynMtchGrp vimSynOption
1154 hi def link vimSynMtchOpt vimSynOption
1155 hi def link vimSynNextgroup vimSynOption
1156 hi def link vimSynNotPatRange vimSynRegPat
1157 hi def link vimSynOption Special
1158 hi def link vimSynPatRange vimString
1159 hi def link vimSynRegOpt vimSynOption
1160 hi def link vimSynRegPat vimString
1161 hi def link vimSynReg Type
1162 hi def link vimSyntax vimCommand
1163 hi def link vimSynType vimSpecial
1164 hi def link vimTodo Todo
1165 hi def link vimType Type
1166 hi def link vimUnlet vimCommand
1167 hi def link vimUnletBang vimBang
1168 hi def link vimUnmap vimMap
1169 hi def link vimUserAttrbCmpltFunc Special
1170 hi def link vimUserAttrbCmplt vimSpecial
1171 hi def link vimUserAttrbKey vimOption
1172 hi def link vimUserAttrb vimSpecial
1173 hi def link vimUserAttrbError Error
1174 hi def link vimUserCmdError Error
1175 hi def link vimUserCommand vimCommand
1176 hi def link vimUserFunc Normal
1177 hi def link vimVar Identifier
1178 hi def link vimWarn WarningMsg
1179endif
1180
1181" Current Syntax Variable: {{{2
1182let b:current_syntax = "vim"
1183
1184" ---------------------------------------------------------------------
1185" Cleanup: {{{1
1186delc VimFolda
1187delc VimFoldf
1188delc VimFoldl
1189delc VimFoldm
1190delc VimFoldp
1191delc VimFoldP
1192delc VimFoldr
1193delc VimFoldt
1194let &cpo = s:keepcpo
1195unlet s:keepcpo
dkearns5d67aef2024-03-10 04:01:22 +11001196" vim:ts=18 fdm=marker ft=vim