" Vim syntax file " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns " 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 "\" nextgroup=vimBang syn match vimCommand_ contained "co\%[py]\>" nextgroup=vimBang syn match vimCommand contained "\" nextgroup=vimBang syn match vimCommand_ contained "j\%[oin]\>" nextgroup=vimBang syn match vimCommand contained "\" nextgroup=vimBang syn match vimCommand_ contained "sp\%[lit]\>" nextgroup=vimBang syn match vimCommand contained "\" 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 "\" skipwhite skipnl nextgroup=vimCommandModifierBang,@vimCommandModifierContinue,vimCmdStart,@vimRange,@vimCmdList,@vim9Lhs,@vim9Func syn match vimCommandModifier contained "\" 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 "\" 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 "\" 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 s:vim9script ? "" : "contained" com! -nargs=* VimL execute s:vim9script ? "contained" : "" com! -nargs=* VimExtend execute s:cmdline_window ? "" : "extend" if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]' if g:vimsyn_folding =~# 'a' com! -nargs=* VimFolda fold else com! -nargs=* VimFolda endif if g:vimsyn_folding =~# 'c' com! -nargs=* VimFoldc fold else com! -nargs=* VimFoldc endif if g:vimsyn_folding =~# 'e' com! -nargs=* VimFolde fold else com! -nargs=* VimFolde endif if g:vimsyn_folding =~# 'f' com! -nargs=* VimFoldf fold else com! -nargs=* VimFoldf endif if g:vimsyn_folding =~# 'h' com! -nargs=* VimFoldh fold else com! -nargs=* VimFoldh endif if g:vimsyn_folding =~# 'H' com! -nargs=* VimFoldH fold else com! -nargs=* VimFoldH endif if g:vimsyn_folding =~# 'i' com! -nargs=* VimFoldi fold else com! -nargs=* VimFoldi endif if g:vimsyn_folding =~# 'l' com! -nargs=* VimFoldl fold else com! -nargs=* VimFoldl endif if g:vimsyn_folding =~# 'm' com! -nargs=* VimFoldm fold else com! -nargs=* VimFoldm endif if g:vimsyn_folding =~# 'p' com! -nargs=* VimFoldp fold else com! -nargs=* VimFoldp endif if g:vimsyn_folding =~# 'P' com! -nargs=* VimFoldP fold else com! -nargs=* VimFoldP endif if g:vimsyn_folding =~# 'r' com! -nargs=* VimFoldr fold else com! -nargs=* VimFoldr endif if g:vimsyn_folding =~# 't' com! -nargs=* VimFoldt fold else com! -nargs=* VimFoldt endif else com! -nargs=* VimFolda com! -nargs=* VimFoldc com! -nargs=* VimFolde com! -nargs=* VimFoldf com! -nargs=* VimFoldi com! -nargs=* VimFoldh com! -nargs=* VimFoldH com! -nargs=* VimFoldl com! -nargs=* VimFoldm com! -nargs=* VimFoldp com! -nargs=* VimFoldP com! -nargs=* VimFoldr com! -nargs=* VimFoldt 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 "\" 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 "\'`"^.(){}]" 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 "\" 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 "\" 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 "\" 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="\" \ start="\" \ start="\" \ 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="\\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" \ matchgroup=vimAugroupKey \ 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 "\\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey Vim9 syn match vimAugroup contained "\\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="\%(\\\@" 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 "\%(++\)\=\" 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 "" 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 "\" 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 "\" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep syn region vimCdArg contained \ start=+["#|]\@!\S+ \ end="\ze\s*$" \ end=+\ze\s*\\\@1!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang syn match vimUserCmd contained +\!\=\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="\%(\\\@" 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 "\" 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 "\\|#\)" nextgroup=vimPrintFlag syn match vimDelete_ contained "d\%[elete]\ze\%([lp]\+\>\|#\)" nextgroup=vimPrintFlag " :del is :delete only, not :delete | :list syn match vimDelete contained "\" syn match vimDelete_ contained "del\>" syn match vimDelete contained "\\)" 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="\" \ start="\" \ start="\" \ start="\" \ start="\" "\ TODO: default to \ \ start="\" \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ \ end="\ze|" \ excludenl end="$" \ nextgroup=vimCmdSep \ contains=@vimContinue,@vimExprList,vim9Comment \ transparent syn match vimEchohl contained "\" 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="\" \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ \ end="\ze|" \ excludenl end="$" \ nextgroup=vimCmdSep \ contains=@vimContinue,@vimExprList,vim9Comment \ transparent syn region vimEval contained \ matchgroup=vimCommand \ start="\" \ 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 "\!\=[:.-]\@!" 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 "\%(\\)\@!\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 "\" 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="\(\\|\\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation " TODO: simplify and allow line continuations --djk syn region vimHiLink contained \ matchgroup=Type \ start="\%(\\|\\)" \ 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 "\%(\" 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 "\" 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 "\\|[[\]<>'`]\)\@=" 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="\" \ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ \ end="$" \ end="\ze|" \ matchgroup=vimMenuClear \ end="\!\=" 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=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]\+>" 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="\\\@" skipwhite nextgroup=vimGroupListEquals syn match vimSynContainedin contained "\" skipwhite nextgroup=vimGroupListEquals syn match vimSynNextgroup contained "\" skipwhite nextgroup=vimGroupListEquals if has("conceal") " no whitespace allowed after '=' syn match vimSynCchar contained "\" skipwhite nextgroup=vimGroupListEquals syn match vimGroupRem contained "\" skipwhite nextgroup=vimGroupListEquals " :syntax conceal {{{3 syn match vimSynType contained "\" 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 "\" " :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 "\" skipwhite nextgroup=vimSyncKey,vimSynRegPat syn match vimSyncKey contained "\" skipwhite nextgroup=vimSyncGroup syn match vimSyncKey contained "\" 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 "\" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand syn match vimTerminal contained +\\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 "\" 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]\>\|[\^:=\-+_<>|\]}]\|\" \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment " only handles oneline assignments " NOTE: handled with higher priority later in file " Vim9 syn match vim9Wincmd "\s\=\\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg " :write {{{3 " ====== " lower priority than [wtb]: Vim9 scoped variables at SOL syn match vimWrite contained "\" nextgroup=vimBang syn match vimWrite_ contained "w\%[rite]\>" nextgroup=vimBang " :z {{{3 " == syn match vimCommand_ contained "z[-+^.=]\=\>" syn match vimCommand contained "\" " Operators: {{{2 " ========= syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment,vim9LineComment,vimContinueString syn match vimOper "\a\@=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile syn match vimOper "\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile syn match vimOper "\" 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 \ "(\%(\" \ 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" 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 "\" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment syn match vimDef contained "\" 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="\" \ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError \ contains=@vimFunctionBodyList syn region vimDefBody contained \ start="^." \ matchgroup=vimCommand \ end="\" \ 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="\" syn region vimCompoundType contained matchgroup=vimType start="\" syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType " Classes, Enums And Interfaces: {{{2 " ============================= if s:vim9script " Methods {{{3 syn match vim9MethodDef contained "\" 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="\" \ 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 "\" 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:\@!" " super must be followed by '.' syn match vim9Super contained "\.\@1" \ matchgroup=vimCommand \ end="\" \ 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 "\" 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="\" \ matchgroup=vimCommand \ end="\" \ 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 "\" 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="\" \ matchgroup=vimCommand \ end="\" \ 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="\%(\\\@" 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 "\" skipwhite nextgroup=vimLetHeredoc syn region vim9VariableCompoundType contained \ matchgroup=vim9VariableType \ start="\" 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\%(\\\|\)\=<\%([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\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket " syn match vimNotation contained '\%(\\\|\)\=[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket syn match vimNotation contained '\%#=1\%(\\\|\)\=<\%([fq]-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|lt\)>' contains=vimBracket skipwhite nextgroup=vimSubst syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket syn match vimNotation contained "\%#=1\%(\\\|\)\=<\%([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 "\" 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 "\" syn match vimBufnrWarn /\" 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" 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\=\\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg contains=vimWhitespace Vim9 syn match vim9Wincmd "^\s*\\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 "\\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