" Maintainer: Dr. Charles E. Campbell, Jr. <cec@gryphon.gsfc.nasa.gov>
" Last change: August 28, 1998
" Remove old syntax
syn clear
syn keyword vimTodo contained TODO
" regular vim commands
syn keyword vimCommand contained I cr[ewind] ma[rk] sbl[ast] w[rite]
syn keyword vimCommand contained N[ext] cu[nmap] mak[e] sbm[odified] wa[ll]
syn keyword vimCommand contained Next cuna[bbrev] map sbn[ext] wh[ile]
syn keyword vimCommand contained P[rint] d[elete] mapc[lear] sbp[revious] wn[ext]
syn keyword vimCommand contained a[ppend] delc[ommand] marks sbr[ewind] wp[revous]
syn keyword vimCommand contained ab[breviate] delf[unction] mk[exrc] se[t] wq
syn keyword vimCommand contained abc[lear] di[splay] mks[ession] set wqa[ll]
syn keyword vimCommand contained al[l] dig[raphs] mkv[imrc] sh[ell] wv[iminfo]
syn keyword vimCommand contained ar[gs] display mod[e] si[malt] x[it]
syn keyword vimCommand contained argu[ment] dj[ump] n[ext] sl[eep] xa[ll]
syn keyword vimCommand contained as[cii] dl[ist] new sla[st] y[ank]
syn keyword vimCommand contained au[tocmd] do[autocmd] nm[ap] sm[agic] z[+-^.=]
syn keyword vimCommand contained aug[roup] doautoa[ll] nmap sn[ext] am
syn keyword vimCommand contained autocmd ds[earch] nmapc[lear] sno[magic] amenu
syn keyword vimCommand contained bN[ext] dsp[lit] nn[oremap] so[urce] an
syn keyword vimCommand contained b[uffer] e[dit] no[remap] sp[lit] anoremenu
syn keyword vimCommand contained ba[ll] ec[ho] noh[lsearch] spr[evious] aun
syn keyword vimCommand contained bad[d] echoh[l] norea[bbrev] sr[ewind] aunmenu
syn keyword vimCommand contained bd[elete] echon norm[al] st[op] be
syn keyword vimCommand contained bdelete el[se] normal sta[g] behave
syn keyword vimCommand contained be[have] elsei[f] nu[mber] stj[ump] cme
syn keyword vimCommand contained bl[ast] en[dif] nun[map] sts[elect] cmenu
syn keyword vimCommand contained bm[odified] endf[unction] o[pen] sun[hide] cnoreme
syn keyword vimCommand contained bn[ext] endw[hile] om[ap] sus[pend] cnoremenu
syn keyword vimCommand contained bp[revious] ex omap sv[iew] cunme
syn keyword vimCommand contained br[ewind] exe[cute] omapc[lear] sy[ntax] cunmenu
syn keyword vimCommand contained brea[k] exi[t] on[ly] syntax ime
syn keyword vimCommand contained bro[wse] f[ile] ono[remap] t imenu
syn keyword vimCommand contained browse files ou[nmap] tN[ext] inoreme
syn keyword vimCommand contained buffers fix[del] p[rint] ta[g] inoremenu
syn keyword vimCommand contained bun[load] fu[nction] pe[rl] tags iunme
syn keyword vimCommand contained bunload g[lobal] perld[o] tc[l] iunmenu
syn keyword vimCommand contained cN[ext] global po[p] tcld[o] me
syn keyword vimCommand contained c[hange] gr[ep] pre[serve] tclf[ile] menu
syn keyword vimCommand contained ca[bbrev] h[elp] prev[ious] te[aroff] nme
syn keyword vimCommand contained cabc[lear] hi[ghlight] promptf[ind] the nmenu
syn keyword vimCommand contained cal[l] hid[e] promptr[epl] tj[ump] nnoreme
syn keyword vimCommand contained cc i[nsert] pu[t] tl[ast] nnoremenu
syn keyword vimCommand contained cd ia[bbrev] pw[d] tm[enu] noreme
syn keyword vimCommand contained ce[nter] iabc[lear] py[thon] tn[ext] noremenu
syn keyword vimCommand contained cf[ile] if pyf[ile] tp[revious] nunme
syn keyword vimCommand contained chd[ir] ij[ump] q[uit] tr[ewind] nunmenu
syn keyword vimCommand contained che[ckpath] il[ist] qa[ll] ts[elect] ome
syn keyword vimCommand contained cl[ist] im[ap] r[ead] tu[nmenu] omenu
syn keyword vimCommand contained cla[st] imap rec[over] tunmenu onoreme
syn keyword vimCommand contained clo[se] imapc[lear] red[o] u[ndo] onoremenu
syn keyword vimCommand contained cm[ap] ino[remap] redi[r] una[bbreviate] ounme
syn keyword vimCommand contained cmap inorea[bbrev] reg[isters] unh[ide] ounmenu
syn keyword vimCommand contained cmapc[lear] is[earch] res[ize] unl[et] tm
syn keyword vimCommand contained cn[ext] isp[lit] ret[ab] unm[ap] tmenu
syn keyword vimCommand contained cnew[er] iu[nmap] retu[rn] v[global] tu
syn keyword vimCommand contained cno[remap] iuna[bbrev] rew[ind] ve[rsion] tunmenu
syn keyword vimCommand contained cnorea[bbrev] j[oin] ri[ght] vi[sual] unme
syn keyword vimCommand contained co[py] ju[mps] rv[iminfo] vie[w] unmenu
syn keyword vimCommand contained col[der] k sN[ext] vm[ap] vme
syn keyword vimCommand contained com[mand] l[ist] s[ubstitute] vmap vmenu
syn keyword vimCommand contained comc[lear] la[st] sa[rgument] vmapc[lear] vnoreme
syn keyword vimCommand contained con[tinue] le[ft] sal[l] vn[oremap] vnoremenu
syn keyword vimCommand contained conf[irm] let sbN[ext] vu[nmap] vunme
syn keyword vimCommand contained cp[revious] ls sb[uffer] wN[ext] vunmenu
syn keyword vimCommand contained cq[uit] m[ove] sba[ll]
" All vimCommands are contained by vimIsCommands.
syn match vimIsCommand "^\s*[a-zA-Z]\+" transparent contains=vimCommand
syn match vimIsCommand "[:|]\s*[a-zA-Z]\+" transparent contains=vimCommand
" vimOptions are caught only when contained in a vimSet
syn keyword vimOption contained ai eol isprint ruler tagrelative
syn keyword vimOption contained akm ep joinspaces sb tags
syn keyword vimOption contained al equalalways js sbr tbi
syn keyword vimOption contained aleph equalprg keymodel sc tbs
syn keyword vimOption contained allowrevins errorbells keywordprg scr term
syn keyword vimOption contained altkeymap errorfile km scroll terse
syn keyword vimOption contained ari errorformat kp scrolljump textauto
syn keyword vimOption contained autoindent esckeys langmap scrolloff textmode
syn keyword vimOption contained autowrite et laststatus scs textwidth
syn keyword vimOption contained aw eventignore lazyredraw sect tf
syn keyword vimOption contained background ex lbr sections tildeop
syn keyword vimOption contained backspace expandtab lcs secure timeout
syn keyword vimOption contained backup exrc linebreak sel timeoutlen
syn keyword vimOption contained backupdir fe lines selection title
syn keyword vimOption contained backupext ff lisp selectmode titlelen
syn keyword vimOption contained bdir ffs list sessionoptions titlestring
syn keyword vimOption contained bex fileencoding listchars sft tl
syn keyword vimOption contained bg fileformat lmap sh tm
syn keyword vimOption contained bin fileformats ls shcf to
syn keyword vimOption contained binary filetype lz shell top
syn keyword vimOption contained biosk fk magic shellcmdflag tr
syn keyword vimOption contained bioskey fkmap makeef shellpipe ts
syn keyword vimOption contained bk fo makeprg shellquote tsl
syn keyword vimOption contained breakat formatoptions mat shellredir ttimeout
syn keyword vimOption contained brk formatprg matchpairs shelltype ttimeoutlen
syn keyword vimOption contained browsedir fp matchtime shellxquote ttm
syn keyword vimOption contained bs ft maxfuncdepth shiftround ttybuiltin
syn keyword vimOption contained bsdir gcr maxmapdepth shiftwidth ttyfast
syn keyword vimOption contained cf gd maxmem shm ttym
syn keyword vimOption contained ch gdefault maxmemtot shortmess ttymouse
syn keyword vimOption contained cin gfm mef shortname ttyscroll
syn keyword vimOption contained cindent gfn mfd showbreak ttytype
syn keyword vimOption contained cink go mh showcmd tw
syn keyword vimOption contained cinkeys gp ml showfulltag tx
syn keyword vimOption contained cino grepformat mls showmatch uc
syn keyword vimOption contained cinoptions grepprg mm showmode ul
syn keyword vimOption contained cinw guicursor mmd shq undolevels
syn keyword vimOption contained cinwords guifont mmt si updatecount
syn keyword vimOption contained cmdheight guioptions mod sidescroll updatetime
syn keyword vimOption contained co guipty modeline sj ut
syn keyword vimOption contained columns helpfile modelines slm vb
syn keyword vimOption contained com helpheight modified sm vbs
syn keyword vimOption contained comments hf more smartcase verbose
syn keyword vimOption contained compatible hh mouse smartindent vi
syn keyword vimOption contained complete hi mousef smarttab viminfo
syn keyword vimOption contained confirm hid mousefocus smd visualbell
syn keyword vimOption contained cp hidden mousehide sn wa
syn keyword vimOption contained cpo highlight mousem so wak
syn keyword vimOption contained cpoptions history mousemodel softtabstop warn
syn keyword vimOption contained cpt hk mouset sol wb
syn keyword vimOption contained cscopeprg hkmap mousetime sp wc
syn keyword vimOption contained cscopetag hkmapp mp splitbelow wd
syn keyword vimOption contained cscopetagorder hkp mps sr weirdinvert
syn keyword vimOption contained cscopeverbose hl nf srr wh
syn keyword vimOption contained csprg hls nrformats ss whichwrap
syn keyword vimOption contained cst hlsearch nu ssop wig
syn keyword vimOption contained csto ic number st wildchar
syn keyword vimOption contained csverb icon pa sta wildignore
syn keyword vimOption contained def iconstring para startofline wildmode
syn keyword vimOption contained define ignorecase paragraphs sts wim
syn keyword vimOption contained dg im paste su winaltkeys
syn keyword vimOption contained dict inc patchmode suffixes winheight
syn keyword vimOption contained dictionary include path sw winminheight
syn keyword vimOption contained digraph incsearch pm swapfile wiv
syn keyword vimOption contained dir inf readonly swapsync wm
syn keyword vimOption contained directory infercase remap swf wmh
syn keyword vimOption contained ea insertmode report sws wrap
syn keyword vimOption contained eb is restorescreen sxq wrapmargin
syn keyword vimOption contained ed isf revins syn wrapscan
syn keyword vimOption contained edcompatible isfname ri syntax writeany
syn keyword vimOption contained ef isi rightleft ta writebackup
syn keyword vimOption contained efm isident rl tabstop writedelay
syn keyword vimOption contained ei isk ro tag ws
syn keyword vimOption contained ek iskeyword rs tagbsearch ww
syn keyword vimOption contained endofline isp ru taglength
" These are the turn-off setting variants
syn keyword vimOption contained noai noequalalways nojoinspaces noru notbs
syn keyword vimOption contained noakm noerrorbells nojs noruler noterse
syn keyword vimOption contained noalkeymap noesckeys nolbr nosb notextauto
syn keyword vimOption contained noallowrevins noet nolinebreak nosc notextmode
syn keyword vimOption contained noari noex nolisp noscs notf
syn keyword vimOption contained noautoindent noexpandtab nolist nosecure notildeop
syn keyword vimOption contained noautowrite noexrc nomagic noshiftround notimeout
syn keyword vimOption contained noaw nofk nomh noshortname notitle
syn keyword vimOption contained nobackup nofkmap noml noshowcmd noto
syn keyword vimOption contained nobin nogd nomod noshowmatch notop
syn keyword vimOption contained nobinary nogdefault nomodeline noshowmode notr
syn keyword vimOption contained nobiosk noguipty nomodified nosi nottimeout
syn keyword vimOption contained nobioskey nohid nomore nosm nottybuiltin
syn keyword vimOption contained nobk nohidden nomousef nosmartcase nottyfast
syn keyword vimOption contained nocf nohk nomousefocus nosmartindent notx
syn keyword vimOption contained nocin nohkmap nomousehide nosmarttab novb
syn keyword vimOption contained nocindent nohkmapp nonu nosmd novisualbell
syn keyword vimOption contained nocompatible nohkp nonumber nosn nowa
syn keyword vimOption contained noconfirm nohls nopaste nosol nowarn
syn keyword vimOption contained nocp nohlsearch noreadonly nosplitbelow nowb
syn keyword vimOption contained nodg noic noremap nosr noweirdinvert
syn keyword vimOption contained nodigraph noicon norestorescreen nosta nowiv
syn keyword vimOption contained noea noignorecase norevins nostartofline nowrap
syn keyword vimOption contained noeb noim nori noswapfile nowrapscan
syn keyword vimOption contained noed noincsearch norightleft nota nowriteany
syn keyword vimOption contained noedcompatible noinf norl notagbsearch nowritebackup
syn keyword vimOption contained noek noinfercase noro notagrelative nows
syn keyword vimOption contained noendofline noinsertmode nors notbi nowsf
syn keyword vimOption contained noeol nois
" termcap codes (which can also be set)
syn keyword vimOption contained t_AB t_RI t_da t_k9 t_ks t_so
syn keyword vimOption contained t_AF t_Sb t_db t_kD t_ku t_sr
syn keyword vimOption contained t_AL t_Sf t_dl t_kI t_le t_te
syn keyword vimOption contained t_CS t_ZH t_k1 t_kN t_mb t_ti
syn keyword vimOption contained t_Co t_ZR t_k2 t_kP t_md t_ue
syn keyword vimOption contained t_DL t_al t_k3 t_kb t_me t_us
syn keyword vimOption contained t_F1 t_bc t_k4 t_kd t_mr t_vb
syn keyword vimOption contained t_F2 t_cd t_k5 t_ke t_ms t_ve
syn keyword vimOption contained t_K1 t_ce t_k6 t_kh t_nd t_vi
syn keyword vimOption contained t_K3 t_cl t_k7 t_kl t_op t_vs
syn keyword vimOption contained t_K4 t_cm t_k8 t_kr t_se t_xs
syn keyword vimOption contained t_K5 t_cs
syn match vimOption contained "t_#4"
syn match vimOption contained "t_%1"
syn match vimOption contained "t_%i"
syn match vimOption contained "t_&8"
syn match vimOption contained "t_@7"
syn match vimOption contained "t_k;"
" these settings don't actually cause errors in vim, but were supported by vi and don't do anything in vim
syn keyword vimErrSetting contained hardtabs w1200 w9600 wi window
syn keyword vimErrSetting contained ht w300
" AutoBuf Events
syn keyword vimAutoEvent contained BufDelete BufReadPost FileAppendPre FilterReadPre User
syn keyword vimAutoEvent contained BufEnter BufReadPre FileChangedShell FilterWritePost VimEnter
syn keyword vimAutoEvent contained BufFilePost BufUnload FileReadPost FilterWritePre VimLeave
syn keyword vimAutoEvent contained BufFilePre BufWrite FileReadPre StdinReadPost VimLeavePre
syn keyword vimAutoEvent contained BufLeave BufWritePost FileWritePost StdinReadPre WinEnter
syn keyword vimAutoEvent contained BufNewFile BufWritePre FileWritePre TermChanged WinLeave
syn keyword vimAutoEvent contained BufRead FileAppendPost FilterReadPost
" Highlight commonly used Groupnames
syn keyword vimGroup Comment Identifier Keyword Type Delimiter
syn keyword vimGroup Constant Function Exception StorageClass SpecialComment
syn keyword vimGroup String Statement PreProc Structure Debug
syn keyword vimGroup Character Conditional Include Typedef Ignore
syn keyword vimGroup Number Repeat Define Special Error
syn keyword vimGroup Boolean Label Macro SpecialChar Todo
syn keyword vimGroup Float Operator PreCondit Tag
" Default highlighting groups
syn keyword vimHLGroup Cursor LineNr NonText Search Title
syn keyword vimHLGroup Directory Menu Normal SpecialKey Visual
syn keyword vimHLGroup ErrorMsg ModeMsg Question StatusLine WarningMsg
syn keyword vimHLGroup IncSearch MoreMsg Scrollbar StatusLineNC
" Function Names
syn keyword vimFuncName contained argc delete has matchend synID
syn keyword vimFuncName contained argv escape hlID matchstr synIDattr
syn keyword vimFuncName contained browse exists hlexists nr2char synIDtran
syn keyword vimFuncName contained bufexists expand hostname setline tempname
syn keyword vimFuncName contained bufname filereadable input strftime virtcol
syn keyword vimFuncName contained bufnr fnamemodify isdirectory strlen winbufnr
syn keyword vimFuncName contained char2nr getcwd line strpart winheight
syn keyword vimFuncName contained col getline match substitute winnr
syn keyword vimFuncName contained confirm
syn match vimFunc contained "\I\i*\s*(" contains=vimFuncName
"--- syntax above generated by mkvimvim ---
" Special Vim Highlighting
" Behave!
" =======
syn match vimBehave "^\s*\(behave\|behav\|beha\|beh\|be\)" contains=vimCommand skipwhite nextgroup=vimBehaveModel,vimBehaveError
syn match vimBehave "[:|]\s*\(behave\|behav\|beha\|beh\|be\)"lc=1 contains=vimCommand skipwhite nextgroup=vimBehaveModel,vimBehaveError
syn keyword vimBehaveModel contained mswin xterm
syn match vimBehaveError contained "[^ ]\+"
" Functions
" =========
syn match vimFunction "\(function\|functio\|functi\|funct\|func\|fun\)\s\+[A-Z][a-z]*(" contains=vimCommand nextgroup=vimFuncBody
syn match vimFunctionError "\(function\|functio\|functi\|funct\|func\|fun\)\s\+[a-z].*(" contains=vimCommand nextgroup=vimFuncBody
syn region vimFuncBody contained start=")" end="\<endf" contains=vimIsCommand,vimGroup,vimHLGroup,vimFunction,vimFunctionError,vimFuncBody,vimSpecFile,vimConditional,vimOper,vimNumber,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimIsCommand,vimCtrlChar,vimFuncVar
syn match vimFuncVar contained "a:\(\I\i*\|[0-9]\+\)"
syn keyword vimPattern contained start skip end
" Special Filenames and Modifiers
syn match vimSpecFile "<\(cword\|cWORD\|[cas]file\)>" nextgroup=vimSpecFileMod,vimSubst
syn match vimSpecFile "#\d\+\|[#%]<" nextgroup=vimSpecFileMod,vimSubst
syn match vimSpecFileMod "\(:[phtre]\)\+" contained
" Conditionals
syn match vimConditional "^\s*\(continue\|continu\|contin\|conti\|cont\|con\)\>"
syn match vimConditional "^\s*\(endif\|endi\|end\|en\)\>"
syn match vimConditional "^\s*\(endwhile\|endwhil\|endwhi\|endwh\|endw\)\>"
syn match vimConditional "^\s*\(while\|whil\|whi\|wh\)\>"
syn match vimConditional "^\s*break\=\>"
syn match vimConditional "^\s*else\>"
syn match vimConditional "^\s*elseif\=\>"
syn match vimConditional "^\s*if\>"
syn match vimConditional "[:|]\s*\(continue\|continu\|contin\|conti\|cont\|con\)\>"lc=1
syn match vimConditional "[:|]\s*\(endif\|endi\|end\|en\)\>"lc=1
syn match vimConditional "[:|]\s*\(endwhile\|endwhil\|endwhi\|endwh\|endw\)\>"lc=1
syn match vimConditional "[:|]\s*\(while\|whil\|whi\|wh\)\>"lc=1
syn match vimConditional "[:|]\s*break\=\>"lc=1
syn match vimConditional "[:|]\s*else\>"lc=1
syn match vimConditional "[:|]\s*elseif\=\>"lc=1
syn match vimConditional "[:|]\s*if\>"lc=1
" Operators
syn match vimOper "[^,:|]||\|&&\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|+\|-\|=\|\."lc=1 skipwhite nextgroup=vimString
" User-Specified Commands
syn cluster vimUserCmdList contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vimConditional,vimCtrlChar,vimEscapeBrace,vimFilter,vimFunc,vimFunction,vimGroup,vimHLGroup,vimIsCommand,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstEnd,vimSubstRange,vimSynLine
syn region vimUserCmd transparent oneline matchgroup=vimStatement start="[:|]\s*\(command\|comman\|comma\|comm\|com\)"hs=s+1 end="$" contains=vimUserAttrb,@vimUserCmdList
syn region vimUserCmd transparent oneline matchgroup=vimStatement start="^\s*\(command\|comman\|comma\|comm\|com\)" end="$" contains=vimUserAttrb,@vimUserCmdList
syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper
syn match vimUserAttrb contained transparent "-complete=\(augroup\|buffer\|command\|dir\|event\|file\|help\|highlight\|menu\|option\|tag\|var\)" contains=vimUserAttrbCmplt,vimOper
syn match vimUserAttrb contained "-range\(=%\|=[0-9]\+\)\=" contains=vimNumber,vimOper,vimUserAttrbKey
syn match vimUserAttrb contained "-count=[0-9]\+" contains=vimNumber,vimOper,vimUserAttrbKey
syn match vimUserAttrb contained "-bang\|-register" contains=vimOper,vimUserAttrbKey
syn keyword vimUserAttrbKey contained bang count range
syn keyword vimUserAttrbKey contained complete nargs register
syn keyword vimUserAttrbCmplt contained augroup dir help menu tag
syn keyword vimUserAttrbCmplt contained buffer event highlight option var
syn keyword vimUserAttrbCmplt contained command file
" Numbers
syn match vimNumber "\<\d\+.\d\+"
syn match vimNumber "\<\d\+L\="
syn match vimNumber "-\d\+.\d\+"
syn match vimNumber "-\d\+L\="
syn match vimNumber "[[;:]\d\+"lc=1
syn match vimNumber "0[xX][0-9a-fA-F]\+"
syn match vimNumber "#[0-9a-fA-F]\+"
" Lower Priority Comments: after some vim commands...
syn match vimComment +\s"[^\-:.%#=*].*$+lc=1 contains=vimTodo
syn match vimComment +\<endif\s\+".*$+lc=5 contains=vimTodo
syn match vimComment +\<else\s\+".*$+lc=4 contains=vimTodo
syn match vimComment +^\s*".*$+ contains=vimTodo
" Try to catch strings, if nothing else matches (therefore it must precede the others!)
" vmEscapeBrace handles ["] []"] (ie. stays as string)
syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\^\=\]\=" skip="\\\\\|\\\]" end="\]"me=e-1
syn match vimPatSep contained "\\[|()]"
syn match vimNotPatSep contained "\\\\"
syn region vimString oneline start=+[^:a-zA-Z>!\\]"+lc=1 skip=+\(\\\\\)*\\"+ end=+"+ contains=vimEscapeBrace,vimPatSep,vimNotPatSep
syn region vimString oneline start=+[^:a-zA-Z>!\\]'+lc=1 skip=+\(\\\\\)*\\'+ end=+'+ contains=vimEscapeBrace,vimPatSep,vimNotPatSep
syn region vimString oneline start=+=!+lc=1 skip=+\(\\\\\)*\\!+ end=+!+ contains=vimEscapeBrace,vimPatSep,vimNotPatSep
syn region vimString oneline start="=+"lc=1 skip="\(\\\\\)*\\+" end="+" contains=vimEscapeBrace,vimPatSep,vimNotPatSep
syn region vimString oneline start="[^\\]+\s*[^a-zA-Z0-9.]"lc=1 skip="\(\\\\\)*\\+" end="+" contains=vimEscapeBrace,vimPatSep,vimNotPatSep
syn region vimString oneline start="\s/\s*[^a-zA-Z]"lc=1 skip="\(\\\\\)*\\+" end="/" contains=vimEscapeBrace,vimPatSep,vimNotPatSep
" Substitutions
syn region vimSubst oneline start=":\=s/.\{-}" skip="\(\\\\\)*\\/" end="/" contains=vimPatSep,vimSubstTwoBS,vimSubstRange,vimNotation nextgroup=vimSubstEnd
syn region vimSubstEnd contained oneline start="."lc=1 skip="\(\\\\\)*\\/" end="/" contains=vimSubstPat,vimSubstTwoBS,vimNotation
syn region vimSubst oneline start=":\=s?.\{-}" skip="\(\\\\\)*\\?" end="?" contains=vimPatSep,vimSubstTwoBS,vimSubstRange,vimNotation nextgroup=vimSubstEnd
syn region vimSubstEnd contained oneline start="."lc=1 skip="\(\\\\\)*\\?" end="?" contains=vimSubstPat,vimSubstTwoBS,vimNotation
syn region vimSubstRange contained oneline start="\[" skip="\(\\\\\)*\\]" end="]"
syn match vimSubstPat contained "\\\d"
syn match vimSubstTwoBS contained "\\\\"
" Marks, Registers, Addresses, Filters
syn match vimMark "[!,:]'[a-zA-Z0-9]"lc=1
syn match vimMark "'[a-zA-Z0-9][,!]"me=e-1
syn match vimMark "'[<>][,!]"me=e-1
syn match vimMark "[^a-zA-Z]norm\s'[a-zA-Z0-9]"lc=6
syn match vimMark "[^a-zA-Z]normal\s'[a-zA-Z0-9]"lc=8
syn match vimPlainMark "'[a-zA-Z0-9]" contained
syn match vimRegister '[^(,;]"[a-zA-Z0-9\-:.%#*=][^a-zA-Z_"]'lc=1
syn match vimRegister '[^a-zA-Z]norm\s"[a-zA-Z0-9]'lc=6
syn match vimRegister '[^a-zA-Z]normal\s"[a-zA-Z0-9]'lc=8
syn match vimPlainRegister '"[a-zA-Z0-9\-:.%#*=]' contained
syn match vimAddress ",\."lc=1
syn match vimAddress "[:|][%.]"lc=1
syn match vimAddress "<Bar>%"lc=5
syn match vimFilter ":\s*!"ms=e
syn match vimFilter "[^a-zA-Z]!"lc=1
" Complex repeats (:h complex-repeat)
syn match vimCmplxRepeat '[^a-zA-Z_/\\]q[0-9a-zA-Z"]'lc=1
syn match vimCmplxRepeat '@[0-9a-z".=@:]'
" High Priority Comments: beginning of line with optional spaces then "
syn match vimComment +^\s*".*$+ contains=vimTodo
" Set command and associated set-options (vimOptions) with comment
syn region vimSet matchgroup=vimCommand start="\s*set\>" end="|\|$" keepend contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString
syn region vimSetEqual contained start="=" skip="\(\\\\\)*\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar
syn region vimSetString contained start=+="+hs=s+1 skip=+\(\\\\\)\\"+ end=+"+ contains=vimCtrlChar
" Autocmd
syn cluster vimAutoCmdCluster contains=vimAutoCmdOpt,vimAutoEvent,vimComment,vimFilter,vimAuHighlight,vimIsCommand,vimIsCommand2,vimNotation,vimSet,vimSpecFile,vimString,vimAuSyntax
syn match vimIsCommand2 contained transparent "[ \t<Bar>][a-zA-Z_]\+"lc=1 contains=vimCommand
syn keyword vimAutoCmdOpt contained nested
syn region vimAutoCmd matchgroup=vimAutoSet start=+^\s*\(autocmd\|au\|doautocmd\|doau\)\>+ end="$" keepend contains=@vimAutoCmdCluster
syn region vimAutoCmd matchgroup=vimAutoSet start=+^\s*\(doautoa\|doautoall\)\>+ end="$" keepend contains=@vimAutoCmdCluster
" Syntax
"=======
syn match vimGroupList contained "@\=[^ \t,]*" contains=vimGroupSpecial,vimPatSep
syn match vimGroupList contained "@\=[^ \t,]*," nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
syn keyword vimGroupSpecial contained ALL ALLBUT
syn match vimSynError contained "\i\+"
syn match vimSynError contained "\i\+=" nextgroup=vimGroupList
syn match vimSynContains contained "contains=" nextgroup=vimGroupList
syn match vimSynNextgroup contained "nextgroup=" nextgroup=vimGroupList
syn match vimSyntax "^\s*\(syntax\|synta\|synt\|syn\|sy\)" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
syn match vimSyntax "[:|]\s*\(syntax\|synta\|synt\|syn\|sy\)" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
syn match vimAuSyntax contained "\s+\(syntax\|synta\|synt\|syn\|sy\)" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
" Syntax: case
syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError
syn match vimSynCaseError contained "\i\+"
syn keyword vimSynCase contained ignore match
" Syntax: clear
syn keyword vimSynType contained clear skipwhite nextgroup=vimGroupList
" Syntax: cluster
syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName
syn region vimClusterName contained matchgroup=vimGroupName start="\k\+" skip="\(\\\\\)*\\|" end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
syn match vimGroupAdd contained "add=" nextgroup=vimGroupList
syn match vimGroupRem contained "remove=" nextgroup=vimGroupList
" Syntax: include
syn keyword vimSynType contained include skipwhite nextgroup=vimGroupList
" Syntax: keyword
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
syn region vimSynKeyRegion contained oneline matchgroup=vimGroupName start="\k\+" skip="\(\\\\\)*\\|" end="$\||" contains=vimSynNextgroup,vimSynKeyOpt
syn match vimSynKeyOpt contained "\<\(contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
" Syntax: match
syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion
syn region vimSynMatchRegion contained oneline keepend matchgroup=vimGroupName start="\k\+" end="$" contains=vimComment,vimSynContains,vimSynError,vimSynKeyOpt,vimSynNextgroup,vimSynRegPat
" Syntax: off
syn keyword vimSynType contained off
" Syntax: region
syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion
syn region vimSynRegion contained oneline matchgroup=vimGroupName start="\k\+" skip="\(\\\\\)*\\|" end="$\||" contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
syn match vimSynRegOpt contained "\<\(contained\|transparent\|skipempty\|skipwhite\|skipnl\|oneline\|keepend\)\>"
syn match vimSynReg contained "\(start\|skip\|end\)="he=e-1 nextgroup=vimSynRegPat
syn match vimSynMtchGrp contained "matchgroup="
syn region vimSynRegPat contained oneline start="!" skip="\(\\\\\)*\\!" end="!" contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start="%" skip="\(\\\\\)*\\-" end="%" contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start="'" skip="\(\\\\\)*\\'" end="'" contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start="+" skip="\(\\\\\)*\\+" end="+" contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start="@" skip="\(\\\\\)*\\@" end="@" contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start='"' skip='\(\\\\\)*\\"' end='"' contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start='/' skip='\(\\\\\)*\\/' end='/' contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start=',' skip='\(\\\\\)*\\,' end=',' contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn region vimSynRegPat contained oneline start='\$' skip='\(\\\\\)*\\\$' end='\$' contains=vimPatSep,vimNotPatSep,vimSynPatRange nextgroup=vimSynPatMod
syn match vimSynPatMod contained "\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+][0-9]\+\)\="
syn match vimSynPatMod contained "\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+][0-9]\+\)\=," nextgroup=vimSynPatMod
syn match vimSynPatMod contained "lc=[0-9]"
syn match vimSynPatMod contained "lc=[0-9]," nextgroup=vimSynPatMod
syn region vimSynPatRange contained oneline start="\[" skip="\(\\\\\)*\\]" end="]"
" Syntax: sync
syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinecont
syn match vimSyncError contained "\i\+"
syn keyword vimSyncC contained ccomment clear
syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName
syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat
syn match vimSyncLines contained "\(minlines\|maxlines\|lines\)=" nextgroup=vimNumber
syn match vimSyncGroupName contained "\k\+" skipwhite nextgroup=vimSyncKey
syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=vimSyncGroup
syn match vimSyncGroup contained "\k\+" skipwhite nextgroup=vimSynRegPat,vimSyncNone
syn keyword vimSyncNone contained NONE
" Additional IsCommand stuff, here by reasons of precedence
" ====================
syn match vimIsCommand "<Bar>\s*[a-zA-Z]\+" transparent contains=vimCommand,vimNotation
" Highlighting
" ============
syn match vimHighlight "^\s*\(highlight\|highligh\|highlig\|highli\|highl\|high\|hig\|hi\)" skipwhite nextgroup=vimHiLink,vimHiClear,vimHiKeyList,vimComment
syn match vimHighlight "[:|]\s*\(highlight\|highligh\|highlig\|highli\|highl\|high\|hig\|hi\)" skipwhite nextgroup=vimHiLink,vimHiClear,vimHiKeyList,vimComment
syn match vimAuHighlight contained "\s+\(highlight\|highligh\|highlig\|highli\|highl\|high\|hig\|hi\)" skipwhite nextgroup=vimHiLink,vimHiClear,vimHiKeyList,vimComment
syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib
syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList,vimHiAttrib
syn case ignore
syn keyword vimHiCtermColor contained black darkcyan darkred lightcyan lightred
syn keyword vimHiCtermColor contained blue darkgray gray lightgray magenta
syn keyword vimHiCtermColor contained brown darkgreen green lightgreen red
syn keyword vimHiCtermColor contained cyan darkgrey grey lightgrey white
syn keyword vimHiCtermColor contained darkBlue darkmagenta lightblue lightmagenta yellow
syn case match
syn match vimHiFontname contained "[a-zA-z\-*]\+"
syn match vimHiGuiFontname contained "'[a-zA-z\-* ]\+'"
syn match vimHiGuiRgb contained "#\x\{6}"
syn match vimHiCtermError contained "[^0-9]\i*"
" Highlighting: hi group key=arg ...
syn region vimHiKeyList contained oneline start="\i\+" skip="\(\\\\\)*\\|" end="$\||" contains=vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError
syn match vimHiKeyError contained "\i\+="he=e-1
syn match vimHiTerm contained "term="he=e-1 nextgroup=vimHiAttribList
syn match vimHiStartStop contained "\(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
syn match vimHiCTerm contained "cterm="he=e-1 nextgroup=vimHiAttribList
syn match vimHiCtermFgBg contained "cterm[fb]g="he=e-1 nextgroup=vimNumber,vimHiCtermColor,vimHiCtermError
syn match vimHiGui contained "gui="he=e-1 nextgroup=vimHiAttribList
syn match vimHiGuiFont contained "font="he=e-1 nextgroup=vimHiFontname
syn match vimHiGuiFgBg contained "gui[fb]g="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb
syn match vimHiTermcap contained "\S\+" contains=vimNotation
" Highlight: clear
syn keyword vimHiClear contained clear nextgroup=vimHiGroup
" Highlight: link
syn region vimHiLink contained oneline matchgroup=vimCommand start="link" end="$" contains=vimHiGroup,vimGroup
" Angle-Bracket Notation (tnx to Michael Geddes)
" ======================
syn case ignore
syn match vimNotation "<\([scam]-\)\{0,4}\(f[0-9]\{1,2}\|\S\|cr\|lf\|linefeed\|return\|del\(ete\)\ =\|bs\|backspace\|tab\|esc\|right\|left\|Help\|Undo\|Insert\|Ins\|k\=Home\|k \=End\|kPlus\|kMinus\|kDivide\|kMultiply\|kEnter\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
syn match vimNotation "<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\|drag\|release\)>" contains=vimBracket
syn match vimNotation "<\(nul\|bar\|bslash\|lt\)>" contains=vimBracket
syn match vimNotation '<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket
syn match vimBracket contained "[<>]"
syn match vimBracket contained "[<>]"
syn case match
" Control Characters
" ==================
syn match vimCtrlChar "[--]"
" Highlighting Settings
" ====================
if !exists("did_vim_syntax_inits")
let did_vim_syntax_inits = 1
" The default methods for highlighting. Can be overridden later