Files
Foxe Chen 86cfe56b30 patch 9.2.1161: the image feature can be improved
Problem:  the image feature can be improved
Solution: Refactor the image feature, make use of the pixman library if
          possible, add image_info(), image_add() and image_discard()
          functions and the 'imageprotocol' option (Foxe Chen)

closes: #21234

Assisted-by: Claude
Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-09-30 21:57:39 +00:00

3540 lines
204 KiB
VimL

" Vim syntax file
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
" Last Change: 2026 Sep 30
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
" THIS FILE PARTLY GENERATED BY gen_syntax_vim.vim.
" (Search string "GEN_SYN_VIM:" in this file)
" Quit when a syntax file was already loaded {{{1
if exists("b:current_syntax")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
" Feature testing {{{1
" NOTE: vimsyn_force_vim9script and vimsyn_force_cmdline_window for internal use only
let s:vim9script = get(b:, "vimsyn_force_vim9script", v:false) || "\n" .. getline(1, 32)->join("\n") =~# '\nvim9s\%[cript]\>'
let s:cmdline_window = get(b:, "vimsyn_force_cmdline_window", v:false) || win_gettype() ==# "command"
function s:has(feature)
return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1
endfunction
" Automatically generated keyword lists: {{{1
" vimTodo: contains common special-notices for comments {{{2
" Use the vimCommentGroup cluster to add your own.
syn keyword vimTodo contained COMBAK FIXME TODO XXX
syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
" GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang'
syn keyword vimCommand contained al[l] ar[gs] arga[dd] argd[elete] argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] bN[ext] ba[ll] bad[d] balt bd[elete] bf[irst] bl[ast] bm[odified] bn[ext] bp[revious] br[ewind] brea[k] buffers bun[load] bw[ipeout] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] ce[nter] cex[pr] cf[ile] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] changes che[ckpath] checkt[ime] chi[story] cl[ist] clip[reset] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] col[der] colo[rscheme] comc[lear] comp[iler] con[tinue] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] delm[arks] defc[ompile] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] nextgroup=vimBang
syn keyword vimCommand contained diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ex exi[t] exu[sage] f[ile] files fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldo[pen] go[to] gu[i] gv[im] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] ju[mps] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lcl[ose] lcs[cope] le[ft] lex[pr] lf[ile] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lhi[story] ll lla[st] lli[st] lne[xt] lnew[er] lnf[ile] lo[adview] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] nextgroup=vimBang
syn keyword vimCommand contained ls m[ove] marks mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] new noh[lsearch] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] packl[oadall] pb[uffer] pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] nextgroup=vimBang
syn keyword vimCommand contained sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sla[st] sn[ext] so[urce] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sync[bind] smi[le] tN[ext] ta[g] tags tabc[lose] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs te[aroff] tf[irst] tj[ump] tl[ast] tn[ext] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] up[date] ve[rsion] vi[sual] vie[w] viu[sage] vne[w] vs[plit] wN[ext] wa[ll] wi[nsize] winp[os] wl[restore] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] nextgroup=vimBang
syn keyword vimCommand contained x[it] xa[ll] xr[estore] y[ank] nextgroup=vimBang
syn match vimCommand_ contained "a\%(l\%[l]\|rga\%[dd]\|rgd\%[elete]\|rge\%[dit]\|rgu\%[ment]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "b\%(N\%[ext]\|a\%[ll]\|d\%[elete]\|f\%[irst]\|l\%[ast]\|m\%[odified]\|n\%[ext]\|p\%[revious]\|r\%[ewind]\|un\%[load]\|w\%[ipeout]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "c\%(N\%[ext]\|Nf\%[ile]\|abo\%[ve]\|ad\%[dbuffer]\|af\%[ter]\|b\%[uffer]\|be\%[fore]\|bel\%[ow]\|c\|e\%[nter]\|fir\%[st]\|getb\%[uffer]\|heckt\%[ime]\|hi\%[story]\|la\%[st]\|lo\%[se]\|n\%[ext]\|new\%[er]\|nf\%[ile]\|ol\%[der]\|ope\%[n]\|p\%[revious]\|pf\%[ile]\|q\%[uit]\|r\%[ewind]\|w\%[indow]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "d\%(iffg\%[et]\|iffpu\%[t]\|j\%[ump]\|li\%[st]\|s\%[earch]\|sp\%[lit]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "e\%(m\%[enu]\|xi\%[t]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "f\%(\%[ile]\|in\%[d]\|o\%[ld]\|oldc\%[lose]\|oldo\%[pen]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "go\%[to]\>" nextgroup=vimBang
syn match vimCommand_ contained "ha\%[rdcopy]\>" nextgroup=vimBang
syn match vimCommand_ contained "i\%(j\%[ump]\|l\%[ist]\|p\%[ut]\|s\%[earch]\|sp\%[lit]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "l\%(\%[ist]\|N\%[ext]\|Nf\%[ile]\|ab\%[ove]\|addb\%[uffer]\|af\%[ter]\|b\%[uffer]\|be\%[fore]\|bel\%[ow]\|cl\%[ose]\|e\%[ft]\|fir\%[st]\|getb\%[uffer]\|hi\%[story]\|l\|la\%[st]\|ne\%[xt]\|new\%[er]\|nf\%[ile]\|ol\%[der]\|op\%[en]\|p\%[revious]\|pf\%[ile]\|r\%[ewind]\|w\%[indow]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "m\%(\%[ove]\|es\%[sages]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "n\%(\%[ext]\|ew\)\>" nextgroup=vimBang
syn match vimCommand_ contained "o\%(\%[pen]\|n\%[ly]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "p\%(\%[rint]\|b\%[uffer]\|o\%[p]\|p\%[op]\|rev\%[ious]\|s\%[earch]\|t\%[ag]\|tN\%[ext]\|tf\%[irst]\|tn\%[ext]\|tp\%[revious]\|tr\%[ewind]\|u\%[t]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "q\%[uit]\>" nextgroup=vimBang
syn match vimCommand_ contained "r\%(\%[ead]\|es\%[ize]\|et\%[ab]\|i\%[ght]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "s\%(N\%[ext]\|a\%[rgument]\|al\%[l]\|b\%[uffer]\|bN\%[ext]\|ba\%[ll]\|bm\%[odified]\|bn\%[ext]\|bp\%[revious]\|cr\%[iptnames]\|f\%[ind]\|ig\%[n]\|n\%[ext]\|o\%[urce]\|pe\%[llgood]\|pellra\%[re]\|pellu\%[ndo]\|pellw\%[rong]\|pr\%[evious]\|ta\%[g]\|un\%[hide]\|v\%[iew]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "t\%(N\%[ext]\|a\%[g]\|abc\%[lose]\|abe\%[dit]\|abf\%[ind]\|abm\%[ove]\|abn\%[ext]\|abnew\|abo\%[nly]\|abp\%[revious]\|abN\%[ext]\|f\%[irst]\|n\%[ext]\|p\%[revious]\|r\%[ewind]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "u\%(\%[ndo]\|nh\%[ide]\|p\%[date]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "v\%(ne\%[w]\|s\%[plit]\)\>" nextgroup=vimBang
syn match vimCommand_ contained "w\%(N\%[ext]\|n\%[ext]\|p\%[revious]\|q\)\>" nextgroup=vimBang
syn match vimCommand_ contained "x\%[it]\>" nextgroup=vimBang
syn match vimCommand_ contained "y\%[ank]\>" nextgroup=vimBang
" lower priority :syn-match to allow for :command/function() distinction
" :chdir and :delete is handled specially elsewhere
syn match vimCommand contained "\<co\%[py]\>" nextgroup=vimBang
syn match vimCommand_ contained "co\%[py]\>" nextgroup=vimBang
syn match vimCommand contained "\<j\%[oin]\>" nextgroup=vimBang
syn match vimCommand_ contained "j\%[oin]\>" nextgroup=vimBang
syn match vimCommand contained "\<sp\%[lit]\>" nextgroup=vimBang
syn match vimCommand_ contained "sp\%[lit]\>" nextgroup=vimBang
syn match vimCommand contained "\<sw\%[apname]\>" nextgroup=vimBang
" commands starting with uppercase letter
syn keyword vimCommand contained N[ext] nextgroup=vimBang
syn match vimCommand_ contained "N\%[ext]\>" nextgroup=vimBang
syn keyword vimCommand contained P[rint]
syn match vimCommand_ contained "P\%[rint]\>"
syn keyword vimCommand contained X
" GEN_SYN_VIM: vimCommand modifier, START_STR='syn keyword vimCommandModifier contained', END_STR='skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func'
syn keyword vimCommandModifier contained abo[veleft] bel[owright] bo[tright] hid[e] hor[izontal] kee[pmarks] keepj[umps] keepp[atterns] keepa[lt] lefta[bove] leg[acy] loc[kmarks] noa[utocmd] nos[wapfile] rightb[elow] san[dbox] sil[ent] tab to[pleft] uns[ilent] verb[ose] vert[ical] vim9[cmd] skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifier_ contained "hid\%[e]\>" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifier_ contained "tab\>" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifier_ contained "verb\%[ose]\>" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
" modifiers supporting bang, :filter is handled specially elsewhere
syn keyword vimCommandModifier contained sil[ent] skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifierBang contained "\a\@1<=!" skipwhite skipnl nextgroup=@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
" lower priority :syn-match to allow for :command/function() distinction
syn match vimCommandModifier contained "\<bro\%[wse]\>" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifier contained "\<conf\%[irm]\>" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
syn match vimCommandModifierContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func contains=vimLeadingWhitespace
syn match vimCommandModifierContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimCommandModifierContinue contains=vimLeadingWhitespace
syn cluster vimCommandModifierContinue contains=vimCommandModifierContinue,vimCommandModifierContinueComment
syn 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
" vimOptions are caught only when contained in a vimSet {{{2
" GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey ipc imageprotocol imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines mlst modelinestrict ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pumopt pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sop scrolloffpad sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline stlo statuslineopt su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tsc tagsecure skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors trz termresize tsy termsync twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod
" vimOptions: These are the turn-off setting variants {{{2
" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
syn keyword vimOption contained noari noallowrevins noarab noarabic noarshape noarabicshape noacd noautochdir noac noautocomplete noai noautoindent noar noautoread noasd noautoshelldir noaw noautowrite noawa noautowriteall nobk nobackup nobeval noballooneval nobevalterm noballoonevalterm nobin nobinary nobomb nobri nobreakindent nobl nobuflisted nocdh nocdhome nocin nocindent nocp nocompatible nocf noconfirm noci nocopyindent nocsre nocscoperelative nocst nocscopetag nocsverb nocscopeverbose nocrb nocursorbind nocuc nocursorcolumn nocul nocursorline nodeco nodelcombine nodiff nodg nodigraph noed noedcompatible noemo noemoji noeof noendoffile noeol noendofline noea noequalalways noeb noerrorbells noek noesckeys noet noexpandtab noex noexrc nofic nofileignorecase
syn keyword vimOption contained nofixeol nofixendofline nofen nofoldenable nofs nofsync nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkp nohkmapp nohls nohlsearch noicon noic noignorecase noimc noimcmdline noimd noimdisable nois noincsearch noinf noinfercase noim noinsertmode nojs nojoinspaces nolnr nolangnoremap nolrm nolangremap nolz nolazyredraw nolbr nolinebreak nolisp nolist nolpl noloadplugins nomagic noml nomodeline nomle nomodelineexpr nomlst nomodelinestrict noma nomodifiable nomod nomodified nomore nomousef nomousefocus nomh nomousehide nomousemev nomousemoveevent nonu nonumber noodev noopendevice nopaste nopi nopreserveindent nopvw nopreviewwindow noprompt noro noreadonly nornu norelativenumber noremap nors norestorescreen nori norevins norl norightleft
syn keyword vimOption contained noru noruler noscb noscrollbind noscf noscrollfocus nosecure nossl noshellslash nostmp noshelltemp nosr noshiftround nosn noshortname nosc noshowcmd nosft noshowfulltag nosm noshowmatch nosmd noshowmode noscs nosmartcase nosi nosmartindent nosta nosmarttab nosms nosmoothscroll nospell nosb nosplitbelow nospr nosplitright nosol nostartofline noswf noswapfile notbs notagbsearch notr notagrelative notsc notagsecure notgst notagstack notbidi notermbidi notgc notermguicolors notsy notermsync noterse nota notextauto notx notextmode notop notildeop noto notimeout notitle nottimeout notbi nottybuiltin notf nottyfast noudf noundofile novb novisualbell nowarn nowiv noweirdinvert nowic nowildignorecase nowmnu nowildmenu nowfb nowinfixbuf nowfh nowinfixheight
syn keyword vimOption contained nowfw nowinfixwidth nowrap nows nowrapscan nowrite nowa nowriteany nowb nowritebackup noxtermcodes
" vimOptions: These are the invertible variants {{{2
" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
syn keyword vimOption contained invari invallowrevins invarab invarabic invarshape invarabicshape invacd invautochdir invac invautocomplete invai invautoindent invar invautoread invasd invautoshelldir invaw invautowrite invawa invautowriteall invbk invbackup invbeval invballooneval invbevalterm invballoonevalterm invbin invbinary invbomb invbri invbreakindent invbl invbuflisted invcdh invcdhome invcin invcindent invcp invcompatible invcf invconfirm invci invcopyindent invcsre invcscoperelative invcst invcscopetag invcsverb invcscopeverbose invcrb invcursorbind invcuc invcursorcolumn invcul invcursorline invdeco invdelcombine invdiff invdg invdigraph inved invedcompatible invemo invemoji inveof invendoffile inveol invendofline invea invequalalways inveb inverrorbells
syn keyword vimOption contained invek invesckeys invet invexpandtab invex invexrc invfic invfileignorecase invfixeol invfixendofline invfen invfoldenable invfs invfsync invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkp invhkmapp invhls invhlsearch invicon invic invignorecase invimc invimcmdline invimd invimdisable invis invincsearch invinf invinfercase invim invinsertmode invjs invjoinspaces invlnr invlangnoremap invlrm invlangremap invlz invlazyredraw invlbr invlinebreak invlisp invlist invlpl invloadplugins invmagic invml invmodeline invmle invmodelineexpr invmlst invmodelinestrict invma invmodifiable invmod invmodified invmore invmousef invmousefocus invmh invmousehide invmousemev invmousemoveevent invnu invnumber invodev invopendevice invpaste
syn keyword vimOption contained invpi invpreserveindent invpvw invpreviewwindow invprompt invro invreadonly invrnu invrelativenumber invremap invrs invrestorescreen invri invrevins invrl invrightleft invru invruler invscb invscrollbind invscf invscrollfocus invsecure invssl invshellslash invstmp invshelltemp invsr invshiftround invsn invshortname invsc invshowcmd invsft invshowfulltag invsm invshowmatch invsmd invshowmode invscs invsmartcase invsi invsmartindent invsta invsmarttab invsms invsmoothscroll invspell invsb invsplitbelow invspr invsplitright invsol invstartofline invswf invswapfile invtbs invtagbsearch invtr invtagrelative invtsc invtagsecure invtgst invtagstack invtbidi invtermbidi invtgc invtermguicolors invtsy invtermsync invterse invta invtextauto
syn keyword vimOption contained invtx invtextmode invtop invtildeop invto invtimeout invtitle invttimeout invtbi invttybuiltin invtf invttyfast invudf invundofile invvb invvisualbell invwarn invwiv invweirdinvert invwic invwildignorecase invwmnu invwildmenu invwfb invwinfixbuf invwfh invwinfixheight invwfw invwinfixwidth invwrap invws invwrapscan invwrite invwa invwriteany invwb invwritebackup invxtermcodes
" termcap codes (which can also be set) {{{2
" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
syn keyword vimOption contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo t_BS t_ES skipwhite nextgroup=vimSetEqual,vimSetMod
" term key codes
syn 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
syn match vimOption contained "t_%1"
syn match vimOption contained "t_#2"
syn match vimOption contained "t_#4"
syn match vimOption contained "t_@7"
syn match vimOption contained "t_*7"
syn match vimOption contained "t_&8"
syn match vimOption contained "t_%i"
syn match vimOption contained "t_k;"
" vimOptions: These are the variable names {{{2
" GEN_SYN_VIM: vimOption normal variable, START_STR='syn keyword vimOptionVarName contained', END_STR=''
syn keyword vimOptionVarName contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn
syn keyword vimOptionVarName contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile
syn keyword vimOptionVarName contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight
syn keyword vimOptionVarName contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey ipc imageprotocol imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime
syn keyword vimOptionVarName contained mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines mlst modelinestrict ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont
syn keyword vimOptionVarName contained pheader printheader pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pumopt pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sop scrolloffpad sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype
syn keyword vimOptionVarName contained sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline stlo statuslineopt su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength
syn keyword vimOptionVarName contained tr tagrelative tag tags tsc tagsecure tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors trz termresize tsy termsync twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert
syn keyword vimOptionVarName contained ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes
" GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR=''
syn keyword vimOptionVarName contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo t_BS t_ES
syn keyword vimOptionVarName 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
syn match vimOptionVarName contained "t_%1"
syn match vimOptionVarName contained "t_#2"
syn match vimOptionVarName contained "t_#4"
syn match vimOptionVarName contained "t_@7"
syn match vimOptionVarName contained "t_*7"
syn match vimOptionVarName contained "t_&8"
syn match vimOptionVarName contained "t_%i"
syn match vimOptionVarName contained "t_k;"
" unsupported settings: some were supported by vi but don't do anything in vim {{{2
" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
syn keyword vimErrSetting contained akm altkeymap anti antialias ap autoprint bf beautify biosk bioskey consk conskey fk fkmap fl flash gr graphic ht hardtabs macatsui mesg novice open opt optimize oft osfiletype redraw slow slowopen sourceany w1200 w300 w9600 wst wlsteal
syn keyword vimErrSetting contained noakm noaltkeymap noanti noantialias noap noautoprint nobf nobeautify nobiosk nobioskey noconsk noconskey nofk nofkmap nofl noflash nogr nographic nomacatsui nomesg nonovice noopen noopt nooptimize noredraw noslow noslowopen nosourceany nowst nowlsteal
syn keyword vimErrSetting contained invakm invaltkeymap invanti invantialias invap invautoprint invbf invbeautify invbiosk invbioskey invconsk invconskey invfk invfkmap invfl invflash invgr invgraphic invmacatsui invmesg invnovice invopen invopt invoptimize invredraw invslow invslowopen invsourceany invwst invwlsteal
" AutoCmd Events {{{2
syn case ignore
" GEN_SYN_VIM: vimAutoEvent, START_STR='syn keyword vimAutoEvent contained', END_STR='skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern'
syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdlineLeavePre CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedC CursorMovedI DiffUpdated DirChanged DirChangedPre EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
syn keyword vimAutoEvent contained FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave InsertLeavePre KeyInputPre MenuPopup ModeChanged OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost SessionLoadPre SessionWritePost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabClosedPre TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TermResponseAll TextChanged TextChangedI TextChangedP TextChangedT TextPutPost TextPutPre TextYankPost VimEnter VimLeave VimLeavePre VimResized VimResume VimSuspend WinClosed WinEnter skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
syn keyword vimAutoEvent contained WinLeave WinNew WinNewPre WinResized WinScrolled skipwhite nextgroup=vimAutoEventSep,@vimAutocmdPattern
syn keyword vimAutoEvent contained User skipwhite nextgroup=vimUserAutoEvent
syn match vimUserAutoEvent contained "\<\h\w*\>" skipwhite skipnl nextgroup=vimUserAutoEventSep,vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
" Highlight commonly used Groupnames {{{2
" GEN_SYN_VIM: vimGroup, START_STR='syn keyword vimGroup contained', END_STR=''
syn keyword vimGroup contained Added Bold BoldItalic Boolean Changed Character Comment Conditional Constant Debug Define Delimiter Error Exception Float Function Identifier Ignore Include Italic Keyword Label Macro Number Operator PreCondit PreProc Regexp Removed Repeat Special SpecialChar SpecialComment Statement StorageClass String Structure Tag Todo Type Typedef Underlined
" Default highlighting groups {{{2
" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VertSplitNC VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill TabPanel TabPanelSel TabPanelFill Cursor lCursor TitleBar TitleBarNC QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PmenuBorder PopupSelected Popup PopupBorder PopupTitle MessageWindow PopupNotification PreInsert Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb PmenuShadow Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen
syn keyword vimHLGroup contained StatusLineTerm StatusLineTermNC ToolbarLine ToolbarButton TitleBar TitleBarNC Menu Tooltip Scrollbar CursorIM ComplMatchIns LineNrAbove LineNrBelow MsgArea Terminal User1 User2 User3 User4 User5 User6 User7 User8 User9
syn match vimHLGroup contained "\<Conceal\>"
syn case match
" Function Names {{{2
" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split base64_decode base64_encode bindtextdomain blob2list blob2str browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_listen ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status
syn keyword vimFuncName contained changenr char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect get getbgcolor
syn keyword vimFuncName contained getbufinfo getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getinfo getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto
syn keyword vimFuncName contained histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv id image_add image_discard image_info indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos
syn keyword vimFuncName contained max menu_info min mkdir mode mzeval nextnonblank ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir
syn keyword vimFuncName contained readdirex readfile redraw_listener_add redraw_listener_remove reduce reg_executing reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place
syn keyword vimFuncName contained sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tabpanel_getinfo tabpanel_scroll tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline
syn keyword vimFuncName contained term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list
syn keyword vimFuncName contained type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col visualmode wildmenumode wildtrigger win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor
" Predefined variable names {{{2
" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR=''
syn keyword vimVimVarName contained count count1 prevcount errmsg warningmsg statusmsg shell_error this_session version lnum termresponse fname lang lc_time ctype charconvert_from charconvert_to fname_in fname_out fname_new fname_diff cmdarg foldstart foldend folddashes foldlevel progname servername dying exception throwpoint register cmdbang insertmode val key profiling fcs_reason fcs_choice beval_bufnr beval_winnr beval_winid beval_lnum beval_col beval_text scrollstart swapname swapchoice swapcommand char mouse_win mouse_winid mouse_lnum mouse_col operator searchforward hlsearch oldfiles windowid progpath completed_item option_new option_old option_oldlocal option_oldglobal option_command option_type errors false true none null numbermax numbermin numbersize
syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod termda1 termosc vim_did_init clipproviders imagebackend
"--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim ---
" Special Vim Highlighting (not automatic) {{{1
" Neovim keyword list additions {{{2
if s:has("nvim")
syn keyword vimOptionVarName contained channel inccommand mousescroll pumblend redrawdebug scrollback shada shadafile statuscolumn termpastefilter termsync winbar winblend winhighlight
syn keyword vimFuncName contained api_info buffer_exists buffer_name buffer_number chanclose chansend ctxget ctxpop ctxpush ctxset ctxsize dictwatcheradd dictwatcherdel file_readable highlight_exists highlightID jobclose jobpid jobresize jobsend jobstart jobstop jobwait last_buffer_nr menu_get msgpackdump msgpackparse reg_recorded rpcnotify rpcrequest rpcstart rpcstop serverstart serverstop sockconnect stdioopen stdpath termopen test_write_list_log wait
syn match vimFuncName contained "\<nvim_\w\+\>"
syn keyword vimVimVarName contained lua msgpack_types relnum stderr termrequest virtnum
endif
" Set up commands for this syntax highlighting file {{{2
com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained"
com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : ""
com! -nargs=* VimExtend execute <q-args> s:cmdline_window ? "" : "extend"
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]'
if g:vimsyn_folding =~# 'a'
com! -nargs=* VimFolda <args> fold
else
com! -nargs=* VimFolda <args>
endif
if g:vimsyn_folding =~# 'c'
com! -nargs=* VimFoldc <args> fold
else
com! -nargs=* VimFoldc <args>
endif
if g:vimsyn_folding =~# 'e'
com! -nargs=* VimFolde <args> fold
else
com! -nargs=* VimFolde <args>
endif
if g:vimsyn_folding =~# 'f'
com! -nargs=* VimFoldf <args> fold
else
com! -nargs=* VimFoldf <args>
endif
if g:vimsyn_folding =~# 'h'
com! -nargs=* VimFoldh <args> fold
else
com! -nargs=* VimFoldh <args>
endif
if g:vimsyn_folding =~# 'H'
com! -nargs=* VimFoldH <args> fold
else
com! -nargs=* VimFoldH <args>
endif
if g:vimsyn_folding =~# 'i'
com! -nargs=* VimFoldi <args> fold
else
com! -nargs=* VimFoldi <args>
endif
if g:vimsyn_folding =~# 'l'
com! -nargs=* VimFoldl <args> fold
else
com! -nargs=* VimFoldl <args>
endif
if g:vimsyn_folding =~# 'm'
com! -nargs=* VimFoldm <args> fold
else
com! -nargs=* VimFoldm <args>
endif
if g:vimsyn_folding =~# 'p'
com! -nargs=* VimFoldp <args> fold
else
com! -nargs=* VimFoldp <args>
endif
if g:vimsyn_folding =~# 'P'
com! -nargs=* VimFoldP <args> fold
else
com! -nargs=* VimFoldP <args>
endif
if g:vimsyn_folding =~# 'r'
com! -nargs=* VimFoldr <args> fold
else
com! -nargs=* VimFoldr <args>
endif
if g:vimsyn_folding =~# 't'
com! -nargs=* VimFoldt <args> fold
else
com! -nargs=* VimFoldt <args>
endif
else
com! -nargs=* VimFolda <args>
com! -nargs=* VimFoldc <args>
com! -nargs=* VimFolde <args>
com! -nargs=* VimFoldf <args>
com! -nargs=* VimFoldi <args>
com! -nargs=* VimFoldh <args>
com! -nargs=* VimFoldH <args>
com! -nargs=* VimFoldl <args>
com! -nargs=* VimFoldm <args>
com! -nargs=* VimFoldp <args>
com! -nargs=* VimFoldP <args>
com! -nargs=* VimFoldr <args>
com! -nargs=* VimFoldt <args>
endif
" Deprecated variable options {{{2
if exists("g:vim_minlines")
let g:vimsyn_minlines= g:vim_minlines
endif
if exists("g:vim_maxlines")
let g:vimsyn_maxlines= g:vim_maxlines
endif
if exists("g:vimsyntax_noerror")
let g:vimsyn_noerror= g:vimsyntax_noerror
endif
" Nulls {{{2
" =====
Vim9 syn keyword vim9Null null null_blob null_channel null_class null_dict null_function null_job null_list null_object null_partial null_string null_tuple
" Booleans {{{2
" ========
Vim9 syn keyword vim9Boolean true false
" Numbers {{{2
" =======
syn case ignore
syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets
syn match vimNumber "\<\d\+\%('\d\+\)*\.\d\+\%(e[+-]\=\d\+\)\=" skipwhite nextgroup=@vimComment
syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets
syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets
syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscriptBrackets
syn match vimNumber '\<0z\>' skipwhite nextgroup=@vimComment
syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscriptBrackets
syn case match
" Variables {{{2
" =========
syn region vimSubscriptBrackets contained
\ matchgroup=vimSubscriptBracket
\ start="\["
\ end="]"
\ nextgroup=vimSubscriptBrackets,vimSubscriptDot
\ contains=@vimExprList
syn match vimSubscriptDot contained "\." nextgroup=vimVar,vimVarKey,vimUserFunc,vimUserFuncKey
syn match vimVar contained "\<\h\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vim9Super,vim9This
" dict-key only
syn match vimVarKey contained "\<\d\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot
syn match vimVar "\<[bwglstav]:\h\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope
" autoload prefix
syn match vimVar
\ "\<\%(g:\)\=\h\w*\%(#\w\+\)\+\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope
syn match vimVar "\<a:\%(000\|1\=[0-9]\|20\)\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope
syn match vimFBVar contained "\<[bwglsta]:\h\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope
" autoload prefix
syn match vimFBVar contained
\ "\<\%(g:\)\=\h\w*\%(#\w\+\)\+\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVarScope
" match the scope prefix independently of the retrofitted scope dictionary
syn match vimVarScope contained "\<[bwglstav]:"
syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscriptBrackets,vimSubscriptDot
syn match vimVarNameError contained "\<\h\w*\>" nextgroup=vimSubscriptBrackets,vimSubscriptDot " TODO: just abort highlighting rather than match nextgroup?
syn match vimVimVar "\<v:" nextgroup=vimSubscriptBrackets,vimSubscriptDot,vimVimVarName,vimVarNameError
syn match vimOptionVar "&\%([lg]:\)\=" nextgroup=vimSubscriptBrackets,vimSubscriptDot,vimOptionVarName,vimVarNameError
syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
Vim9 syn match vimVar contained "\<\h\w*\ze<" nextgroup=vim9TypeArgs
syn cluster vimExprList contains=@vimSpecialVar,@vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
syn cluster vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null
" Commands {{{2
syn cluster vimCmdList contains=@vim9CmdList,@vimExUserCmdList,vimAbb,vimAt,vimAugroup,vimAutocmd,vimBehave,vimBreakadd,vimBreakdel,vimBreaklist,vimBuffer,vimCall,vimCatch,vimCd,vimCommand,vimCommandModifier,vimConst,vimCopy,vimDebug,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelete,vimDelfunction,vimDoCommand,vimDoautocmd,vimTextInputFold,@vimEcho,vimElse,vimElseif,vimEnddef,vimEndfunction,vimEndif,vimEquals,vimEval,vimExFilter,vimExecute,vimExtCmd,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGlobal,vimGrep,vimGrepadd,vimHelp,vimHelpgrep,vimHighlight,vimHistory,vimIf,vimImport,vimLanguage,vimLet,vimLoadkeymap,vimLockvar,vimLua,vimMake,vimMap,vimMark,vimMatch,vimMenu,vimMenutranslate,vimMzScheme,vimNormal,vimPackadd,vimPerl,vimPound,vimProfdel,vimProfile,vimPrompt,vimPython,vimPython3,vimPythonX,vimRedir,vimReturn,vimRuby,vimRuntime,vimSet,vimShiftLeft,vimShiftRight,vimSleep,vimSort,vimSubst,vimSynColor,vimSynLink,vimSyntax,vimSyntime,vimTcl,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimUsrCmd,vimVimgrep,vimVimgrepadd,vimWhile,vimWincmd,vimWrite
syn cluster vim9CmdList contains=vim9Abstract,vim9ClassBody,vim9Const,vim9EnumBody,vim9Export,vim9Final,vim9For,vim9InterfaceBody,vim9Type,vim9Var,vim9Wincmd
syn match vimCmdStart contained ":\+" skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList,vimComment
syn match vimCount contained "\d\+"
syn match vimBang contained "!"
syn match vimPrintFlag contained "[lp#]" skipwhite nextgroup=vimPrintFlag,vimComment,vimCmdSep
syn match vimWhitespace contained "\s\+"
syn match vimLeadingWhitespace contained "^\s\+"
" :range {{{3
syn match vimRange contained "[*%]" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
syn region vimAddressPattern contained
\ matchgroup=Delimiter
\ start="/"
\ skip=+\\/\|\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ end="/"
\ skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
\ contains=vimAddressSlashEscape,@vimContinue,@vimSubstList
syn match vimAddressSlashEscape contained "\\/"
syn region vimAddressPattern contained
\ matchgroup=Delimiter
\ start="?"
\ skip=+\\?\|\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ end="?"
\ skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
\ contains=vimAddressQuestionEscape,@vimContinue,@vimSubstList
syn match vimAddressQuestionEscape contained "\\?"
syn match vimAddressOffset contained "[+-]\%(\d\+\)\=\|\d\+" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,@vimCommand_
syn match vimAddress contained "\%#=1\d\+" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,@vimCommand_
syn match vimAddress contained "\%#=1[.$]" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
syn match vimAddress contained "\%#=1'[[\]<>'`"^.(){}]" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
syn match vimAddress contained "\%#=1'[a-zA-Z0-9]" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,@vimCommand_
" NOTE: needs leading ':' to distinguish \/ from line continuation in Vim script
syn match vimAddress contained "\%#=1\\[/?&]" skipwhite nextgroup=vimAddressOffset,vimAddressSeparator,vimCmdStart,@vimCmdList,vimCommand
syn match vimAddressSeparator contained "\%#=1[,;]" skipwhite nextgroup=vimAddress,vimAddressPattern,vimAddressOffset,vimCmdStart,@vimCmdList,vimCommand,vimAddressSeparator
syn cluster vimRange contains=vimRange,vimAddress,vimAddressPattern,vimAddressOffset,vimAddressSeparator
" :@ {{{3
" ==
" syn match vimAtArg contained +[0-9a-z".=*+:@]+ skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
" syn match vimAt contained "@" nextgroup=vimAtArg,vimComment,vim9Comment,vimCmdSep
" NOTE: :* as an alias for :@ is not supported, this is considered a :range,
" see :help cpo-star
syn match vimAtArg contained +@\@1<=[0-9a-z".=*+:@]+
syn match vimAt contained +@[0-9a-z".=*+:@]\ze\s*\%($\|[|"#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment contains=vimAtArg
" Vim9: avoid LHS assignment mismatching of :@["#]
syn match vimAt contained +@\ze\s*\%($\||\|\s["#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
" :number, :# {{{3
" ===========
" TODO: needs to be limited to after a ':' in Vim9, otherwise a comment
if s:vim9script
syn match vimPound contained ":\@1<=#" skipwhite nextgroup=vimPoundCount,vimPrintFlag
else
syn match vimPound contained "#" skipwhite nextgroup=vimPoundCount,vimPrintFlag
endif
syn keyword vimPound contained nu[mber] skipwhite nextgroup=vimPoundCount,vimPrintFlag
syn match vimPound_ contained "nu\%[mber]\>" skipwhite nextgroup=vimPoundCount,vimPrintFlag
syn match vimPoundCount contained "\d\+" skipwhite nextgroup=vimPrintFlag
" := {{{3
" ==
syn match vimEquals contained "=" skipwhite nextgroup=vimPrintFlag
" :>, :< {{{3
" ======
syn match vimShiftLeft contained "<\%(line\)\@!" skipwhite nextgroup=vimShiftLeftPlus,vimShiftLeftCount,vimPrintFlag
syn match vimShiftLeftPlus contained "<" skipwhite nextgroup=vimShiftLeftPlus,vimShiftLeftCount,vimPrintFlag
syn match vimShiftLeftCount contained "\d\+" skipwhite nextgroup=vimPrintFlag
syn match vimShiftRight contained ">" skipwhite nextgroup=vimShiftRightPlus,vimShiftRightCount,vimPrintFlag
syn match vimShiftRightPlus contained ">" skipwhite nextgroup=vimShiftRightPlus,vimShiftRightCount,vimPrintFlag
syn match vimShiftRightCount contained "\d\+" skipwhite nextgroup=vimPrintFlag
" :abbreviate {{{3
" ===========
" GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb contained', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
syn keyword vimAbb contained ab[breviate] ca[bbrev] cnorea[bbrev] cuna[bbrev] ia[bbrev] inorea[bbrev] iuna[bbrev] norea[bbrev] una[bbreviate] skipwhite nextgroup=vimMapMod,vimMapLhs
" GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb contained', END_STR='skipwhite nextgroup=vimMapMod'
syn keyword vimAbb contained abc[lear] cabc[lear] iabc[lear] skipwhite nextgroup=vimMapMod
" :append, :change, :insert {{{3
" =========================
syn match vimCommand contained "\<a\%[ppend]\>" skipwhite skipnl skipempty nextgroup=vimTextInputBang,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimCommand_ contained "a\%[ppend]\>" skipwhite skipnl skipempty nextgroup=vimTextInputBang,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimCommand contained "\<c\%[hange]\>" skipwhite skipnl skipempty nextgroup=vimChangeBang,vimChangeCount,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimCommand_ contained "c\%[hange]\>" skipwhite skipnl skipempty nextgroup=vimChangeBang,vimChangeCount,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimCommand contained "\<i\%[nsert]\>" skipwhite skipnl skipempty nextgroup=vimTextInputBang,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimCommand_ contained "i\%[nsert]\>" skipwhite skipnl skipempty nextgroup=vimTextInputBang,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimChangeCount contained "\d\+" skipwhite skipnl skipempty nextgroup=@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimChangeBang contained
\ "\a\@1<=!"
\ skipwhite skipnl skipempty nextgroup=vimChangeCount,@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimTextInputBang contained "\a\@1<=!" skipwhite skipnl skipempty nextgroup=@vimTextInputText,vimTextInputComment,vimTextInputBar
syn match vimTextInputText contained "|\@1<=.*" skipnl skipempty nextgroup=@vimTextInputText
VimExtend syn region vimTextInputText contained
\ start="^."
\ matchgroup=vimCommand
\ end="^\.$"
" NOTE: 'autoindent' end marker not supported
syn match vimTextInputEnd contained "^\.$"
syn cluster vimTextInputText contains=vimTextInputText,vimTextInputEnd
syn match vimTextInputComment contained
\ /".*/
\ skipnl skipempty nextgroup=@vimTextInputText
syn match vimTextInputBar contained
\ "\s*\zs|"
\ nextgroup=@vimTextInputText
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'T'
" excludes "extend" option, handled by wrapper
syn region vimTextInputText contained
\ start="^."
\ matchgroup=vimCommand
\ end="^\.$"
VimExtend syn region vimTextInputFold contained
\ start="\<a\%[ppend]\>"
\ start="\<c\%[hange]\>"
\ start="\<i\%[nsert]\>"
\ end="^\.$"
\ contains=vimCommand
\ fold keepend transparent
syn region vimTextInputFold_ contained
\ start="a\%[ppend]\>"
\ start="c\%[hange]\>"
\ start="i\%[nsert]\>"
\ end="^\.$"
\ contains=vimCommand_
\ fold keepend transparent
endif
" :argdo, :bufdo, :tabdo, :windo, :cdo, :cfdo, :ldo, :lfdo, :folddoopen, :folddoclosed {{{3
" =====================================================================================
syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList
syn keyword vimDoCommand contained argdo skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "argdo\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained bufdo skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "bufdo\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained tabd[o] skipwhite nextgroup=@vimCmdList
syn match vimDoCommand_ contained "tabdo\=\>" skipwhite nextgroup=@vimCmdList
syn keyword vimDoCommand contained windo skipwhite nextgroup=@vimCmdList
syn match vimDoCommand_ contained "windo\>" skipwhite nextgroup=@vimCmdList
syn keyword vimDoCommand contained cdo skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "cdo\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "cfdo\=\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained ldo skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "ldo\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn match vimDoCommand_ contained "lfdo\=\>" skipwhite nextgroup=vimDoCommandBang,@vimCmdList
syn keyword vimDoCommand contained foldd[oopen] skipwhite nextgroup=@vimCmdList
syn match vimDoCommand_ contained "foldd\%[oopen]\>" skipwhite nextgroup=@vimCmdList
syn keyword vimDoCommand contained folddoc[losed] skipwhite nextgroup=@vimCmdList
syn match vimDoCommand_ contained "folddoc\%[losed]\>" skipwhite nextgroup=@vimCmdList
" :augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{3
" ======== : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
syn cluster vimAugroupList contains=@vimFunc,vimLineStart,vimContinue,vimCmdSep,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimNotation,vimCtrlChar
" define
VimFolda syn region vimAugroup contained
\ start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S"
\ matchgroup=vimAugroupKey
\ end="\<aug\%[roup]\ze\s\+[eE][nN][dD]\s*\%($\|[|"#]\)"
\ skipwhite nextgroup=vimAugroupEnd
\ contains=vimAutocmd,@vimAugroupList,vimAugroupKey
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
syn match vimAugroupError "\<aug\%[roup]\s\+[eE][nN][dD]\ze\s*\%($\|[|"#]\)"
endif
" TODO: Vim9 comment
syn match vimAugroupName contained "\%(\\["|[:space:]]\|[^"|[:space:]]\)\+"
\ skipwhite nextgroup=vimCmdSep,vimComment
syn match vimAugroupEnd contained "\c\<END\>" skipwhite nextgroup=vimCmdSep,vimComment
syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAugroupName
syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAugroupName,vimAugroupEnd
" remove
syn match vimAugroup contained "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang
" list
VimL syn match vimAugroup contained "\<aug\%[roup]\>\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey
Vim9 syn match vimAugroup contained "\<aug\%[roup]\>\ze\s*\%([#|]\|$\)" skipwhite nextgroup=vimCmdSep,vim9Comment contains=vimAugroupKey
" :autocmd, :doautocmd, :doautoall {{{3
" ================================
" TODO: explicitly match the {cmd} arg rather than bailing out to TOP
syn region vimAutocmdBlock contained
\ matchgroup=vimSep
\ start="{\ze\s*\%($\|[#|]\)"
\ end="^\s*\zs}"
\ end="\%(\\\@<!|\s*\)\=\zs}"
\ contains=@vimDefBodyList
syn match vimAutocmdGroup contained "\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" skipwhite nextgroup=vimAutoEvent,vimAutoEventGlob
syn match vimAutocmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
" TODO: cleaner handling of | in pattern position
" : match pattern items in addition to wildcards
syn region vimAutocmdPattern contained
\ start="|\@!\S"
\ skip="\\\\\|\\[,[:space:]]"
\ end="\ze[,[:space:]]"
\ end="$"
\ skipwhite skipnl nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
\ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape
syn match vimAutocmdBufferPattern contained "<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite skipnl nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
syn match vimAutocmdPatternSep contained "," skipwhite skipnl nextgroup=@vimAutocmdPattern,@vimAutocmdContinue
" trailing pattern separator comma allowed
syn match vimAutocmdPatternSep contained ",\ze\s\+" skipwhite skipnl nextgroup=vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
syn match vimAutocmdPatternEscape contained "\\."
syn cluster vimAutocmdPattern contains=vimAutocmdPattern,vimAutocmdBufferPattern
" TODO: Vim9 requires '++' prefix
syn match vimAutocmdMod contained "\%(++\)\=\<nested\>" skipwhite skipnl nextgroup=vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
syn match vimAutocmdMod contained "++once\>" skipwhite skipnl nextgroup=vimAutocmdMod,vimAutocmdBlock,@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc
" higher priority than vimAutocmdGroup, assume no group is so named
syn match vimAutoEventGlob contained "*" skipwhite nextgroup=@vimAutocmdPattern
syn match vimAutoEventSep contained "\a\@1<=," nextgroup=vimAutoEvent
syn match vimUserAutoEventSep contained "\a\@1<=," nextgroup=vimUserAutoEvent
syn keyword vimAutocmd contained au[tocmd] skipwhite nextgroup=vimAutocmdBang,vimAutocmdGroup,vimAutoEvent,vimAutoEventGlob
syn match vimAutocmdContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimAutocmdContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func,@vimFunc contains=vimLeadingWhitespace
syn match vimAutocmdContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimAutocmdContinue contains=vimLeadingWhitespace
syn cluster vimAutocmdContinue contains=vimAutocmdContinue,vimAutocmdContinueComment
syn match vimDoautocmdMod contained "<nomodeline>" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent
syn keyword vimDoautocmd contained do[autocmd] skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
syn keyword vimDoautocmd contained doautoa[ll] skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent
" :behave {{{3
" =======
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
syn match vimBehaveError contained "[^ ]\+"
endif
syn keyword vimBehave contained be[have] nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite
syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite
syn keyword vimBehaveModel contained mswin xterm
" :breakadd, :breakdel, :breaklist {{{3
" ================================
syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction
syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename
syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList
syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr
syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn match vimBreakpointFilename contained "\<\%(\*\|\f\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction
syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename
syn keyword vimBreakadd contained breaka[dd] skipwhite nextgroup=@vimBreakpointArg
syn keyword vimBreakdel contained breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob
syn keyword vimBreaklist contained breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
" :buffer {{{3
" =======
" lower priority than [wtb]: Vim9 scoped variables at SOL
syn match vimBuffer contained "\<b\%[uffer]\>" nextgroup=vimBang
syn match vimBuffer_ contained "b\%[uffer]\>" nextgroup=vimBang
" :call {{{3
" =====
syn keyword vimCall contained cal[l] skipwhite nextgroup=vimVar,@vimFunc
syn match vimCall_ contained "call\=\>" skipwhite nextgroup=vimVar,@vimFunc
" :cd {{{3
" ===
" GEN_SYN_VIM: vimCommand cd, START_STR='syn keyword vimCd contained', END_STR='skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep'
syn keyword vimCd contained cd lc[d] lch[dir] tc[d] tch[dir] skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep
syn match vimCd contained "\<chd\%[ir]\>" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep
syn region vimCdArg contained
\ start=+["#|]\@!\S+
\ end="\ze\s*$"
\ end=+\ze\s*\\\@1<!["#|]+
\ skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
\ contains=vimSpecFile,@vimWildcard
\ oneline
syn match vimCdBang contained "\a\@1<=!" skipwhite nextgroup=vimCdArg,vimComment,vim9Comment,vimCmdSep
" :command {{{3
" ========
syn cluster vimUserCmdList contains=@vimCmdList,vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,@vim9Lhs,vimCmdSep
syn match vimUserCmd contained "\<com\%[mand]\>!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
syn match vimUserCmd contained +\<com\%[mand]\>!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
syn region vimUserCmdAttrs contained
\ start="-\l"
\ start=+^\s*\%(\\\|["#]\\ \)+
\ end="\ze\s\u"
\ skipwhite nextgroup=vimUserCmdName
\ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError
\ transparent
syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError
syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttrNargs contained "[01*?+]"
syn match vimUserCmdAttrRange contained "%"
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
syn match vimUserCmdError contained "\S\+\>"
endif
syn case ignore
syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR=''
syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype filetypecmd function help highlight history keymap locale mapclear mapping menu messages option packadd retab runtime scriptnames shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages option packadd runtime scriptnames shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError
syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFunctionSID
" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win
syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win
syn match vimUserCmdAttrAddr contained "?"
syn case match
syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement
syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement
syn region vimUserCmdReplacement contained
\ start="\S"
\ start=+^\s*\%(\\\|["#]\\ \)+
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue,@vimUserCmdList,vimComFilter
\ keepend
syn region vimUserCmdBlock contained
\ matchgroup=vimSep
\ start="{\ze\s*\%($\|[#|]\)"
\ end="^\s*\zs}"
\ end="\%(\\\@<!|\s*\)\=\zs}"
\ contains=@vimDefBodyList,@vimUserCmdList
syn keyword vimDelcommand contained delc[ommand] skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName
syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName
syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>"
" :copy (special handling for :t only) {{{3
" =====
" lower priority than [wtb]: Vim9 scoped variables at SOL
syn match vimCopy contained "\<t\>" nextgroup=vimBang
syn match vimCopy_ contained "t\>" nextgroup=vimBang
" :debug {{{3
" ======
syn keyword vimDebug contained deb[ug] skipwhite nextgroup=@vimCmdList
" :debuggreedy {{{3
" ============
syn keyword vimDebuggreedy contained debugg[reedy]
syn match vimDebuggreedy_ contained "debugg\%[reedy]\>"
" :defer {{{3
" ======
syn keyword vimDefer contained defe[r] skipwhite nextgroup=@vimFunc,vim9LambdaParams
" :delete {{{3
" =======
" TODO: handle Vim9
syn keyword vimDelete contained d[elete] skipwhite nextgroup=vimDeleteRegister,vimDeleteCount,vimPrintFlag
syn match vimDelete_ contained "d\%[elete]\>" skipwhite nextgroup=vimDeleteRegister,vimDeleteCount,vimPrintFlag
syn match vimDelete contained "\<d\%[elete]\ze\%([lp]\+\>\|#\)" nextgroup=vimPrintFlag
syn match vimDelete_ contained "d\%[elete]\ze\%([lp]\+\>\|#\)" nextgroup=vimPrintFlag
" :del is :delete only, not :delete | :list
syn match vimDelete contained "\<del\>"
syn match vimDelete_ contained "del\>"
syn match vimDelete contained "\<d\%[elete]\ze\%(_\|\d\+\>\)" nextgroup=vimDeleteRegister,vimDeleteCount
syn match vimDelete_ contained "d\%[elete]\ze\%(_\|\d\+\>\)" nextgroup=vimDeleteRegister,vimDeleteCount
syn match vimDeleteRegister contained +[-*+_]\|\\"+ skipwhite nextgroup=vimDeleteCount,vimPrintFlag
syn match vimDeleteRegister contained +\<\a+ skipwhite nextgroup=vimDeleteCount,vimPrintFlag
syn match vimDeleteCount contained "\d\+" skipwhite nextgroup=vimPrintFlag
" :echo, :execute {{{3
" ===============
" NOTE: No trailing legacy script comments
syn region vimEcho contained
\ matchgroup=vimCommand
\ start="\<ec\%[ho]\>"
\ start="\<echoe\%[rr]\>"
\ start="\<echom\%[sg]\>"
\ start="\<echoc\%[onsole]\>"
\ start="\<echon\>"
"\ TODO: default to \<echowindow\>
\ start="\<echow\%[indow]\>"
\ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ excludenl end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,@vimExprList,vim9Comment
\ transparent
syn match vimEchohl contained "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone
syn case ignore
syn keyword vimEchohlNone contained none
syn case match
syn cluster vimEcho contains=vimEcho,vimEchohl
syn region vimExecute contained
\ matchgroup=vimCommand
\ start="\<exe\%[cute]\>"
\ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ excludenl end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,@vimExprList,vim9Comment
\ transparent
syn region vimEval contained
\ matchgroup=vimCommand
\ start="\<ev\%[al]\>"
\ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ excludenl end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,@vimExprList,vim9Comment,vimComment
\ transparent
" :filter {{{3
" =======
syn keyword vimExFilter contained filt[er] skipwhite nextgroup=vimExFilterBang,vimExFilterPattern
syn region vimExFilterPattern contained
\ start="[[:ident:]]"
\ end="\ze[[:space:]\n]"
\ skipwhite skipnl nextgroup=@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
\ contains=@vimSubstList
\ oneline
syn region vimExFilterPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:ident:]|"]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite skipnl nextgroup=@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func
\ contains=@vimSubstList
\ oneline
syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern
" :catch, :throw {{{3
" ==============
syn keyword vimThrow contained th[row] skipwhite nextgroup=@vimExprList
syn keyword vimCatch contained cat[ch] skipwhite nextgroup=vimCatchPattern
syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline
" :export {{{3
" =======
if s:vim9script
syn keyword vim9Export export contained
\ skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vimDef,vimDefFold,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var
endif
" :filetype {{{3
" =========
syn match vimFiletype contained "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
syn match vimFTError contained "\I\i*"
endif
syn keyword vimFTCmd contained filet[ype]
syn keyword vimFTOption contained detect indent off on plugin
" :for {{{3
" ====
" handles Vim9 and legacy for now
syn region vimFor contained
\ matchgroup=vimCommand
\ start="\<for\>" end="\<in\>"
\ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList
\ contains=@vimContinue,vimVar,vimVarList,vim9Variable,vim9VariableList
\ transparent
syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vim9ForInComment,@vimExprList
syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList contains=vimLeadingWhitespace
syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList contains=vimLeadingWhitespace
syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment
" :global, :vglobal {{{3
" =================
" TODO: [:.-] should only be removed for Vim9
" : docs state ! is not allowed as a pattern delimiter but it works
syn region vimGlobalPattern contained
\ matchgroup=Delimiter
\ start=+\z([^[:space:][:alnum:]\\"|:.-]\)+
\ skip="\\."
\ end="\z1"
\ excludenl
\ end="$"
\ skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList
\ contains=@vimSubstList
syn match vimGlobal contained "g\%[lobal]\>!\=[:.-]\@!" skipwhite nextgroup=vimGlobalPattern contains=vimBang
syn match vimGlobal contained "v\%[global]\>!\=[:.-]\@!" skipwhite nextgroup=vimGlobalPattern contains=vimBang
" :grep, :make {{{3
" ============
" | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments
syn keyword vimGrep contained gr[ep] lgr[ep] skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn match vimGrep_ contained "l\=gr\%[ep]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn keyword vimGrepadd contained grepa[dd] lgrepa[dd] skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn match vimGrepadd_ contained "l\=grepa\%[dd]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn region vimGrepArgs contained
\ start="|\@!\S"
\ skip=+\n\s*\%(\\\|[#"]\\ \)+
\ end="\ze|"
\ end="$"
"\ TODO: include vimSpecFile
\ nextgroup=vimCmdSep
\ contains=vimGrepBarEscape
syn match vimGrepBarEscape contained "\\|"
syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep
syn keyword vimMake contained mak[e] lmak[e] skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep
syn region vimMakeArgs contained
\ start="|\@!\S"
\ skip=+\n\s*\%(\\\|[#"]\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
"\ TODO: include vimSpecFile
\ contains=vimMakeBarEscape
syn match vimMakeBarEscape contained "\\|"
syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep
" :help, :helpgrep, :lhelpgrep {{{3
" ============================
syn keyword vimHelp contained h[elp] skipwhite nextgroup=vimHelpBang,vimHelpArg,vimHelpEndCommand
" TODO: match wildcards, ignoring exceptions?
syn region vimHelpArg contained
\ start="\S"
\ matchgroup=Special
\ end="\%(@\a\a\)\=\ze\s*\%($\|\%x0d\|\%x00\||[^|]\)"
\ skipwhite nextgroup=vimHelpEndCommand
\ oneline
syn match vimHelpBang contained "\a\@1<=!" skipwhite nextgroup=vimHelpArg,vimHelpEndCommand
syn match vimHelpEndCommand contained "\ze|[^|]" skipwhite nextgroup=vimCmdSep
syn match vimHelpEndCommand contained "\%x0d\|\%x00" skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList,vimFunc,vim9Block,@vim9Lhs
syn keyword vimHelpgrep contained helpg[rep] lh[elpgrep] skipwhite nextgroup=vimHelpgrepPattern
syn region vimHelpgrepPattern contained
\ start="\S"
\ matchgroup=Special
\ end="@\a\a\>"
\ end="$"
\ contains=@vimSubstList
\ oneline
" :highlight {{{3
" ==========
syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
syn match vimHiCtermError contained "\D\i*"
endif
syn keyword vimHighlight contained hi[ghlight] skipwhite nextgroup=vimHiBang,@vimHighlightCluster
syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster
syn case ignore
" Conceal is a generated low-priority match
syn match vimHiGroup contained "\%(\<Conceal\>\)\@!\i\+"
syn keyword vimHiNone contained NONE
syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble
syn keyword vimFgBgAttrib contained none bg background fg foreground
syn case match
syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList
syn case ignore
syn 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
syn match vimHiCtermColor contained "\<color\d\{1,3}\>"
syn case match
syn match vimHiFontname contained "[a-zA-Z\-*]\+"
syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
syn match vimHiGuiRgb contained "#\x\{6}"
" :highlight {group} {key}={arg} ... {{{3
syn cluster vimHiCluster contains=vimGroup,vimHLGroup,vimHiGroup,vimHiNone,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9Comment
syn region vimHiKeyList contained
\ start="\i\+"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ excludenl
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,@vimHiCluster
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
syn match vimHiKeyError contained "\i\+="he=e-1
endif
syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
syn match vimHiTermcap contained "\S\+" contains=vimNotation
syn match vimHiNmbr contained '\d\+'
" :highlight clear {{{3
syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHLGroup,vimHiGroup
" :highlight link {{{3
" see tst24 (hi def vs hi) (Jul 06, 2018)
"syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
" TODO: simplify and allow line continuations --djk
syn region vimHiLink contained
\ matchgroup=Type
\ start="\%(\<hi\%[ghlight]!\=\s\+\)\@<=\%(\%(def\%[ault]\s\+\)\=link\>\|\<def\%[ault]\>\)"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ excludenl
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,@vimHiCluster
" :history {{{3
" ========
" TODO: handle Vim9 "history" variable assignment (like `:wincmd =`, but a common variable name)
syn keyword vimHistory contained his[tory] skipwhite nextgroup=vimHistoryName,vimHistoryRange,vimCmdSep,vimComment,vim9Comment
syn keyword vimHistoryName contained c[md] s[earch] e[xpr] i[nput] d[ebug] a[ll] skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment
syn match vimHistoryName contained "[:/?=@>]" skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment
syn match vimHistoryRange contained "-\=\<\d\+\>\%(\s*,\)\=" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
syn match vimHistoryRange contained ",\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
syn match vimHistoryRange contained "-\=\<\d\+\s*,\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
" :if, :else, :elseif, :endif {{{3
" ===========================
syn keyword vimIf contained if skipwhite nextgroup=@vimExprList,vimNotation
syn keyword vimElseif contained elsei[f] skipwhite nextgroup=@vimExprList,vimNotation
syn keyword vimElse contained el[se] skipwhite nextgroup=vimComment,vim9Comment
syn keyword vimEndif contained en[dif] skipwhite nextgroup=vimComment,vim9Comment
" :import {{{3
" =======
syn keyword vimImportAutoload contained autoload skipwhite nextgroup=vimImportFilename
if s:vim9script
syn region vimImportFilename contained
\ start="\S"
\ skip=+\%#=1
"\ continuation operators at SOL
\\n\%(\s*#.*\n\)*\s*\%([[:punct:]]\+\&[^#"'(]\)
\\|
"\ continuation operators at EOL
\\%(\%([[:punct:]]\+\&[^#"')]\)\s*\%(#.*\)\=\)\@<=$
\\|
\\n\%(\s*#.*\n\)*\s*as\s
\\|
\\%(^\s*#.*\)\@<=$
\\|
\\n\s*\%(\\\|#\\ \)
\+
\ matchgroup=vimCommand
\ end="\s\+\zsas\ze\s\+\h"
\ matchgroup=NONE
\ end="$"
\ skipwhite nextgroup=vimImportName
\ contains=@vim9Continue,@vimExprList,vim9Comment
\ transparent
else
syn region vimImportFilename contained
\ start="\S"
\ skip=+\n\s*\%(\\\|"\\ \)+
\ matchgroup=vimCommand
\ end="\s\+\zsas\ze\s\+\h"
\ matchgroup=NONE
\ end="$"
\ skipwhite nextgroup=vimImportName
\ contains=@vimContinue,@vimExprList
\ transparent
endif
syn match vimImportName contained "\%(\<as\s\+\)\@<=\h\w*\>" skipwhite nextgroup=@vimComment
syn keyword vimImport contained imp[ort] skipwhite nextgroup=vimImportAutoload,vimImportFilename
" :language {{{3
" =========
syn keyword vimLanguage contained lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimCmdSep,vimComment,vim9Comment
syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName
" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX"
syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimCmdSep,vimComment,vim9Comment
syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimCmdSep,vimComment,vim9Comment
syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved
" :loadkeymap {{{3
" ===========
syn match vimKeymapStart contained "^" skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment
syn match vimKeymapLhs contained "\S\+" skipwhite nextgroup=vimKeymapRhs contains=vimNotation
syn match vimKeymapRhs contained "\S\+" skipwhite nextgroup=vimKeymapTailComment contains=vimNotation
syn match vimKeymapTailComment contained "\S.*"
if s:vim9script
syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
else
syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle
endif
syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment
syn keyword vimLoadkeymap contained loadk[eymap] skipwhite skipnl nextgroup=vimKeymapMappings
syn region vimKeymapMappings contained
\ start="^"
\ end="\%$"
\ contains=vimKeymapStart
\ transparent
" :lockvar, :unlockvar {{{3
" ====================
syn keyword vimLockvar contained lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
syn keyword vimUnlockvar contained unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars
syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars
syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars
syn region vimLockvarVars contained
\ start="\h" skip=+\n\s*\%(\\\|"\\ \)\|^\s*"\\ + end="$" end="\ze[|"]"
\ nextgroup=vimCmdSep,vimComment
\ contains=@vimContinue,vimVar
" :map {{{3
" ====
" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap contained', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
syn keyword vimMap contained cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] om[ap] ono[remap] smap snor[emap] tma[p] tno[remap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapMod,vimMapLhs
syn match vimMap contained "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
syn keyword vimMap contained no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
" GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap contained', END_STR='skipwhite nextgroup=vimMapMod'
syn keyword vimMap contained cmapc[lear] imapc[lear] lmapc[lear] nmapc[lear] omapc[lear] smapc[lear] tmapc[lear] vmapc[lear] xmapc[lear] skipwhite nextgroup=vimMapMod
syn keyword vimMap contained mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod
" GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap contained', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
syn keyword vimUnmap contained cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapMod,vimMapLhs
syn keyword vimUnmap contained unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite nextgroup=vimMapRhs
syn match vimMapLhs contained +\%(.\|\S\)\+\ze\s*\n\s*\%(\\\|["#]\\ \)+ contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite skipnl nextgroup=vimMapRhsContinue
syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs
syn match vimMapMod contained
\ "\%#=1<\%(buffer\|expr\|nowait\|script\|silent\|special\|unique\)>" skipwhite nextgroup=vimMapMod,vimMapLhs contains=vimMapModKey,vimMapModErr
syn region vimMapRhs contained
\ start="\S"
\ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader
syn region vimMapRhsContinue contained
\ start=+^\s*\%(\\\|["#]\\ \)+
\ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader
syn match vimMapLeader contained "\%#=1\c<\%(local\)\=leader>" contains=vimMapLeaderKey
syn keyword vimMapModKey contained buffer expr nowait script silent special unique
syn case ignore
syn keyword vimMapLeaderKey contained leader localleader
syn case match
" :mark {{{3
" =====
VimL syn match vimMark contained "\<k\%([a-zA-Z0-9]\>\|[[\]<>'`]\)\@=" nextgroup=@vimMarkArg
VimL syn match vimMark_ contained "k\%([a-zA-Z0-9]\>\|[[\]<>'`]\)\@=" nextgroup=@vimMarkArg
VimL syn keyword vimMark contained k skipwhite nextgroup=@vimMarkArg
VimL syn match vimMark_ contained "k\>" skipwhite nextgroup=@vimMarkArg
syn keyword vimMark contained ma[rk] skipwhite nextgroup=@vimMarkArg
syn match vimMark_ contained "ma\%[rk]\>" skipwhite nextgroup=@vimMarkArg
syn match vimMarkArg contained "[a-zA-Z]\>\|[[\]<>'`]" skipwhite nextgroup=vimCmdSep,vimComment
syn match vimMarkArgError contained "["^.(){}0-9]"
syn cluster vimMarkArg contains=vimMarkArg,vimMarkArgError
" :match {{{3
" ======
syn keyword vimMatch contained mat[ch] skipwhite nextgroup=vimMatchGroup,vimMatchNone
syn match vimMatch_ contained "mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone
" conflicts with :match
" syn keyword vimMatch contained mat[ch] skipwhite nextgroup=vimMatchGroup,vimMatchNone
syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern
syn case ignore
syn keyword vimMatchNone contained none
syn case match
syn region vimMatchPattern contained
\ matchgroup=Delimiter
\ start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ contains=@vimSubstList
\ oneline
" :menu {{{3
" =====
" NOTE: tail comments disallowed
" GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu contained', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus'
syn keyword vimMenu contained am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] sme[nu] snoreme[nu] sunme[nu] tlm[enu] tln[oremenu] tlu[nmenu] tm[enu] tu[nmenu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] xme[nu] xnoreme[nu] xunme[nu] skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "a\%(m\%[enu]\|n\%[oremenu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "c\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "i\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "me\%[nu]\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "n\%(me\%[nu]\|noreme\%[nu]\|oreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "o\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "s\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "t\%(lm\%[enu]\|ln\%[oremenu]\|m\%[enu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "v\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn match vimMenu_ contained "x\%(me\%[nu]\|noreme\%[nu]\)\>" skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus
syn keyword vimMenu contained popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName
syn region vimMenuRhs contained
\ start="|\@!\S"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="$"
\ end="\ze|"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimNotation
syn region vimMenuRhsContinue contained
\ start=+^\s*\%(\\\|"\\ \)+
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="$"
\ end="\ze|"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimNotation
syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs
syn match vimMenuName +\.\@!\%(\\\s\|\S\)\+\ze\s*\n\s*\%(\\\|["#]\\ \)+ contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue
syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained
syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName
syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr
syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite
syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod
syn region vimMenutranslate contained
\ matchgroup=vimCommand
\ start="\<menut\%[ranslate]\>"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="$"
\ end="\ze|"
\ matchgroup=vimMenuClear
\ end="\<clear\ze\s*\%(["#|]\|$\)"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimMenutranslateName
\ keepend
\ transparent
" oneline is sufficient to match the current formatting in runtime/lang/*.vim
syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation
syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate
" :normal {{{3
" =======
" syn match vimNormal contained "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
syn match vimNormal contained "norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
syn region vimNormalArg contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue
" :packadd {{{3
" ========
syn keyword vimPackadd contained pa[ckadd] skipwhite nextgroup=vimPackaddBang,vimPackaddArg,vimComment,vim9Comment,vimCmdSep
syn region vimPackaddArg contained
\ start=+["#|]\@!\S+
\ end="\ze\s*$"
\ end=+\ze\s*\\\@1<!["#|]+
\ skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
\ contains=vimSpecFile,@vimWildcard
\ oneline
syn match vimPackaddBang contained "\a\@1<=!" skipwhite nextgroup=vimPackaddArg
" :profile {{{3
" ========
syn match vimProfileBang contained "\a\@1<=!" skipwhite nextgroup=vimProfileArg
syn keyword vimProfileArg contained start skipwhite nextgroup=vimProfilePattern
syn keyword vimProfileArg contained func skipwhite nextgroup=vimProfilePattern
syn keyword vimProfileArg contained file skipwhite nextgroup=vimProfilePattern
syn keyword vimProfileArg contained stop pause skipwhite nextgroup=vimCmdSep,@vimComment
syn keyword vimProfileArg contained continue dump skipwhite nextgroup=vimCmdSep,@vimComment
" TODO: match file pattern
syn region vimProfilePattern contained
\ start="\S"
\ skip=+\\[|"#]+
\ end="$" end=+\ze\s*[|"#]+
\ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
syn keyword vimProfile contained prof[ile] skipwhite nextgroup=vimProfileBang,vimProfileArg
syn keyword vimProfdelArg contained func skipwhite nextgroup=vimProfilePattern
syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern
syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment
syn keyword vimProfdel contained profd[el] skipwhite nextgroup=vimProfdelArg
" :promptfind, :promptrepl {{{3
" ========================
syn region vimPromptArg contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue
syn keyword vimPrompt contained promptf[ind] promptr[epl] skipwhite nextgroup=vimPromptArg
" :redir {{{3
" ======
syn keyword vimRedir contained redi[r] skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd
syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator
syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile
syn region vimRedirFile contained
\ start="\S"
\ matchgroup=Normal
\ end="\s*$"
\ end="\s*\ze[|"]"
\ nextgroup=vimCmdSep,vimComment
\ contains=vimSpecFile
syn match vimRedirRegisterOperator contained ">>\="
syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator
syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar
syn keyword vimRedirEnd contained END
" :return {{{3
" =======
syn keyword vimReturn contained ret[urn] skipwhite nextgroup=@vimExprList,vimNotation
" :runtime {{{3
" ========
syn keyword vimRuntime contained ru[ntime] skipwhite nextgroup=vimRuntimeBang,vimRuntimeWhere,vimRuntimeArgs
syn keyword vimRuntimeWhere contained
\ START OPT PACK ALL
\ skipwhite nextgroup=vimRuntimeArgs
syn region vimRuntimeArgs contained
\ start=+["#|]\@!\S+
\ skip=+\s*\n\s*\%(\\\|["#]\\ \)\|^\s*["#]\\ +
\ end="\ze\s*$"
\ end=+\ze\s*\\\@1<!["#|]+
\ skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
\ contains=@vimContinue,vimSpecFile,@vimWildcard
syn match vimRuntimeBang contained "\a\@1<=!" skipwhite nextgroup=vimRuntimeWhere,vimRuntimeArgs
" :set {{{3
" ====
syn keyword vimSet contained setl[ocal] setg[lobal] se[t] skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs
syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend
syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,@vimFunc
syn match vimSetEscape contained "\\\%(\\[|"]\|.\)"
syn match vimSetBarEscape contained "\\|"
syn match vimSetQuoteEscape contained +\\"+
syn region vimSetArgs contained
\ start="\l\|<"
\ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ +
\ end=+\ze\\\@1<![|"]+
"\ assume this isn't an escaped char with backslash on the previous line
\ end=+^\s*\\\ze[|"]+
\ end="\ze\s#"
\ end="$"
\ nextgroup=vimSetCmdSep,vimSetComment,vim9Comment
\ contains=@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
\ keepend
" TODO: restrict this to valid values?
syn match vimOption contained "<[^>]\+>" contains=vimOption
syn region vimSetEqual contained
\ matchgroup=vimOper
\ start="[=:]\|[-+^]="
\ skip=+\\\s\|^\s*\%(\\\|["#]\\ \)+
\ end="\ze\s"
\ contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep,vimSetEscape,vimSetBarEscape,vimSetQuoteEscape
syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
syn keyword vimSetAll contained all nextgroup=vimSetMod
syn keyword vimSetTermcap contained termcap
syn match vimSetSep contained "[,:]"
syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
" :sleep {{{3
" ======
syn keyword vimSleep contained sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
syn match vimSleep_ contained "sl\%[eep]\>" skipwhite nextgroup=vimSleepBang,vimSleepArg
syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
" :sort {{{3
" =====
syn keyword vimSort contained sor[t] skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep
syn match vimSort_ contained "sort\=\>" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep
syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep
syn match vimSortOptionsError contained "\a\+"
syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep
syn region vimSortPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:alpha:]|]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=@vimSortOptions,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError
" :substitute {{{3
" ===========
syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
syn cluster vimSubstList add=vimCollection
syn match vimSubst contained "\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount
syn match vimSubst contained "\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
syn match vimSubst contained "\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount
syn match vimSubst_ contained "\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount
syn match vimSubst_ contained "\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat
syn match vimSubst_ contained "\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount
syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags
" & and # after :s are always pattern delimiters not flags
syn match vimSubstFlags contained "[&cegiIlnpr#]\+" skipwhite nextgroup=vimSubstCount
syn match vimSubstCount contained "\d\+\>"
" TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required
" : # is allowed but "not recommended" (see :h pattern-delimiter)
syn region vimSubstPat contained
\ matchgroup=vimSubstDelim
\ start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"rs=s+1
\ skip="\\\\\|\\\z1"
\ end="\z1"re=e-1,me=e-1
\ excludenl
\ end="$"
\ nextgroup=vimSubstRep4
\ contains=@vimSubstList
syn region vimSubstRep4 contained
\ matchgroup=vimSubstDelim
\ start="\z(.\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ matchgroup=vimNotation
\ end="<[cC][rR]>"
\ excludenl
\ end="$"
\ contains=@vimSubstRepList
\ nextgroup=vimSubstFlagErr
syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass
syn match vimCollClassErr contained "\[:.\{-\}:\]"
syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]"
syn match vimSubstSubstr contained "\\z\=\d"
syn match vimSubstTwoBS contained "\\\\"
" TODO: flags, unlike count, must follow immediately
syn match vimSubst contained "&&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount
syn match vimSubst contained "\~&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount
" two and three letter variants (matched as :s + flags, count may follow immediately)
syn match vimSubst contained "\<sc[egiIlnp]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst contained "\<sg[ceiIlnpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst contained "\<si[ceInpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst contained "\<sI[ceginplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst contained "\<sr[cgiInplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst_ contained "sc[egiIlnp]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst_ contained "sg[ceiIlnpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst_ contained "si[ceInpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst_ contained "sI[ceginplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
syn match vimSubst_ contained "sr[cgiInplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags
" Vi compatibility
syn match vimSubstDelim contained "\\"
syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4
" :syntax {{{3
" =======
syn region vimGroupList contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
"\ need to consume the whitespace
\ end="\s"he=e-1
\ end="$"
\ contains=@vimGroupListContinue,vimGroupSpecial,vimGroupListContinueComma
syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP
syn match vimGroupListComma contained ","
syn match vimGroupListContinueComma contained "\s\+,\s*\|,\s\+" contains=vimGroupListComma
syn match vimGroupListContinueComma contained "\s*,\s*\%(\n\s*\%(\\\s\+\|["#]\\ .*\)\)\+" contains=@vimGroupListContinue,vimGroupListComma
syn match vimGroupListEquals contained "=" skipwhite skipnl nextgroup=vimGroupListContinueStart,vimGroupList
" the first continuation line does not terminate the list at whitepace after \
syn match vimGroupListContinueStart contained "^\%(\s*["#]\\ .*\n\)*\s*\\\s\+" skipwhite nextgroup=vimGroupList contains=@vimGroupListContinue transparent
syn match vimGroupListContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimGroupListContinue,vimGroupListContinueComma contains=vimWhitespace
syn match vimGroupListContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimGroupListContinue contains=vimWhitespace
syn cluster vimGroupListContinue contains=vimGroupListContinue,vimGroupListContinueComment
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
syn match vimSynError contained "\i\+"
endif
syn match vimSynContains contained "\<contains\>" skipwhite nextgroup=vimGroupListEquals
syn match vimSynContainedin contained "\<containedin\>" skipwhite nextgroup=vimGroupListEquals
syn match vimSynNextgroup contained "\<nextgroup\>" skipwhite nextgroup=vimGroupListEquals
if has("conceal")
" no whitespace allowed after '='
syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue
syn match vimSynCcharValue contained "\S"
endif
syn keyword vimSyntax contained sy[ntax] skipwhite nextgroup=vimSynType,@vimComment
syn cluster vimFunctionBodyList add=vimSyntax
" :syntax case {{{3
syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
syn match vimSynCaseError contained "\i\+"
endif
syn keyword vimSynCase contained ignore match
" :syntax clear {{{3
syn keyword vimSynType contained clear
" :syntax cluster {{{3
syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
syn region vimClusterName contained
\ keepend
\ matchgroup=vimGroupName
\ start="\h\w*\>"
\ skip=+\\\\\|\\\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
syn match vimGroupAdd contained "\<add\>" skipwhite nextgroup=vimGroupListEquals
syn match vimGroupRem contained "\<remove\>" skipwhite nextgroup=vimGroupListEquals
" :syntax conceal {{{3
syn match vimSynType contained "\<conceal\>" skipwhite nextgroup=vimSynConceal,vimSynConcealError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynconcealerror")
syn match vimSynConcealError contained "\i\+"
endif
syn keyword vimSynConceal contained on off
" :syntax foldlevel {{{3
syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldlevel,vimSynFoldlevelError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldlevelerror")
syn match vimSynFoldlevelError contained "\i\+"
endif
syn keyword vimSynFoldlevel contained start minimum
" :syntax iskeyword {{{3
syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimSynIskeyword
syn keyword vimSynIskeyword contained clear
syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep
syn match vimSynIskeywordSep contained ","
" :syntax include {{{3
syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeCluster
syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"
" :syntax keyword {{{3
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin,vimSynKeyError
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained
\ keepend
\ matchgroup=vimGroupName
\ start="\h\w*\>"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimSynKeyGroup
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
syn match vimSynKeyError contained "\<oneline\>"
" :syntax match {{{3
syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
syn region vimSynMatchRegion contained
\ keepend
\ matchgroup=vimGroupName
\ start="\h\w*\>"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimSynMtchGroup
syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
" :syntax {{{3
syn keyword vimSynType contained enable list manual off on reset
" :syntax region {{{3
syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
syn region vimSynRegion contained
\ keepend
\ matchgroup=vimGroupName
\ start="\h\w*"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=@vimSynRegGroup
syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat
syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup
VimExtend syn region vimSynRegPat contained
\ matchgroup=Delimiter
\ start="\z([-`~!@#$%^&*_=+;:'",./?]\)"
\ skip=/\\\\\|\\\z1\|\n\s*\%(\\\|"\\ \)/
\ end="\z1"
\ skipwhite nextgroup=vimSynPatMod,vimSynReg
\ contains=@vimSynRegPatGroup
syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\="
syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\=," nextgroup=vimSynPatMod
syn match vimSynPatMod contained "lc=\d\+"
syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod
syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]"
syn match vimSynNotPatRange contained "\\\\\|\\\["
syn match vimMtchComment contained '"[^"]\+$'
" :syntax spell {{{3
syn keyword vimSynType contained spell skipwhite nextgroup=vimSynSpell,vimSynSpellError
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynspellerror")
syn match vimSynSpellError contained "\i\+"
endif
syn keyword vimSynSpell contained default notoplevel toplevel
" :syntax sync {{{3
syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncClear,vimSyncMatch,vimSyncError,vimSyncRegion,vimSyncArgs
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
syn match vimSyncError contained "\i\+"
endif
syn region vimSyncArgs contained
\ start="\S"
\ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+
\ end="\ze|"
\ end="$"
\ nextgroup=vimCmdSep
\ contains=vimSyncLines,vimSyncLinebreak,vimSyncLinecont,vimSyncFromstart,vimSyncCcomment
syn keyword vimSyncCcomment contained ccomment skipwhite nextgroup=vimGroupName
syn keyword vimSyncClear contained clear skipwhite nextgroup=vimSyncGroupName
syn keyword vimSyncFromstart contained fromstart
syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynRegion
syn match vimSyncLinebreak contained "\<linebreaks=" nextgroup=vimNumber
syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
syn match vimSyncLines contained "\<lines=" nextgroup=vimNumber
syn match vimSyncLines contained "\<minlines=" nextgroup=vimNumber
syn match vimSyncLines contained "\<maxlines=" nextgroup=vimNumber
syn match vimSyncGroupName contained "\<\h\w*\>" skipwhite nextgroup=vimSyncKey,vimSynRegPat
syn match vimSyncKey contained "\<grouphere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncKey contained "\<groupthere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncGroup contained "\<\h\w*\>" skipwhite nextgroup=vimSynRegPat,vimSyncNone
syn keyword vimSyncNone contained NONE
" :syntime {{{3
" ========
syn keyword vimSyntimeArg contained on off clear report skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep
syn keyword vimSyntime contained synti[me] skipwhite nextgroup=vimSyntimeArg
" :terminal {{{3
" =========
syn match vimTerminal contained "\<ter\%[minal]\>" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand
syn match vimTerminal contained +\<ter\%[minal]\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimTerminalOptions,vimTerminalCommand,@vimTerminalContinue
syn match vimTerminal_ contained "ter\%[minal]\>" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand
syn match vimTerminal_ contained +ter\%[minal]\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimTerminalOptions,vimTerminalCommand,@vimTerminalContinue
syn match vimTerminalContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimLeadingWhitespace
syn match vimTerminalContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimLeadingWhitespace
syn cluster vimTerminalContinue contains=vimTerminalContinue,vimTerminalContinueComment
syn region vimTerminalCommand contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue
syn region vimTerminalOptions contained
\ start="++"
\ skip=/\s\+++\|\%(\n\|^\)\s*\%(\\\|["#]\\ \)/
\ end="\s"
\ end="$"
\ skipwhite nextgroup=vimTerminalCommand
\ contains=@vimContinue,vimTerminalOption
\ transparent
syn match vimTerminalOption contained "++\%(\%(no\)\=close\|open\|curwin\|hidden\|norestore\|shell\)\>"
syn match vimTerminalOption contained "++kill=" nextgroup=vimTerminalKillOptionArg
syn match vimTerminalOption contained "++\%(rows\|cols\)=" nextgroup=vimTerminalSizeOptionArg
syn match vimTerminalOption contained "++eof=" nextgroup=vimTerminalEofOptionArg
syn match vimTerminalOption contained "++type=" nextgroup=vimTerminalTypeOptionArg
syn match vimTerminalOption contained "++api=" nextgroup=vimTerminalApiOptionArg
syn match vimTerminalApiOptionArg contained "\<\S\+\>"
syn match vimTerminalEofOptionArg contained "\<\S\+\>"
syn match vimTerminalSizeOptionArg contained "\<\d\+\>"
syn keyword vimTerminalKillOptionArg contained term hup quit int kill
syn match vimTerminalKillOptionArg contained "\<\d\+\>"
syn keyword vimTerminalTypeOptionArg contained conpty winpty
" :uniq {{{3
" =====
syn keyword vimUniq contained uni[q] skipwhite nextgroup=vimUniqBang,@vimUniqOptions,vimUniqPattern,vimCmdSep
syn match vimUniq_ contained "\<uniq\=\>" skipwhite nextgroup=vimUniqBang,@vimUniqOptions,vimUniqPattern,vimCmdSep
syn match vimUniqBang contained "\a\@1<=!" skipwhite nextgroup=@vimUniqOptions,vimUniqPattern,vimCmdSep
syn match vimUniqOptionsError contained "\a\+"
syn match vimUniqOptions contained "\<[ilur]*\>" skipwhite nextgroup=vimUniqPattern,vimCmdSep
syn region vimUniqPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:alpha:]|]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=@vimUniqOptions,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn cluster vimUniqOptions contains=vimUniqOptions,vimUniqOptionsError
" :vimgrep, lvimgrep, :vimgrepadd, :lvimgrepadd {{{3
" =============================================
syn keyword vimVimgrep contained vim[grep] lv[imgrep] skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn keyword vimVimgrepadd contained vimgrepa[dd] lvimgrepa[dd] skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn match vimVimgrep_ contained "l\=vim\%[grep]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn match vimVimgrepadd_ contained "l\=vimgrepa\%[dd]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern
syn region vimVimgrepPattern contained
\ start="[[:ident:]]"
\ end="\ze[[:space:]\n]"
\ skipwhite nextgroup=vimVimgrepFile,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn region vimVimgrepPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:ident:]|"]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn match vimVimgrepEscape contained "\\\%(\\|\|.\)"
syn match vimVimgrepBarEscape contained "\\|"
syn region vimVimgrepFile contained
\ start="|\@!\S"
\ end="\ze|"
\ end="\ze\s"
\ end="$"
\ skipwhite nextgroup=vimVimgrepFile
\ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape
syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepFile
" :while {{{3
" ======
syn keyword vimWhile contained wh[ile] skipwhite nextgroup=@vimExprList,vimNotation
" :wincmd {{{3
" =======
syn keyword vimWincmd contained winc[md] skipwhite nextgroup=vimWincmdArg
syn match vimWincmd_ contained "winc\%[md]\>" skipwhite nextgroup=vimWincmdArg
" TODO: consider extracting this list from the help file
syn match vimWincmdArg contained
\ "\<[sSvnqojkhlwWtbpPrRxKJHLTfFz]\>\|[\^:=\-+_<>|\]}]\|\<g\s\+[\]}]\|\<g[fFtT]\>"
\ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
" only handles oneline assignments
" NOTE: handled with higher priority later in file
" Vim9 syn match vim9Wincmd "\s\=\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg
" :write {{{3
" ======
" lower priority than [wtb]: Vim9 scoped variables at SOL
syn match vimWrite contained "\<w\%[rite]\>" nextgroup=vimBang
syn match vimWrite_ contained "w\%[rite]\>" nextgroup=vimBang
" :z {{{3
" ==
syn match vimCommand_ contained "z[-+^.=]\=\>"
syn match vimCommand contained "\<z[-+^.=]\=\>"
" Operators: {{{2
" =========
syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment,vim9LineComment,vimContinueString
syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
" syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString
syn match vimOper "\s\@1<=?\ze\s\|\s\@1<=?$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString
" distinguish ternary : from ex-colon
syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString
syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString
syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile
syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile
syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile
syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile
syn region vimOperParen
\ matchgroup=vimParenSep
\ start="("
\ end=")"
\ nextgroup=vimSubscriptBrackets,vimSubscriptDot
\ contains=@vimOperGroup
syn region vimOperParen
\ matchgroup=vimSep
\ start="#\={"
\ end="}"
\ nextgroup=vimSubscriptBrackets,vimSubscriptDot,vimVar
\ contains=@vimOperGroup,vimDictColon
syn match vimDictColon contained ":" skipwhite nextgroup=@vimExprList
syn region vimOperParen contained
\ matchgroup=vimSep
\ start="\["
\ end="]"
\ contains=@vimOperGroup
\ nextgroup=vimSubscriptBrackets,vimSubscriptDot,vimVar
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
syn match vimOperError ")"
endif
syn match vimOperContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList contains=vimLeadingWhitespace
syn match vimOperContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList contains=vimLeadingWhitespace
syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
" Lambda Expressions: {{{2
" ==================
syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
syn region vimLambda contained
\ matchgroup=vimLambdaBrace
\ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="}" end="$"
\ contains=@vimContinue,@vimExprList,vimLambdaParams
syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFunctionParam
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParen contained "[()]"
syn match vim9LambdaParams contained
\ "(\%(\<func(\|[^(]\)*\%(\n\s*\\\%(\<func(\|[^(]\)*\|\n\s*#\\ .*\)*\ze\s\+=>"
\ skipwhite nextgroup=vim9LambdaOperator
\ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType
syn region vim9LambdaReturnType contained start=")\@1<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent
syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
" Functions: Tag is provided for those who wish to highlight tagged functions {{{2
" =========
syn cluster vimFunctionBodyCommon contains=vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunction,vimNumber,vimOper,vimOperParen,vimSpecFile,vimString,vimFunctionFold,vimDefFold,vimCmdSep
syn cluster vimFunctionBodyList contains=@vimFunctionBodyCommon,vimLineStart,vimComment,vimConst,vimLet
syn cluster vimDefBodyList contains=@vimFunctionBodyCommon,vim9LineStart,vim9Comment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,@vimSpecialVar,@vim9Func,vim9LhsVariable_,vim9Wincmd
syn region vimFunctionPattern contained
\ matchgroup=vimOper
\ start="/"
\ end="$"
\ contains=@vimSubstList
syn match vimFunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
syn match vimDefBang contained "\a\@1<=!" skipwhite nextgroup=vimDefName
syn match vimFunctionSID contained "\c<sid>"
syn match vimFunctionScope contained "\<[bwglstav]:"
syn match vimFunctionName contained
\ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
\ skipwhite nextgroup=vimFunctionParams,vimCmdSep,vimComment,vim9Comment
\ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
syn match vimDefName contained
\ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+"
\ nextgroup=vimDefTypeParams,vimDefParams,vimCmdSep,vimComment,vim9Comment
\ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag
syn match vimFunction contained "\<fu\%[nction]\>" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment
syn match vimDef contained "\<def\>" skipwhite nextgroup=vimDefBang,vimDefName,vimFunctionPattern,vimCmdSep,vimComment
syn region vimFunctionComment contained
\ start=+".*+
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="$"
\ skipwhite skipempty nextgroup=vimFunctionBody,vimEndfunction
syn region vimDefComment contained
\ start="#.*"
\ skip=+\n\s*\%(\\\|#\\ \)+
\ end="$"
\ skipwhite skipempty nextgroup=vimDefBody,vimEnddef
syn region vimFunctionParams contained
\ matchgroup=Delimiter
\ start="("
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end=")"
\ skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
\ contains=vimFunctionParam,vimOperParen,@vimContinue
syn region vimDefParams contained
\ matchgroup=Delimiter
\ start="("
\ end=")"
\ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFunctionParamEquals,vimOperParen
syn region vimDefTypeParams contained
\ matchgroup=Delimiter
\ start="<"
\ end=">"
\ nextgroup=vimDefParams
\ contains=vim9DefTypeParam
syn match vimFunctionParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFunctionParamEquals
syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFunctionParamEquals
syn match vim9DefTypeParam contained "\<\u\w*\>"
syn match vimFunctionParamEquals contained "=" skipwhite nextgroup=@vimExprList
syn match vimFunctionMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError
syn region vimFunctionBody contained
\ start="^."
\ matchgroup=vimCommand
\ end="\<endf\%[unction]\>"
\ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
\ contains=@vimFunctionBodyList
syn region vimDefBody contained
\ start="^."
\ matchgroup=vimCommand
\ end="\<enddef\>"
\ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
\ contains=@vimDefBodyList
syn keyword vimEndfunction contained endf[unction] skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError
syn keyword vimEnddef contained enddef skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
VimExtend syn region vimFunctionFold contained
\ start="\<fu\%[nction]!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*("
\ end="^\s*:\=\s*endf\%[unction]\>"
\ contains=vimFunction
\ fold keepend transparent
VimExtend syn region vimDefFold contained
\ start="\<def!"
"\ assume no dict literal in curly-brace name expressions
\ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+[<(]"
\ end="^\s*:\=\s*enddef\>"
\ contains=vimDef
\ fold keepend transparent
endif
syn match vimDelfunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName
syn keyword vimDelfunction contained delf[unction] skipwhite nextgroup=vimDelfunctionBang,vimFunctionName
" Types: {{{2
" =====
syn region vimReturnType contained
\ start=")\@1<=:\%(\s\|\n\)\@="
\ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ +
\ end="$"
\ matchgroup=vim9Comment
"\ allow for legacy script tail comment error
\ end="\ze[#"]"
\ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError
\ contains=@vim9Continue,@vimType
\ transparent
syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep
syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained blob bool channel float job number string void
syn keyword vimTypeAny contained any
syn match vimTypeObject contained "\<object<\@=" nextgroup=vimTypeObjectArgs
syn region vimTypeObjectArgs contained
\ matchgroup=vimTypeObjectBracket
\ start="<"
\ end=">"
\ contains=vimTypeAny,vimTypeObject,vimUserType
\ oneline
\ transparent
syn match vimType contained "\<\%(func\)\>"
syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vim9Continue,@vimType transparent
syn region vimCompoundType contained matchgroup=vimType start="\<tuple<" end=">" contains=@vim9Continue,@vimType transparent
syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
syn match vimUserType contained "\<\%(\h\w*\.\)*\u\w*\>"
syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType
" Classes, Enums And Interfaces: {{{2
" =============================
if s:vim9script
" Methods {{{3
syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName
syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams,vim9MethodDefTypeParams contains=@vim9MethodName
syn region vim9MethodDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9MethodDefTypeParams contained
\ matchgroup=Delimiter
\ start="<"
\ end=">"
\ nextgroup=vim9MethodDefParams
\ contains=vim9DefTypeParam
syn match vim9ConstructorDefName contained "\<_\=new\w*\>"
\ nextgroup=vim9ConstructorDefParams,vim9ConstuctorDefTypeParams
\ contains=@vim9MethodName
syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>"
\ skipwhite nextgroup=vimParamType,vimFunctionParamEquals
\ contains=vim9This,vimOper
syn region vim9ConstructorDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError
\ contains=vim9ConstructorDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9ConstuctorDefTypeParams contained
\ matchgroup=Delimiter
\ start="<"
\ end=">"
\ nextgroup=vim9ConstructorDefParams
\ contains=vim9DefTypeParam
syn region vim9MethodDefReturnType contained
\ start=")\@1<=:\%(\s\|\n\)\@="
\ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ +
\ end="$"
\ matchgroup=vim9Comment
\ end="\ze#"
\ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError
\ contains=@vim9Continue,vimType,vimTypeSep
\ transparent
syn region vim9MethodDefComment contained
\ start="#.*"
\ skip=+\n\s*\%(\\\|#\\ \)+
\ end="$"
\ skipwhite skipempty nextgroup=vim9MethodDefBody,vimEnddef
syn region vim9MethodDefBody contained
\ start="^.\=" matchgroup=vimCommand end="\<enddef\>"
\ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError
\ contains=@vim9MethodDefBodyList
syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vim9MethodNameError contained "\<[a-z0-9]\i\>"
endif
syn match vim9MethodName contained "\<_\=new\w*\>"
syn keyword vim9MethodName contained empty len string
syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
VimExtend syn region vim9MethodDefFold contained
\ start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\w*[<(]"
\ end="^\s*:\=enddef\>"
\ contains=vim9MethodDef
\ fold keepend transparent
endif
syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold
" Classes {{{3
syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var
syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName
syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements
syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements
syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends
syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Abstract contained abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef
syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass
syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface
syn keyword vim9Public contained public
syn keyword vim9Static contained static
" FIXME: don't match as dictionary keys, remove when operators are not
" shared between Vim9 and legacy script
syn match vim9This contained "\.\@1<!\<this\>:\@!"
" super must be followed by '.'
syn match vim9Super contained "\.\@1<!\<super\.\@="
VimFoldc syn region vim9ClassBody contained
\ start="\<class\>"
\ matchgroup=vimCommand
\ end="\<endclass\>"
\ contains=@vim9ClassBodyList
\ transparent
" Enums {{{3
syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,@vimExprList,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Var
syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName
syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipempty nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements
syn match vim9EnumNameTrailing contained "\S.*"
syn region vim9EnumNameComment contained
\ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$"
\ skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue
\ contains=@vimCommentGroup,vimCommentString
" vim9EnumName's "skipempty" should only apply to comments and enum values and not implements clauses
syn match vim9EnumNameEmpty contained "^" skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue
" allow line continuation between enum name and "implements"
syn match vim9EnumNameContinue contained
\ "^\s*\\"
\ skipwhite skipnl nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements
\ contains=vimLeadingWhitespace
syn match vim9EnumNameContinueComment contained
\ "^\s*#\\ .*"
\ skipwhite skipnl nextgroup=vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue
\ contains=vimLeadingWhitespace
syn cluster vim9EnumNameContinue contains=vim9EnumNameContinue,vim9EnumNameContinueComment
" enforce enum value list location
syn match vim9EnumValue contained "\<\a\w*\>" nextgroup=vim9EnumValueTypeArgs,vim9EnumValueArgList,vim9EnumValueListComma,vim9Comment
syn match vim9EnumValueListComma contained "," skipwhite skipempty nextgroup=vim9EnumValue,vim9EnumValueListCommaComment
syn region vim9EnumValueListCommaComment contained
\ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$"
\ skipwhite skipempty nextgroup=vim9EnumValueListCommaComment,vim9EnumValue
\ contains=@vimCommentGroup,vimCommentString
syn region vim9EnumValueTypeArgs contained
\ matchgroup=Delimiter
\ start="<\ze\a"
\ end=">"
\ nextgroup=vim9EnumValueArgList
\ contains=@vimType
\ oneline
syn region vim9EnumValueArgList contained
\ matchgroup=vimParenSep start="(" end=")"
\ nextgroup=vim9EnumValueListComma
\ contains=@vimExprList,vimContinueString,vim9Comment
syn keyword vim9EnumImplements contained implements skipwhite nextgroup=vim9EnumImplementedInterface
syn match vim9EnumImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9EnumInterfaceListComma,vim9EnumImplementedInterfaceComment,vim9EnumValue
syn match vim9EnumInterfaceListComma contained "," skipwhite nextgroup=vim9EnumImplementedInterface
syn region vim9EnumImplementedInterfaceComment contained
\ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$"
\ skipwhite skipempty nextgroup=vim9EnumImplementedInterfaceComment,vim9EnumValue
\ contains=@vimCommentGroup,vimCommentString
VimFolde syn region vim9EnumBody contained
\ start="\<enum\>"
\ matchgroup=vimCommand
\ end="\<endenum\>"
\ contains=@vim9EnumBodyList
\ transparent
" Interfaces {{{3
" TODO: limit to decl only - no init values
syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var
syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName
syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends
syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName
syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams,vim9AbstractDefTypeParams contains=@vim9MethodName
syn region vim9AbstractDefParams contained
\ matchgroup=Delimiter start="(" end=")"
\ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError
\ contains=vimDefParam,vim9Comment,vimFunctionParamEquals
syn region vim9AbstractDefReturnType contained
\ start=")\@1<=:\s" end="$" matchgroup=vim9Comment end="\ze[#"]"
\ skipwhite skipnl nextgroup=vimDefComment,vimCommentError
\ contains=vimTypeSep
\ transparent
syn region vim9AbstractDefTypeParams contained
\ matchgroup=Delimiter
\ start="<"
\ end=">"
\ nextgroup=vim9AbstractDefParams
\ contains=vim9DefTypeParam
VimFoldi syn region vim9InterfaceBody contained
\ start="\<interface\>"
\ matchgroup=vimCommand
\ end="\<endinterface\>"
\ contains=@vim9InterfaceBodyList
\ transparent
" Type Aliases {{{3
syn keyword vim9Type contained ty[pe] skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError
syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals
syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror")
syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals
endif
endif
" Blocks: {{{2
" ======
syn region vim9Block contained
\ matchgroup=vimSep
\ start="{\ze\s*\%($\|[#|]\)"
\ end="^\s*\zs}"
\ end="\%(\\\@<!|\s*\)\=\zs}"
\ skipwhite nextgroup=vim9Comment,vimCmdSep
\ contains=@vimDefBodyList
" Special Filenames, Modifiers, Extension Removal: {{{2
" ===============================================
syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod
syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod
syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod
syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod
syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod
syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod
syn match vimSpecFileMod "\(:[phtre]\)\+" contained
syn match vimSpecFile contained "%[ \t:]"me=e-1 nextgroup=vimSpecFileMod
syn match vimSpecFile contained excludenl "%$" nextgroup=vimSpecFileMod
syn match vimSpecFile contained "%<"me=e-1 nextgroup=vimSpecFileMod
" Lower Priority Comments: after some vim commands... {{{2
" =======================
if get(g:, "vimsyn_comment_strings", 1)
VimExtend syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
endif
if s:vim9script
syn cluster vimComment contains=vim9Comment
else
syn cluster vimComment contains=vimComment
endif
VimExtend VimL syn region vimComment
\ excludenl
\ start=+"+
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="$"
\ contains=@vimCommentGroup,vimCommentString
VimExtend Vim9 syn region vim9Comment
\ excludenl
\ start="\%#=1\s\@1<=#\%({\@!\|{{\)"
\ skip="\n\s*\%(\\\|#\\ \)"
\ end="$"
\ contains=@vimCommentGroup,vimCommentString
syn match vim9CommentError contained "#.*"
syn match vimCommentError contained +".*+
" Environment Variables: {{{2
" =====================
syn match vimEnvvar "\$\I\i*"
syn match vimEnvvar "\${\I\i*}"
" Strings {{{2
" =======
" In-String Specials:
" Try to catch strings, if nothing else matches (therefore it must precede the others!)
" vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside [])
" syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
syn match vimPatSepErr contained "\\)"
syn match vimPatSep contained "\\|"
syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup
syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline
syn match vimNotPatSep contained "\\\\"
syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
VimExtend syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscriptBrackets contains=@vimStringGroup
VimExtend syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z\\@]'+lc=1 end=+'+ nextgroup=vimSubscriptBrackets contains=vimQuoteEscape
"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim
syn match vimEscape contained "\\."
" syn match vimEscape contained +\\[befnrt\"]+
syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}"
syn match vimEscape contained "\\<" contains=vimNotation
syn match vimEscape contained "\\<\*[^>]*>\=>"
syn match vimQuoteEscape contained "''"
VimExtend syn region vimString oneline matchgroup=vimString start=+$'+ end=+'+ nextgroup=vimSubscriptBrackets contains=@vimStringInterpolation,vimQuoteEscape
VimExtend syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscriptBrackets contains=@vimStringInterpolation,@vimStringGroup
syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList
syn match vimStringInterpolationBrace contained "{{"
syn match vimStringInterpolationBrace contained "}}"
syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace
syn region vimContinueString contained matchgroup=vimContinueString start=+"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment,vimOper contains=@vimContinue,@vimStringGroup
syn region vimContinueString contained matchgroup=vimContinueString start=+'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment,vimOper contains=@vimContinue,vimQuoteEscape
syn region vimContinueString contained matchgroup=vimContinueString start=+$"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment,vimOper contains=@vimContinue,@vimStringInterpolation,@vimStringGroup
syn region vimContinueString contained matchgroup=vimContinueString start=+$'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscriptBrackets,vimComment,vimOper contains=@vimContinue,@vimStringInterpolation,vimQuoteEscape
" Registers, Addresses, Filters: {{{2
syn match vimLetRegister contained '@["@0-9\-a-zA-Z:.%#=*+~_/]'
" TODO: match this as a contained ex command
syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile
" Variable Declarations: {{{2
" =====================
VimL syn keyword vimLet contained let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
VimL syn keyword vimConst contained cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar
syn region vimVarList contained
\ start="\[" end="]"
\ skipwhite nextgroup=vimLetHeredoc
\ contains=@vimContinue,@vimSpecialVar,vimVar
syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscriptBrackets
syn region vimLetVarSubscript contained
\ matchgroup=vimSubscriptBracket
\ start="\S\@1<=\["
\ end="]"
\ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc
\ contains=@vimExprList
syn keyword vimUnlet contained unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars
syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars
syn region vimUnletVars contained
\ start="$\I\|\h" skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*["#]\\ + end="$" end=+\ze\s*[|"#]+
\ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment
\ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar
" TODO: type error after register or environment variables (strings)
VimExtend VimFoldh syn region vimLetHeredoc contained
\ matchgroup=vimLetHeredocStart
\ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)"
\ matchgroup=vimLetHeredocStop
\ end="^\z1\=\z2$"
VimExtend VimFoldh syn region vimLetHeredoc contained
\ matchgroup=vimLetHeredocStart
\ start="=<<\%(\s*\)\@>\z(\L\S*\)"
\ matchgroup=vimLetHeredocStop end="^\z1$"
VimExtend VimFoldh syn region vimLetHeredoc contained
\ matchgroup=vimLetHeredocStart
\ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)"
\ matchgroup=vimLetHeredocStop
\ end="^\z1\=\z2$"
\ contains=@vimStringInterpolation
VimExtend VimFoldh syn region vimLetHeredoc contained
\ matchgroup=vimLetHeredocStart
\ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)"
\ matchgroup=vimLetHeredocStop
\ end="^\z1$"
\ contains=@vimStringInterpolation
Vim9 syn keyword vim9Const contained const skipwhite nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Final contained final skipwhite nextgroup=vim9Variable,vim9VariableList
Vim9 syn keyword vim9Var contained var skipwhite nextgroup=vim9Variable,vim9VariableList
syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper
syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite nextgroup=vimLetHeredoc
syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType
syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc
syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc
syn match vim9VariableTypeObject contained "\<object<\@=" nextgroup=vim9VariableTypeObjectArgs
syn region vim9VariableTypeObjectArgs contained
\ matchgroup=vim9VariableTypeObjectBracket
\ start="<"
\ end=">"
\ contains=vimTypeAny,vimTypeObject,vimUserType
\ oneline
\ transparent
syn match vim9VariableType contained "\<\%(func\)\>" skipwhite nextgroup=vimLetHeredoc
syn region vim9VariableCompoundType contained
\ matchgroup=vim9VariableType
\ start="\<func("
\ end=")"
\ skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc
\ contains=@vim9Continue,@vim9VariableType
\ transparent
syn region vim9VariableCompoundType contained
\ matchgroup=vim9VariableType
\ start="\<tuple<"
\ end=">"
\ skipwhite nextgroup=vimLetHeredoc
\ contains=@vim9Continue,@vim9VariableType
\ transparent
syn region vim9VariableCompoundType contained
\ matchgroup=vim9VariableType
\ start="\<\%(list\|dict\)<"
\ end=">"
\ skipwhite nextgroup=vimLetHeredoc
\ contains=@vim9VariableType
\ oneline
\ transparent
syn match vim9VariableUserType contained "\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc
syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType
" Filename Patterns: {{{2
" =================
syn match vimWildcardQuestion contained "?"
syn match vimWildcardStar contained "*"
syn match vimWildcardBraceComma contained ","
syn region vimWildcardBrace contained
\ matchgroup=vimWildcard
\ start="{"
\ end="}"
\ contains=vimWildcardEscape,vimWildcardBrace,vimWildcardBraceComma,vimWildcardQuestion,vimWildcardStar,vimWildcardBracket
\ oneline
syn match vimWildcardIntervalNumber contained "\d\+"
syn match vimWildcardInterval contained "\\\\\\{\d\+\%(,\d\+\)\=\\}" contains=vimWildcardIntervalNumber
syn match vimWildcardBracket contained "\[\%(\^\=]\=\%(\\.\|\[\([:.=]\)[^:.=]\+\1]\|[^][:space:]]\)*\)\@>]"
\ contains=vimWildcardBracketStart,vimWildcardEscape
syn match vimWildcardBracketCharacter contained "." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
syn match vimWildcardBracketRightBracket contained "]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
syn match vimWildcardBracketHyphen contained "-]\@!" nextgroup=@vimWildcardBracketCharacter
syn match vimWildcardBracketEscape contained "\\." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd
syn match vimWildcardBracketCharacterClass contained "\[:[^:]\+:]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
syn match vimWildcardBracketEquivalenceClass contained "\[=[^=]\+=]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
syn match vimWildcardBracketCollatingSymbol contained "\[\.[^.]\+\.]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd
syn match vimWildcardBracketStart contained "\[" nextgroup=vimWildcardBracketCaret,vimWildcardBracketRightBracket,@vimWildcardBracketCharacter
syn match vimWildcardBracketCaret contained "\^" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketRightBracket
syn match vimWildcardBracketEnd contained "]"
syn cluster vimWildcardBracketCharacter contains=vimWildcardBracketCharacter,vimWildcardBracketEscape,vimWildcardBracketCharacterClass,vimWildcardBracketEquivalenceClass,vimWildcardBracketCollatingSymbol
syn match vimWildcardEscape contained "\\."
syn cluster vimWildcard contains=vimWildcardQuestion,vimWildcardStar,vimWildcardBrace,vimWildcardBracket,vimWildcardInterval
" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2
" ======================
syn case ignore
syn match vimNotation contained "\%#=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
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket
" syn match vimNotation contained '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
syn match vimNotation contained '\%#=1\%(\\\|<lt>\)\=<\%([fq]-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|lt\)>' contains=vimBracket skipwhite nextgroup=vimSubst
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket
syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket
syn match vimBracket contained "[\\<>]"
syn case match
" User Command Highlighting: {{{2
" Note: assumes command runs to EOL, no explicit | support
syn match vimUsrCmd contained '\%#=1\<\u[[:alnum:]]*\%([![:blank:]]\|$\)\@=' skipwhite nextgroup=vimUsrCmdBang,vimUsrCmdArgs
syn match vimUsrCmd_ contained '\%#=1\%(\%(N\%[ext]\|P\%[rint]\|X\)\>\)\@!\u[[:alnum:]]*\%([![:blank:]]\|$\)\@=' skipwhite nextgroup=vimUsrCmdBang,vimUsrCmdArgs
syn match vimUsrCmdBang contained "\w\@1<=!" skipwhite nextgroup=vimUsrCmdArgs
syn region vimUsrCmdArgs contained
\ start="\s\zs\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue
" Vim user commands
" Compiler plugins
syn keyword vimCompilerSet contained CompilerSet skipwhite nextgroup=vimSetArgs
" runtime/makemenu.vim
syn keyword vimSynMenu contained SynMenu skipwhite nextgroup=vimSynMenuPath
syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation
syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName
syn match vimSynMenuName contained "\w\+"
" runtime/syntax/syncolor.vim
syn keyword vimSynColor contained SynColor skipwhite nextgroup=vimSynColorGroup
syn match vimSynColorGroup contained "\<\h\w*\>" skipwhite nextgroup=vimHiKeyList contains=vimGroup
syn keyword vimSynLink contained SynLink skipwhite nextgroup=vimSynLinkGroup
syn match vimSynLinkGroup contained "\<\h\w*\>" skipwhite nextgroup=vimGroup contains=vimGroup
" runtime/syntax/vim.vim
syn keyword vimVim9 contained Vim9 skipwhite nextgroup=@vimExUserCmdList,vimSyntax
syn keyword vimVimL contained VimL skipwhite nextgroup=@vimExUserCmdList,vimSyntax
syn keyword vimVimExtend contained VimExtend skipwhite nextgroup=@vimExUserCmdList,vimSyntax
syn match vimVimFold contained "\<VimFold\a\>" skipwhite nextgroup=@vimExUserCmdList,vimSyntax
syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynColor,vimSynLink,vimSynMenu,vimVimExtend,vimVimFold,vimVim9,vimVimL
" Errors And Warnings: {{{2
" ====================
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
syn match vimFunctionError contained "[[:space:]!]\@1<=\<[a-z0-9]\w\{-}\ze\s*("
syn match vimFunctionError contained "\%(<[sS][iI][dD]>\|[sg]:\)\d\w\{-}\ze\s*("
syn match vimElseIfErr "\<else\s\+if\>"
syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/
endif
" Control Characters: {{{2
" ==================
syn match vimCtrlChar "[- -]"
" Embedded Scripts: {{{2
" ================
" perl,ruby : Benoit Cerrina
" python,tcl : Johannes Zellner
" mzscheme, lua : Charles Campbell
" Allows users to specify the type of embedded script highlighting
" they want: (lua/mzscheme/perl/python/ruby/tcl support)
" g:vimsyn_embed == 0 : don't embed any scripts
" g:vimsyn_embed =~# 'l' : embed Lua
" g:vimsyn_embed =~# 'm' : embed MzScheme
" g:vimsyn_embed =~# 'p' : embed Perl
" g:vimsyn_embed =~# 'P' : embed Python
" g:vimsyn_embed =~# 'r' : embed Ruby
" g:vimsyn_embed =~# 't' : embed Tcl
let s:interfaces = get(g:, "vimsyn_embed", "lP")
" [-- lua --] {{{3
if s:interfaces =~# 'l'
syn include @vimLuaScript syntax/lua.vim
unlet b:current_syntax
endif
syn keyword vimLua contained lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement
syn keyword vimLua contained luado skipwhite nextgroup=vimLuaStatement
syn keyword vimLua contained luafile
syn match vimLua_ contained "lua\>" skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement
syn match vimLua_ contained "luado\>" skipwhite nextgroup=vimLuaStatement
syn match vimLua_ contained "luafile\>"
syn region vimLuaStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimLuaScript,@vimContinue
VimFoldl syn region vimLuaHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimLuaScript
VimFoldl syn region vimLuaHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimLuaScript
VimFoldl syn region vimLuaHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimLuaScript
VimFoldl syn region vimLuaHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimLuaScript
" [-- mzscheme --] {{{3
if s:interfaces =~# 'm'
let s:iskKeep = &l:isk
syn include @vimMzSchemeScript syntax/scheme.vim
unlet b:current_syntax
let &l:isk = s:iskKeep
endif
syn keyword vimMzScheme contained mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement
syn keyword vimMzScheme contained mzf[ile]
syn match vimMzScheme_ contained "mz\%[scheme]\>" skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement
syn match vimMzScheme_ contained "mzf\%[ile]\>"
syn region vimMzSchemeStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimMzSchemeScript,@vimContinue
VimFoldm syn region vimMzSchemeHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimMzSchemeScript
VimFoldm syn region vimMzSchemeHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimMzSchemeScript
VimFoldm syn region vimMzSchemeHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimMzSchemeScript
VimFoldm syn region vimMzSchemeHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimMzSchemeScript
" [-- perl --] {{{3
if s:interfaces =~# 'p'
syn include @vimPerlScript syntax/perl.vim
unlet b:current_syntax
endif
syn keyword vimPerl contained pe[rl] skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement
syn keyword vimPerl contained perld[o] skipwhite nextgroup=vimPerlStatement
syn match vimPerl_ contained "pe\%[rl]\>" skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement
syn match vimPerl_ contained "perld\%[o]\>" skipwhite nextgroup=vimPerlStatement
syn region vimPerlStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimPerlScript,@vimContinue
VimFoldp syn region vimPerlHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+ contains=@vimPerlScript
VimFoldp syn region vimPerlHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimPerlScript
VimFoldp syn region vimPerlHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimPerlScript
VimFoldp syn region vimPerlHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimPerlScript
" [-- python --] {{{3
if s:interfaces =~# 'P'
syn include @vimPythonScript syntax/python2.vim
unlet b:current_syntax
endif
syn keyword vimPython contained py[thon] skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement
syn keyword vimPython contained pydo skipwhite nextgroup=vimPythonStatement
syn keyword vimPython contained pyfile
syn match vimPython__ contained "py\%[thon]\>" skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement
syn match vimPython__ contained "pydo\>" skipwhite nextgroup=vimPythonStatement
syn match vimPython__ contained "pyfile\>"
syn region vimPythonStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimPythonScript,@vimContinue
VimFoldP syn region vimPythonHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimPythonScript
VimFoldP syn region vimPythonHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimPythonScript
VimFoldP syn region vimPythonHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimPythonScript
VimFoldP syn region vimPythonHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimPythonScript
" [-- python3 --] {{{3
if s:interfaces =~# 'P'
syn include @vimPython3Script syntax/python.vim
unlet b:current_syntax
endif
syn keyword vimPython3 contained python3 py3 skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement
syn keyword vimPython3 contained py3do skipwhite nextgroup=vimPython3Statement
syn keyword vimPython3 contained py3file
syn match vimPython3__ contained "python3\>" skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement
syn match vimPython3__ contained "py3\>" skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement
syn match vimPython3__ contained "py3do\>" skipwhite nextgroup=vimPython3Statement
syn match vimPython3__ contained "py3file\>"
syn region vimPython3Statement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimPython3Script,@vimContinue
VimFoldP syn region vimPython3Heredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimPython3Script
VimFoldP syn region vimPython3Heredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimPython3Script
VimFoldP syn region vimPython3Heredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimPython3Script
VimFoldP syn region vimPython3Heredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimPython3Script
" [-- pythonx --] {{{3
if s:interfaces =~# 'P'
if &pyxversion == 2
syn cluster vimPythonXScript contains=@vimPythonScript
else
syn cluster vimPythonXScript contains=@vimPython3Script
endif
endif
syn keyword vimPythonX contained pythonx pyx skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement
syn keyword vimPythonX contained pyxdo skipwhite nextgroup=vimPythonXStatement
syn keyword vimPythonX contained pyxfile
syn match vimPythonX__ contained "pythonx\>" skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement
syn match vimPythonX__ contained "pyx\>" skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement
syn match vimPythonX__ contained "pyxdo\>" skipwhite nextgroup=vimPythonXStatement
syn match vimPythonX__ contained "pyxfile\>"
syn region vimPythonXStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimPythonXScript,@vimContinue
VimFoldP syn region vimPythonXHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimPythonXScript
VimFoldP syn region vimPythonXHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimPythonXScript
VimFoldP syn region vimPythonXHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimPythonXScript
VimFoldP syn region vimPythonXHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimPythonXScript
" [-- ruby --] {{{3
if s:interfaces =~# 'r'
syn include @vimRubyScript syntax/ruby.vim
unlet b:current_syntax
endif
syn keyword vimRuby contained rub[y] skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement
syn keyword vimRuby contained rubyd[o] skipwhite nextgroup=vimRubyStatement
syn keyword vimRuby contained rubyf[ile]
syn match vimRuby_ contained "rub[y]\=\>" skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement
syn match vimRuby_ contained "rubydo\=\>" skipwhite nextgroup=vimRubyStatement
syn match vimRuby_ contained "rubyf\%[ile]\>"
syn region vimRubyStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimRubyScript,@vimContinue
VimFoldr syn region vimRubyHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimRubyScript
VimFoldr syn region vimRubyHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimRubyScript
VimFoldr syn region vimRubyHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimRubyScript
VimFoldr syn region vimRubyHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\.$+
\ contains=@vimRubyScript
" [-- tcl --] {{{3
if s:interfaces =~# 't'
syn include @vimTclScript syntax/tcl.vim
unlet b:current_syntax
endif
syn keyword vimTcl contained tcl skipwhite nextgroup=vimTclHeredoc,vimTclStatement
syn keyword vimTcl contained tcld[o] skipwhite nextgroup=vimTclStatement
syn keyword vimTcl contained tclf[ile]
syn match vimTcl_ contained "tcl\>" skipwhite nextgroup=vimTclHeredoc,vimTclStatement
syn match vimTcl_ contained "tcld\%[o]\>" skipwhite nextgroup=vimTclStatement
syn match vimTcl_ contained "tclf\%[ile]\>"
syn region vimTclStatement contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimTclScript,@vimContinue
VimFoldt syn region vimTclHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\s*\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1$+
\ contains=@vimTclScript
VimFoldt syn region vimTclHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+<<\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\.$+
\ contains=@vimTclScript
VimFoldt syn region vimTclHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\z2$+
\ contains=@vimTclScript
VimFoldt syn region vimTclHeredoc contained
\ matchgroup=vimScriptHeredocStart
\ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+
\ matchgroup=vimScriptHeredocStop
\ end=+^\z1\=\.$+
\ contains=@vimTclScript
unlet s:interfaces
" Beginners - Patterns that involve ^ {{{2
" =========
syn cluster vimCommand_ contains=vimCommand_,vim\u\w\+_
VimExtend Vim9 syn region vim9LineComment contained start=+\%#=1#\%({\@!\|{{\).*$+ skip=+\n\s*\%(\\\|#\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle
VimExtend VimL syn region vimLineComment contained start=+".*$+ skip=+\n\s*\%(\\\|"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
syn match vim9CommentTitle '#\s*\%([sS]:\|\h\w*#\)\=\%([A-DF-Z]\w*\|E\%(\d\{1,4}\>\)\@!\w*\)\(\s\+\u\w*\)*:'hs=s+1 contained contains=vim9CommentTitleLeader,vimTodo,@vimCommentGroup
syn match vimContinue "^\s*\zs\\" contains=vimLeadingWhitespace "skipwhite nextgroup=vimCmdSep
VimExtend syn match vimContinueComment '^\s*\zs["#]\\ .*' contains=vimLeadingWhitespace
VimExtend syn match vim9ContinueComment "^\s*\zs#\\ .*" contains=vimLeadingWhitespace
syn cluster vimContinue contains=vimContinue,vimContinueComment
syn cluster vim9Continue contains=vimContinue,vim9ContinueComment
syn region vimString start='^\s*\\"' end='"' oneline keepend contains=@vimStringGroup,vimContinue
syn region vimString start="^\s*\\'" end="'" oneline keepend contains=vimQuoteEscape,vimContinue
syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained
syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained
" TODO: remove Vim9 prefix command, nextgroup after SOL etc.
" : parameterize patterns with no nextgroup
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgstv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\==\%(\s\|$\)" contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgstv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.=\%(\s\|$\)" contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgstv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgstv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar,vim9Super,vim9This
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgstv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscriptBrackets contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar
" TODO: remove these in favour of funccall handling?
Vim9 syn match vim9LhsVariable contained transparent "\s\=\%([bwgtv]:\|&\%([lg]:\)\=\|\$\)\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimSubscriptDot contains=vimVar,vimVarScope,@vimSpecialVar,vimEnvvar,vim9Super,vim9This
Vim9 syn match vim9LhsVariableList contained "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsVariableList contained "\[\_[^]]\+]\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsVariableList contained "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar
Vim9 syn match vim9LhsRegister contained "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
syn cluster vim9Lhs contains=vim9Lhs.*
" TODO: Useless expressions like "string" at SOL?
" : Continue shouldn't be included here.
VimL syn match vimLineStart "^" skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList,@vimContinue,vimComment,vimLineComment
" FIXME: continued expressions
Vim9 syn match vim9LineStart "^" skipwhite nextgroup=vimCmdStart,@vimCmdList,@vim9Continue,vimCmdSep,vim9Comment,vim9LineComment,vim9Block,vim9Lhs.*,@vim9Func ,vimOperParen,vimOper,vim9Boolean,vim9Null,vimNumber,vimString
syn match vimCmdSep "\\\@1<!|\%(\%(\s*\n\s*["#]\\ .*\)*\s*\n\s*\\\)\=" skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList,@vimFunc,@vim9Func,vim9Block,vim9Lhs.* contains=@vimCmdSepContinue
syn match vimCmdSep contained "|\%(\%(\s*\n\s*["#]\\ .*\)*\s*\n\s*\\\)\=" skipwhite nextgroup=vimCmdStart,@vimRange,@vimCmdList,@vimFunc,@vim9Func,vim9Block,vim9Lhs.* contains=@vimCmdSepContinue
syn match vimCmdSepContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimCmdSepContinue,vimCmdStart,@vimRange,@vimCmdList contains=vimLeadingWhitespace
syn match vimCmdSepContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimCmdSepContinue contains=vimLeadingWhitespace
syn cluster vimCmdSepContinue contains=vimCmdSepContinue,vimCmdSepContinueComment
" TODO: fix priority, not trailing bar
syn match vimOper "||" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
" prevent variable statements at the start of a line matching as a :command
" NOTE: needs to consume leading whitespace, to prevent skip* matching it
" TODO: extend to foo.bar.baz += 99 qualified names? Slower but more generalized
Vim9 syn match vim9LhsVariable_ "^\s*\h\w*\ze[[.]" nextgroup=vimSubscriptBrackets,vimSubscriptDot contains=vimVar,vim9Super,vim9This,vimWhitespace
Vim9 syn match vim9LhsVariable_ "^\s*\h\w*\ze\s\+\%([-+/*%]\==\|\.\.=\)\%(\s\|$\)" contains=vimVar,vim9Super,vim9This,vimWhitespace
Vim9 syn match vim9LhsVariable_ "^\s*\h\w*\ze\s*\->" contains=vimVar,vim9Super,vim9This,vimWhitespace
Vim9 syn match vim9LhsVariable_ "^\s*\h\w*\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,vim9Super,vim9This,vimWhitespace
" rename vim9LhsFunctionCall?
Vim9 syn match vim9UserFunc "^\s*\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This,vimWhitespace
Vim9 syn match vim9UserFunc "^\s*\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen contains=vimVarScope,vimWhitespace
Vim9 syn match vim9Func "^\s*\l\w*\ze(" skipwhite nextgroup=vimOperParen contains=vimFuncName,vimWhitespace
Vim9 syn match vim9Wincmd contained "\s\=\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg contains=vimWhitespace
Vim9 syn match vim9Wincmd "^\s*\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg contains=vimWhitespace
" allowed anywhere in the file
if !s:vim9script
syn match vimShebangError "^\s*\zs#!.*" display
endif
syn match vimShebang "\%^#!.*" display
" Function Call Highlighting: {{{2
" (following Gautam Iyer's suggestion)
" ==========================
syn match vimFunc contained "\<\l\w*\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncName
" dict-key only
syn match vimUserFuncKey contained "\%(\l\|\d\)\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName
syn match vimUserFunc contained "\<[[:upper:]_]\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName,vim9Super,vim9This
syn match vimUserFunc contained "\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen contains=vimVarScope
syn match vimUserFunc contained "\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation
Vim9 syn match vim9UserFunc contained "\s\=\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This,vimWhitespace
Vim9 syn match vim9UserFunc contained "\s\=\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze[(<]" skipwhite nextgroup=vimOperParen contains=vimVarScope,vimWhitespace
Vim9 syn match vim9Func contained "\l\w*\ze(" skipwhite nextgroup=vimOperParen contains=vimFuncName
" higher priority for matches in command position
Vim9 syn match vim9FuncWrap contained "\s\+\l\w*\ze(" contains=vim9Func transparent
syn cluster vimFunc contains=vimFunc,vimUserFunc
syn cluster vim9Func contains=vim9FuncWrap,vim9UserFunc
syn region vim9TypeArgs contained
\ matchgroup=Delimiter
\ start="<\ze\a"
\ end=">"
\ nextgroup=vimOperParen
\ contains=@vimType
\ oneline
" Vim9 script Regions: {{{2
" ==================
if s:vim9script
syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9LineStart,vim9Comment
VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimLineStart,vimComment
syn keyword vim9Vim9ScriptArg noclear contained
syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite
endif
" Command-line Window Lines: {{{2
" =========================
if s:cmdline_window
syn region vimCommandLineWindowLine
\ start="^"
\ end="$"
\ contains=TOP,vimCommandLineWindowLine
\ oneline
\ keepend
endif
" Synchronize (speed) {{{2
"============
exe "syn sync minlines=" .. get(g:, "vimsyn_minlines", 100)
exe "syn sync maxlines=" .. get(g:, "vimsyn_maxlines", 200)
syn sync linecont "^\s\+\\"
syn sync linebreaks=2
syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
" ====================
" Highlighting Settings {{{2
" ====================
if !exists("skip_vim_syntax_inits")
if !exists("g:vimsyn_noerror")
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError
hi def link vim9Func vimError
hi def link vimHiAttribList vimError
hi def link vimHiCtermError vimError
hi def link vimHiKeyError vimError
hi def link vimMapModErr vimError
hi def link vimMarkArgError vimError
hi def link vimShebangError vimError
hi def link vimSortOptionsError Error
hi def link vimSubstFlagErr vimError
hi def link vimSynCaseError vimError
hi def link vimSyncError vimError
hi def link vimSynConcealError vimError
hi def link vimSynError vimError
hi def link vimSynKeyError vimError
hi def link vimSynFoldlevelError vimError
hi def link vimSynIskeywordError vimError
hi def link vimSynSpellError vimError
hi def link vimBufnrWarn vimWarn
hi def link vim9TypeAliasError vimError
endif
hi def link vimAbb vimCommand
hi def link vimAddress Constant
hi def link vimAddressPattern Regexp
hi def link vimAddressOffset Type
hi def link vimAddressSlashEscape Special
hi def link vimAddressQuestionEscape Special
hi def link vimAt vimCommand
hi def link vimAtArg Special
hi def link vimAugroupBang vimBang
hi def link vimAugroupError vimError
hi def link vimAugroupKey vimCommand
hi def link vimAutocmd vimCommand
hi def link vimAutocmdBang vimBang
hi def link vimAutocmdContinue vimContinue
hi def link vimAutocmdContinueComment vimContinueComment
hi def link vimAutocmdPatternEscape Special
hi def link vimAutoEvent Type
hi def link vimAutoEventGlob Type
hi def link vimAutocmdBufferPattern Special
hi def link vimAutocmdMod Special
hi def link vimAutocmdPatternSep vimSep
hi def link vimBang vimOper
hi def link vimBehaveBang vimBang
hi def link vimBehaveModel vimBehave
hi def link vimBehave vimCommand
hi def link vimBracket Delimiter
hi def link vimBreakaddFunc Special
hi def link vimBreakaddFile Special
hi def link vimBreakaddHere Special
hi def link vimBreakaddExpr Special
hi def link vimBreakpointGlob Special
hi def link vimBreakadd vimCommand
hi def link vimBreakdel vimCommand
hi def link vimBreaklist vimCommand
hi def link vimBuffer vimCommand
hi def link vimBuffer_ vimBuffer
hi def link vimCall vimCommand
hi def link vimCall_ vimCall
hi def link vimCatch vimCommand
hi def link vimCatchPattern Regexp
hi def link vimChangeBang vimBang
hi def link vimChangeCount vimCount
hi def link vimCd vimCommand
hi def link vimCdBang vimBang
hi def link vimCmdSepContinue vimContinue
hi def link vimCmdSepContinueComment vimContinueComment
hi def link vimCommand Statement
hi def link vimCommand_ vimCommand
hi def link vimCommandModifier vimCommand
hi def link vimCommandModifier_ vimCommandModifier
hi def link vimCommandModifierBang vimBang
hi def link vimCommandModifierContinue vimContinue
hi def link vimCommandModifierContinueComment vimContinueComment
hi def link vimComment Comment
hi def link vimCommentError vimError
hi def link vimCommentString vimString
hi def link vimCommentTitle PreProc
hi def link vimCondHL vimCommand
hi def link vimConst vimCommand
hi def link vimContinue Special
hi def link vimContinueComment vimComment
hi def link vimContinueString vimString
hi def link vimCopy vimCommand
hi def link vimCopy_ vimCopy
hi def link vimCount Number
hi def link vimCtrlChar SpecialChar
hi def link vimDebug vimCommand
hi def link vimDebuggreedy vimCommand
hi def link vimDebuggreedy_ vimDebuggreedy
hi def link vimDef vimCommand
hi def link vimDefBang vimBang
hi def link vimDefComment vim9Comment
hi def link vimDefer vimCommand
hi def link vimDefParam vimVar
hi def link vimDelcommand vimCommand
hi def link vimDelcommandAttr vimUserCmdAttr
hi def link vimDelete vimCommand
hi def link vimDelete_ vimDelete
hi def link vimDeleteCount Number
hi def link vimDeleteRegister Constant
hi def link vimDelfunction vimCommand
hi def link vimDelfunctionBang vimBang
hi def link vimDoautocmd vimCommand
hi def link vimDoautocmdMod Special
hi def link vimDoCommand vimCommand
hi def link vimDoCommand_ vimDoCommand
hi def link vimDoCommandBang vimBang
hi def link vimTextInputBang vimBang
hi def link vimTextInputComment vimComment
hi def link vimTextInputEnd vimCommand
hi def link vimTextInputText String
hi def link vimEcho vimCommand
hi def link vimEchohlNone vimGroup
hi def link vimEchohl vimCommand
hi def link vimElse vimCommand
hi def link vimElseif vimCommand
hi def link vimElseIfErr Error
hi def link vimEndfunction vimCommand
hi def link vimEnddef vimCommand
hi def link vimEndif vimCommand
hi def link vimEnvvar PreProc
hi def link vimError Error
hi def link vimEscape Special
hi def link vimEquals vimCommand
hi def link vimEval vimCommand
hi def link vimExFilter vimCommand
hi def link vimExFilterBang vimBang
hi def link vimExFilterPattern Regexp
hi def link vimFBVar vimVar
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimFuncEcho vimCommand
hi def link vimFor vimCommand
hi def link vimForInContinue vimContinue
hi def link vimForInContinueComment vimContinueComment
hi def link vimFTCmd vimCommand
hi def link vimFTOption vimSynType
hi def link vimFunction vimCommand
hi def link vimFunctionBang vimBang
hi def link vimFunctionComment vimComment
hi def link vimFuncName Function
hi def link vimFunctionMod Special
hi def link vimFunctionPattern Regexp
hi def link vimFunctionParam vimVar
hi def link vimFunctionParamEquals vimOper
hi def link vimFunctionScope vimVarScope
hi def link vimFunctionSID vimNotation
hi def link vimGlobal vimCommand
hi def link vimGlobalPattern Regexp
hi def link vimGrep vimCommand
hi def link vimGrep_ vimGrep
hi def link vimGrepadd vimCommand
hi def link vimGrepadd_ vimGrepadd
hi def link vimGrepBang vimBang
hi def link vimGroup Type
hi def link vimGroupAdd vimSynOption
hi def link vimGroupListEquals vimSynOption
hi def link vimGroupListContinue vimContinue
hi def link vimGroupListContinueComment vimContinueComment
hi def link vimGroupName Normal
hi def link vimGroupRem vimSynOption
hi def link vimGroupSpecial Special
hi def link vimHelp vimCommand
hi def link vimHelpBang vimBang
hi def link vimHelpgrep vimCommand
hi def link vimHelpgrepPattern Regexp
hi def link vimHiAttrib PreProc
hi def link vimHiBang vimBang
hi def link vimHiClear Type
hi def link vimHiCtermColor Constant
hi def link vimHiCtermFgBg vimHiTerm
hi def link vimHiCtermfont vimHiTerm
hi def link vimHiCtermul vimHiTerm
hi def link vimHiCTerm vimHiTerm
hi def link vimHighlight vimCommand
hi def link vimHiGroup vimGroupName
hi def link vimHiGuiFgBg vimHiTerm
hi def link vimHiGuiFont vimHiTerm
hi def link vimHiGuiRgb vimNumber
hi def link vimHiGui vimHiTerm
hi def link vimHiNmbr Number
hi def link vimHiNone vimGroup
hi def link vimHiStartStop vimHiTerm
hi def link vimHiTerm Type
hi def link vimHLGroup vimGroup
hi def link vimHistory vimCommand
hi def link vimHistoryName Special
hi def link vimIf vimCommand
hi def link vimImport vimCommand
hi def link vimImportAutoload Special
hi def link vimImportAs vimImport
hi def link vim9KeymapLineComment vimKeymapLineComment
hi def link vimKeymapLineComment vimComment
hi def link vimKeymapTailComment vimComment
hi def link vimLambdaBrace Delimiter
hi def link vimLambdaOperator vimOper
hi def link vimLanguage vimCommand
hi def link vimLanguageCategory Special
hi def link vimLanguageNameReserved Constant
hi def link vimLet vimCommand
hi def link vimLetHeredoc vimString
hi def link vimLetHeredocStart Special
hi def link vimLetHeredocStop Special
hi def link vimLetRegister vimRegister
hi def link vimLetVar vimVar
hi def link vimLineComment vimComment
hi def link vimLoadkeymap vimCommand
hi def link vimLockvar vimCommand
hi def link vimLockvarBang vimBang
hi def link vimLockvarDepth vimNumber
hi def link vimLua vimCommand
hi def link vimLua_ vimLua
hi def link vimMake vimCommand
hi def link vimMakeadd vimCommand
hi def link vimMakeBang vimBang
hi def link vimMapBang vimBang
hi def link vimMapLeader vimBracket
hi def link vimMapLeaderKey vimNotation
hi def link vimMapModKey vimFunctionSID
hi def link vimMapMod vimBracket
hi def link vimMap vimCommand
hi def link vimMark vimCommand
hi def link vimMark_ vimMark
hi def link vimMatch vimCommand
hi def link vimMatch_ vimMatch
hi def link vimMatchGroup vimGroup
hi def link vimMatchNone vimGroup
hi def link vimMatchPattern Regexp
hi def link vimMenuBang vimBang
hi def link vimMenuClear Special
hi def link vimMenuMod vimMapMod
hi def link vimMenuName PreProc
hi def link vimMenu vimCommand
hi def link vimMenu_ vimMenu
hi def link vimMenuNotation vimNotation
hi def link vimMenuPriority Number
hi def link vimMenuStatus Special
hi def link vimMenutranslateComment vimComment
hi def link vim9MethodName vimFuncName
hi def link vimMtchComment vimComment
hi def link vimMzScheme vimCommand
hi def link vimMzScheme_ vimMzScheme
hi def link vimNonText NonText
hi def link vimNormal vimCommand
hi def link vimNotation Special
hi def link vimNotPatSep Regexp
hi def link vimNumber Number
hi def link vimOperError Error
hi def link vimOper Operator
hi def link vimOperContinue vimContinue
hi def link vimOperContinueComment vimContinueComment
hi def link vimOption PreProc
hi def link vimOptionVar Identifier
hi def link vimOptionVarName Identifier
hi def link vimPackadd vimCommand
hi def link vimPackaddBang vimBang
hi def link vimParenSep Delimiter
hi def link vimPatSepErr vimError
hi def link vimPatSepR vimPatSep
hi def link vimPatSep SpecialChar
hi def link vimPatSepZone Regexp
hi def link vimPatSepZ vimPatSep
hi def link vimPattern Type
hi def link vimPerl vimCommand
hi def link vimPerl_ vimPerl
hi def link vimPound vimCommand
hi def link vimPound_ vimPound
hi def link vimPoundCount Number
hi def link vimPrintFlag Special
hi def link vimProfile vimCommand
hi def link vimProfileArg vimSpecial
hi def link vimProfileBang vimBang
hi def link vimProfdel vimCommand
hi def link vimProfdelArg vimSpecial
hi def link vimPrompt vimCommand
hi def link vimPython vimCommand
hi def link vimPython3 vimCommand
hi def link vimPythonX vimCommand
hi def link vimPython__ vimPython
hi def link vimPython3__ vimPython3
hi def link vimPythonX__ vimPythonX
hi def link vimQuoteEscape vimEscape
hi def link vimRange Constant
hi def link vimRedir vimCommand
hi def link vimRedirBang vimBang
hi def link vimRedirFileOperator vimOper
hi def link vimRedirRegisterOperator vimOper
hi def link vimRedirVariableOperator vimOper
hi def link vimRedirEnd Special
hi def link vimRedirRegister vimRegister
hi def link vimRegister SpecialChar
hi def link vimReturn vimCommand
hi def link vimRuby vimCommand
hi def link vimRuby_ vimRuby
hi def link vimRuntime vimCommand
hi def link vimRuntimeBang vimBang
hi def link vimRuntimeWhere Special
hi def link vimScriptDelim Comment
hi def link vimScriptHeredocStart vimLetHeredocStart
hi def link vimScriptHeredocStop vimLetHeredocStop
hi def link vimSep Delimiter
hi def link vimSet vimCommand
hi def link vimSetAll vimOption
hi def link vimSetBang vimBang
hi def link vimSetComment vimComment
hi def link vimSetMod vimOption
hi def link vimSetSep vimSep
hi def link vimSetTermcap vimOption
hi def link vimShebang PreProc
hi def link vimShiftLeftCount Number
hi def link vimShiftLeftPlus Special
hi def link vimShiftLeft vimCommand
hi def link vimShiftRightCount Number
hi def link vimShiftRightPlus Special
hi def link vimShiftRight vimCommand
hi def link vimSleep vimCommand
hi def link vimSleep_ vimSleep
hi def link vimSleepArg Constant
hi def link vimSleepBang vimBang
hi def link vimSort vimCommand
hi def link vimSort_ vimSort
hi def link vimSortBang vimBang
hi def link vimSortOptions Special
hi def link vimSortPattern Regexp
hi def link vimSpecFile Identifier
hi def link vimSpecFileMod vimSpecFile
hi def link vimSpecial Type
hi def link vimStringCont vimString
hi def link vimString String
hi def link vimStringEnd vimString
hi def link vimStringInterpolationBrace vimEscape
hi def link vimSubstCount Number
hi def link vimSubstDelim Delimiter
hi def link vimSubstFlags Special
hi def link vimSubstPat Regexp
hi def link vimSubstSubstr SpecialChar
hi def link vimSubstTwoBS Regexp
hi def link vimSubst vimCommand
hi def link vimSubst_ vimSubst
hi def link vimSynCase Type
hi def link vimSyncCcomment Type
hi def link vimSynCchar vimSynOption
hi def link vimSynCcharValue Character
hi def link vimSyncClear Type
hi def link vimSyncFromstart Type
hi def link vimSyncGroup vimGroupName
hi def link vimSyncGroupName vimGroupName
hi def link vimSyncKey Type
hi def link vimSyncLinebreak Type
hi def link vimSyncLinecont Type
hi def link vimSyncLines Type
hi def link vimSyncMatch Type
hi def link vimSyncNone Type
hi def link vimSynConceal Type
hi def link vimSynContains vimSynOption
hi def link vimSyncRegion Type
hi def link vimSynFoldlevel Type
hi def link vimSynIskeyword Type
hi def link vimSynIskeywordSep Delimiter
hi def link vimSynContainedin vimSynContains
hi def link vimSynKeyOpt vimSynOption
hi def link vimSynMtchGrp vimSynOption
hi def link vimSynMtchOpt vimSynOption
hi def link vimSynNextgroup vimSynOption
hi def link vimSynNotPatRange vimSynRegPat
hi def link vimSynOption Special
hi def link vimSynPatRange Regexp
hi def link vimSynReg Type
hi def link vimSynRegOpt vimSynOption
hi def link vimSynRegPat Regexp
hi def link vimSynSpell Type
hi def link vimSyntax vimCommand
hi def link vimSynType vimSpecial
hi def link vimSyntime vimCommand
hi def link vimSyntimeArg vimSpecial
hi def link vimTcl vimCommand
hi def link vimTcl_ vimTcl
hi def link vimTerminal vimCommand
hi def link vimTerminal_ vimCommand
hi def link vimTerminalContinue vimContinue
hi def link vimTerminalContinueComment vimContinueComment
hi def link vimTerminalOption vimSpecial
hi def link vimTerminalKillOptionArg Constant
hi def link vimTerminalSizeOptionArg Constant
hi def link vimTerminalTypeOptionArg Constant
hi def link vimThrow vimCommand
hi def link vimTodo Todo
hi def link vimType Type
hi def link vimTypeAny vimType
hi def link vimTypeObject vimType
hi def link vimTypeObjectBracket vimTypeObject
hi def link vimUniq vimCommand
hi def link vimUniq_ vimUniq
hi def link vimUniqBang vimBang
hi def link vimUniqOptions Special
hi def link vimUniqPattern Regexp
hi def link vimUnlet vimCommand
hi def link vimUnletBang vimBang
hi def link vimUnlockvar vimCommand
hi def link vimUnmap vimMap
hi def link vimUserCmd vimCommand
hi def link vimUserCmdAttrAddr vimSpecial
hi def link vimUserCmdAttrComplete vimSpecial
hi def link vimUserCmdAttrCompleteFunc vimVar
hi def link vimUserCmdAttrNargs vimSpecial
hi def link vimUserCmdAttrRange vimSpecial
hi def link vimUserCmdAttrKey vimUserCmdAttr
hi def link vimUserCmdAttr Special
hi def link vimUserCmdAttrError Error
hi def link vimUserCmdError Error
hi def link vimUserCmdKey vimCommand
hi def link vimUserFunc Normal
hi def link vimUserFuncKey vimUserFunc
hi def link vimUsrCmdBang vimBang
hi def link vimVar Normal
hi def link vimVarKey vimVar
hi def link vimVarScope Identifier
hi def link vimVimgrep vimCommand
hi def link vimVimgrep_ vimVimgrep
hi def link vimVimgrepadd vimCommand
hi def link vimVimgrepadd_ vimVimgrepadd
hi def link vimVimgrepBang vimBang
hi def link vimVimgrepFlags Special
hi def link vimVimgrepPattern Regexp
hi def link vimVimVar Identifier
hi def link vimVimVarName Identifier
hi def link vimWarn WarningMsg
hi def link vimWhile vimCommand
hi def link vimWildcard Special
hi def link vimWildcardBraceComma vimWildcard
hi def link vimWildcardBracket vimWildcard
hi def link vimWildcardBracketCaret vimWildcard
hi def link vimWildcardBracketCharacter Normal
hi def link vimWildcardBracketCharacter Normal
hi def link vimWildcardBracketCharacterClass vimWildcard
hi def link vimWildcardBracketCollatingSymbol vimWildcard
hi def link vimWildcardBracketEnd vimWildcard
hi def link vimWildcardBracketEquivalenceClass vimWildcard
hi def link vimWildcardBracketEscape vimWildcard
hi def link vimWildcardBracketHyphen vimWildcard
hi def link vimWildcardBracketRightBracket vimWildcardBracketCharacter
hi def link vimWildcardBracketStart vimWildcard
hi def link vimWildcardEscape vimWildcard
hi def link vimWildcardInterval vimWildcard
hi def link vimWildcardQuestion vimWildcard
hi def link vimWildcardStar vimWildcard
hi def link vimWinCmd vimCommand
hi def link vimWrite vimCommand
hi def link vimWrite_ vimWrite
hi def link vim9Abstract vimCommand
hi def link vim9Boolean Boolean
hi def link vim9Class vimCommand
hi def link vim9Comment Comment
hi def link vim9CommentError vimError
hi def link vim9CommentTitle PreProc
hi def link vim9ConstructorDefParam vimVar
hi def link vim9Const vimCommand
hi def link vim9ContinueComment vimContinueComment
hi def link vim9Enum vimCommand
hi def link vim9EnumImplementedInterfaceComment vim9Comment
hi def link vim9EnumImplements vim9Implements
hi def link vim9EnumNameComment vim9Comment
hi def link vim9EnumNameContinue vimContinue
hi def link vim9EnumNameContinueComment vim9Comment
hi def link vim9EnumValueListCommaComment vim9Comment
hi def link vim9Export vimCommand
hi def link vim9Extends Keyword
hi def link vim9Final vimCommand
hi def link vim9For vimCommand
hi def link vim9ForInComment vim9Comment
hi def link vim9Implements Keyword
hi def link vim9AbstractDef vimCommand
hi def link vim9Interface vimCommand
hi def link vim9LambdaOperator vimOper
hi def link vim9LambdaOperatorComment vim9Comment
hi def link vim9LambdaParen vimParenSep
hi def link vim9LhsRegister vimLetRegister
hi def link vim9LhsVariable vimVar
hi def link vim9LineComment vimComment
hi def link vim9MethodDef vimCommand
hi def link vim9MethodDefComment vimDefComment
hi def link vim9MethodNameError vimFunctionError
hi def link vim9Null Constant
hi def link vim9Public vimCommand
hi def link vim9Static vimCommand
hi def link vim9Super Identifier
hi def link vim9This Identifier
hi def link vim9Type vimCommand
hi def link vim9TypeEquals vimOper
hi def link vim9Variable vimVar
hi def link vim9VariableType vimType
hi def link vim9VariableTypeAny vimTypeAny
hi def link vim9VariableTypeObject vimTypeObject
hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket
hi def link vim9Var vimCommand
hi def link vim9Vim9ScriptArg Special
hi def link vim9Vim9Script vimCommand
hi def link vim9Wincmd vimWincmd
hi def link vimWincmd_ vimWincmd
hi def link vimCompilerSet vimCommand
hi def link vimVimExtend vimCommand
hi def link vimSynColor vimCommand
hi def link vimSynLink vimCommand
hi def link vimSynMenu vimCommand
hi def link vimSynMenuPath vimMenuName
hi def link vimVimFold vimCommand
hi def link vimVim9 vimCommand
hi def link vimVimL vimCommand
endif
" Current Syntax Variable: {{{2
let b:current_syntax = "vim"
" ---------------------------------------------------------------------
" Cleanup: {{{1
delc Vim9
delc VimL
delc VimExtend
delc VimFolda
delc VimFoldc
delc VimFolde
delc VimFoldf
delc VimFoldh
delc VimFoldH
delc VimFoldi
delc VimFoldl
delc VimFoldm
delc VimFoldp
delc VimFoldP
delc VimFoldr
delc VimFoldt
let &cpo = s:keepcpo
unlet s:keepcpo s:vim9script
" vim:ts=18 fdm=marker ft=vim