vim.vim (142382B)
1 " Vim syntax file 2 3 " ############################################################################# 4 " ############################################################################# 5 " Note: Be careful when merging the upstream version of this file. 6 " Much of this is generated by scripts/genvimvim.lua 7 " (installs to $VIMRUNTIME/syntax/vim/generated.vim) 8 " ############################################################################# 9 " ############################################################################# 10 11 " Quit when a syntax file was already loaded {{{1 12 if exists("b:current_syntax") 13 finish 14 endif 15 let s:keepcpo = &cpo 16 set cpo&vim 17 18 " Feature testing {{{1 19 20 let s:vim9script = "\n" .. getline(1, 32)->join("\n") =~# '\n\s*vim9\%[script]\>' 21 22 function s:has(feature) 23 return has(a:feature) || index(get(g:, "vimsyn_vim_features", []), a:feature) != -1 24 endfunction 25 26 " Automatically generated keyword lists: {{{1 27 28 " vimTodo: contains common special-notices for comments {{{2 29 " Use the vimCommentGroup cluster to add your own. 30 syn keyword vimTodo contained COMBAK FIXME TODO XXX 31 syn cluster vimCommentGroup contains=vimTodo,@Spell 32 33 " Lower priority :syn-match to allow for :command/function() distinction 34 " :chdir is handled specially elsewhere 35 syn match vimCommand "\<co\%[py]\>" nextgroup=vimBang 36 syn match vimCommand "\<d\%[elete]\>" nextgroup=vimBang 37 syn match vimCommand "\<j\%[oin]\>" nextgroup=vimBang 38 syn match vimCommand "\<sp\%[lit]\>" nextgroup=vimBang 39 syn match vimCommand "\<sw\%[apname]\>" nextgroup=vimBang 40 41 " GEN_SYN_VIM: vimCommand modifier, START_STR='syn keyword vimCommandModifier', END_STR='skipwhite nextgroup=vimCommandModifierBang,@vimCmdList' 42 syn keyword vimCommandModifier 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 nextgroup=vimCommandModifierBang,@vimCmdList 43 " :filter is handled specially elsewhere 44 syn match vimCommandModifierBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList 45 46 " Lower priority :syn-match to allow for :command/function() distinction 47 syn match vimCommand "\<bro\%[wse]\>" skipwhite nextgroup=vimCommandModifierBang,@vimCmdList 48 syn match vimCommand "\<conf\%[irm]\>" skipwhite nextgroup=vimCommandModifierBang,@vimCmdList 49 50 " Special and plugin vim commands {{{2 51 syn match vimCommand contained "\<z[-+^.=]\=\>" 52 syn keyword vimOnlyCommand contained fix[del] op[en] sh[ell] P[rint] 53 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 54 55 " Vim-specific options {{{2 56 syn keyword vimOnlyOption contained biosk bioskey cp compatible consk conskey cm cryptmethod edcompatible guipty key macatsui mzq mzquantum osfiletype oft renderoptions rop st shelltype sn shortname tenc termencoding ta textauto tx textmode tf ttyfast ttym ttymouse tbi ttybuiltin wiv weirdinvert 57 " Turn-off setting variants 58 syn keyword vimOnlyOption contained nobiosk nobioskey noconsk noconskey nocp nocompatible noguipty nomacatsui nosn noshortname nota notextauto notx notextmode notf nottyfast notbi nottybuiltin nowiv noweirdinvert 59 " Invertible setting variants 60 syn keyword vimOnlyOption contained invbiosk invbioskey invconsk invconskey invcp invcompatible invguipty invmacatsui invsn invshortname invta invtextauto invtx invtextmode invtf invttyfast invtbi invttybuiltin invwiv invweirdinvert 61 " termcap codes (which can also be set) {{{2 62 " GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod' 63 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 skipwhite nextgroup=vimSetEqual,vimSetMod 64 " term key codes 65 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 66 syn match vimTermOption contained "t_%1" 67 syn match vimTermOption contained "t_#2" 68 syn match vimTermOption contained "t_#4" 69 syn match vimTermOption contained "t_@7" 70 syn match vimTermOption contained "t_*7" 71 syn match vimTermOption contained "t_&8" 72 syn match vimTermOption contained "t_%i" 73 syn match vimTermOption contained "t_k;" 74 75 " vimOptions: These are the variable names {{{2 76 " GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' 77 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 78 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 79 syn match vimOptionVarName contained "t_%1" 80 syn match vimOptionVarName contained "t_#2" 81 syn match vimOptionVarName contained "t_#4" 82 syn match vimOptionVarName contained "t_@7" 83 syn match vimOptionVarName contained "t_*7" 84 syn match vimOptionVarName contained "t_&8" 85 syn match vimOptionVarName contained "t_%i" 86 syn match vimOptionVarName contained "t_k;" 87 88 " unsupported settings: these are supported by vi but don't do anything in vim {{{2 89 " GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR='' 90 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 91 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 92 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 93 94 " AutoCmd Events {{{2 95 syn case ignore 96 97 syn keyword vimAutoEvent contained User skipwhite nextgroup=vimUserAutoEvent 98 syn match vimUserAutoEvent contained "\<\h\w*\>" skipwhite nextgroup=vimUserAutoEventSep,vimAutocmdMod,vimAutocmdBlock 99 100 " Highlight commonly used Groupnames {{{2 101 " GEN_SYN_VIM: vimGroup, START_STR='syn keyword vimGroup contained', END_STR='' 102 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 Removed Repeat Special SpecialChar SpecialComment Statement StorageClass String Structure Tag Todo Type Typedef Underlined 103 104 " Default highlighting groups {{{2 105 " GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR='' 106 syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill Cursor lCursor QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PreInsert Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC 107 syn keyword vimHLGroup contained CursorIM ComplMatchIns LineNrAbove LineNrBelow MsgArea User1 User2 User3 User4 User5 User6 User7 User8 User9 108 syn match vimHLGroup contained "\<Conceal\>" 109 syn keyword vimOnlyHLGroup contained Menu PopupSelected MessageWindow PopupNotification Scrollbar Terminal TitleBar TitleBarNC ToolbarButton ToolbarLine Tooltip VisualNOS 110 syn keyword nvimHLGroup contained FloatBorder FloatFooter FloatTitle MsgSeparator NormalFloat NormalNC Substitute TermCursor VisualNC Whitespace WinBar WinBarNC WinSeparator 111 "}}}2 112 syn case match 113 114 " Special Vim Highlighting (not automatic) {{{1 115 116 " Set up commands for this syntax highlighting file {{{2 117 118 com! -nargs=* Vim9 execute <q-args> s:vim9script ? "" : "contained" 119 com! -nargs=* VimL execute <q-args> s:vim9script ? "contained" : "" 120 121 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[acefhiHlmpPrt]' 122 if g:vimsyn_folding =~# 'a' 123 com! -nargs=* VimFolda <args> fold 124 else 125 com! -nargs=* VimFolda <args> 126 endif 127 if g:vimsyn_folding =~# 'c' 128 com! -nargs=* VimFoldc <args> fold 129 else 130 com! -nargs=* VimFoldc <args> 131 endif 132 if g:vimsyn_folding =~# 'e' 133 com! -nargs=* VimFolde <args> fold 134 else 135 com! -nargs=* VimFolde <args> 136 endif 137 if g:vimsyn_folding =~# 'f' 138 com! -nargs=* VimFoldf <args> fold 139 else 140 com! -nargs=* VimFoldf <args> 141 endif 142 if g:vimsyn_folding =~# 'h' 143 com! -nargs=* VimFoldh <args> fold 144 else 145 com! -nargs=* VimFoldh <args> 146 endif 147 if g:vimsyn_folding =~# 'H' 148 com! -nargs=* VimFoldH <args> fold 149 else 150 com! -nargs=* VimFoldH <args> 151 endif 152 if g:vimsyn_folding =~# 'i' 153 com! -nargs=* VimFoldi <args> fold 154 else 155 com! -nargs=* VimFoldi <args> 156 endif 157 if g:vimsyn_folding =~# 'l' 158 com! -nargs=* VimFoldl <args> fold 159 else 160 com! -nargs=* VimFoldl <args> 161 endif 162 if g:vimsyn_folding =~# 'm' 163 com! -nargs=* VimFoldm <args> fold 164 else 165 com! -nargs=* VimFoldm <args> 166 endif 167 if g:vimsyn_folding =~# 'p' 168 com! -nargs=* VimFoldp <args> fold 169 else 170 com! -nargs=* VimFoldp <args> 171 endif 172 if g:vimsyn_folding =~# 'P' 173 com! -nargs=* VimFoldP <args> fold 174 else 175 com! -nargs=* VimFoldP <args> 176 endif 177 if g:vimsyn_folding =~# 'r' 178 com! -nargs=* VimFoldr <args> fold 179 else 180 com! -nargs=* VimFoldr <args> 181 endif 182 if g:vimsyn_folding =~# 't' 183 com! -nargs=* VimFoldt <args> fold 184 else 185 com! -nargs=* VimFoldt <args> 186 endif 187 else 188 com! -nargs=* VimFolda <args> 189 com! -nargs=* VimFoldc <args> 190 com! -nargs=* VimFolde <args> 191 com! -nargs=* VimFoldf <args> 192 com! -nargs=* VimFoldi <args> 193 com! -nargs=* VimFoldh <args> 194 com! -nargs=* VimFoldH <args> 195 com! -nargs=* VimFoldl <args> 196 com! -nargs=* VimFoldm <args> 197 com! -nargs=* VimFoldp <args> 198 com! -nargs=* VimFoldP <args> 199 com! -nargs=* VimFoldr <args> 200 com! -nargs=* VimFoldt <args> 201 endif 202 203 " Deprecated variable options {{{2 204 if exists("g:vim_minlines") 205 let g:vimsyn_minlines= g:vim_minlines 206 endif 207 if exists("g:vim_maxlines") 208 let g:vimsyn_maxlines= g:vim_maxlines 209 endif 210 if exists("g:vimsyntax_noerror") 211 let g:vimsyn_noerror= g:vimsyntax_noerror 212 endif 213 214 " Nulls {{{2 215 " ===== 216 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 217 218 " Booleans {{{2 219 " ======== 220 Vim9 syn keyword vim9Boolean true false 221 222 " Numbers {{{2 223 " ======= 224 syn case ignore 225 syn match vimNumber "\<\d\+\%('\d\+\)*" skipwhite nextgroup=@vimComment,vimSubscript,vimGlobal,vimSubst1 226 syn match vimNumber "\<\d\+\%('\d\+\)*\.\d\+\%(e[+-]\=\d\+\)\=" skipwhite nextgroup=@vimComment 227 syn match vimNumber "\<0b[01]\+\%('[01]\+\)*" skipwhite nextgroup=@vimComment,vimSubscript 228 syn match vimNumber "\<0o\=\o\+\%('\o\+\)*" skipwhite nextgroup=@vimComment,vimSubscript 229 syn match vimNumber "\<0x\x\+\%('\x\+\)*" skipwhite nextgroup=@vimComment,vimSubscript 230 syn match vimNumber '\<0z\>' skipwhite nextgroup=@vimComment 231 syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vimComment,vimSubscript 232 syn case match 233 234 " All vimCommands are contained by vimIsCommand. {{{2 235 syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimBreakadd,vimBreakdel,vimBreaklist,vimCall,vimCatch,vimCd,vimCommandModifier,vimConst,vimDoautocmd,vimDebug,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,vimDoCommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelp,vimHelpgrep,vimHighlight,vimHistory,vimImport,vimLanguage,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimPrompt,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl 236 syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var 237 syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,@vimFunc 238 syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1 239 syn match vimCount contained "\d\+" 240 syn match vimIsCommand "\<\h\w*\>" nextgroup=vimBang contains=vimCommand 241 syn match vimBang contained "!" 242 syn match vimWhitespace contained "\s\+" 243 244 syn region vimSubscript contained matchgroup=vimSubscriptBracket start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList 245 246 syn match vimVar contained "\<\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vim9Super,vim9This 247 syn match vimVar "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope 248 syn match vimVar "\<a:\%(000\|1\=[0-9]\|20\)\>" nextgroup=vimSubscript contains=vimVarScope 249 syn match vimFBVar contained "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>" nextgroup=vimSubscript contains=vimVarScope 250 251 " match the scope prefix independently of the retrofitted scope dictionary 252 syn match vimVarScope contained "\<[bwglstav]:" 253 syn match vimVimVar contained "\<[bwglstav]:\%(\h\|\d\)\@!" nextgroup=vimSubscript 254 255 syn match vimVarNameError contained "\<\h\w*\>" 256 syn match vimVimVar "\<v:" nextgroup=vimSubscript,vimVimVarName,vimVarNameError 257 syn match vimOptionVar "&\%([lg]:\)\=" nextgroup=vimSubscript,vimOptionVarName,vimVarNameError 258 syn cluster vimSpecialVar contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar 259 260 Vim9 syn match vimVar contained "\<\h\w*\ze<" nextgroup=vim9TypeArgs 261 262 Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\==\%(\s\|$\)" 263 Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.=\%(\s\|$\)" 264 Vim9 syn match vim9LhsVariable "\s\=\%([bwgt]:\)\=\h[a-zA-Z0-9#_]*\ze\s\+=<<\s" skipwhite nextgroup=vimLetHeredoc contains=vimVarScope 265 Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript 266 Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This 267 Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This 268 269 Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar 270 Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar 271 Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar 272 273 Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\==" 274 275 syn cluster vimExprList contains=@vimSpecialVar,@vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList 276 syn cluster vim9ExprList contains=vim9Boolean,vim9LambdaParams,vim9Null 277 278 " Insertions And Appends: insert append {{{2 279 " (buftype != nofile test avoids having append, change, insert show up in the command window) 280 " ======================= 281 if &buftype != 'nofile' 282 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=a\%[ppend]$" matchgroup=vimCommand end="^\.$" extend 283 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=c\%[hange]$" matchgroup=vimCommand end="^\.$" extend 284 syn region vimInsert matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i\%[nsert]$" matchgroup=vimCommand end="^\.$" extend 285 endif 286 287 " Behave! {{{2 288 " ======= 289 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror") 290 syn match vimBehaveError contained "[^ ]\+" 291 endif 292 syn match vimBehave "\<be\%[have]\>" nextgroup=vimBehaveBang,vimBehaveModel,vimBehaveError skipwhite 293 syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite 294 syn keyword vimBehaveModel contained mswin xterm 295 296 " Break* commands {{{2 297 " =============== 298 syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction 299 syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename 300 syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep 301 syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList 302 303 syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep 304 syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep 305 306 syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr 307 308 syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep 309 syn match vimBreakpointFilename contained "\<\%(\*\|\f\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep 310 syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction 311 syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename 312 313 syn keyword vimBreakadd breaka[dd] skipwhite nextgroup=@vimBreakpointArg 314 syn keyword vimBreakdel breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob 315 syn keyword vimBreaklist breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep 316 317 " Call {{{2 318 " ==== 319 syn match vimCall "\<call\=\>" skipwhite nextgroup=vimVar,@vimFunc 320 321 " Cd: {{{2 322 " == 323 " GEN_SYN_VIM: vimCommand cd, START_STR='syn keyword vimCd', END_STR='skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep' 324 syn keyword vimCd cd lc[d] lch[dir] tc[d] tch[dir] skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep 325 syn match vimCd "\<chd\%[ir]\>" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep 326 syn region vimCdArg contained 327 \ start=+["#|]\@!\S+ 328 \ end="\ze\s*$" 329 \ end=+\ze\s*\\\@1<!["#|]+ 330 \ skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep 331 \ contains=vimSpecfile,@vimWildCard 332 \ oneline 333 334 syn match vimCdBang contained "\a\@1<=!" skipwhite nextgroup=vimCdArg,vimComment,vim9Comment,vimCmdSep 335 336 " Debug {{{2 337 " ===== 338 syn keyword vimDebug deb[ug] skipwhite nextgroup=@vimCmdList 339 340 " Debuggreedy {{{2 341 " =========== 342 " TODO: special-cased until generalised range/count support is implemented 343 syn match vimDebuggreedy "\<0\=debugg\%[reedy]\>" contains=vimCount 344 345 " Defer {{{2 346 " ===== 347 syn match vimDefer "\<defer\=\>" skipwhite nextgroup=@vimFunc,vim9LambdaParams 348 349 " *Do commands {{{2 350 " ============ 351 syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList 352 353 syn keyword vimDoCommand argdo bufd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList 354 syn keyword vimDoCommand tabd[o] wind[o] skipwhite nextgroup=@vimCmdList 355 syn keyword vimDoCommand cdo cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList 356 syn keyword vimDoCommand ld[o] lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList 357 syn keyword vimDoCommand foldd[oopen] folddoc[losed] skipwhite nextgroup=@vimCmdList 358 359 " Exception Handling {{{2 360 syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList 361 syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern 362 syn region vimCatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" skip="\\\\\|\\\z1" end="\z1" contains=@vimSubstList oneline 363 364 " Export {{{2 365 " ====== 366 if s:vim9script 367 syn keyword vim9Export export skipwhite nextgroup=vim9Abstract,vim9ClassBody,vim9Const,vim9Def,vim9EnumBody,vim9Final,vim9InterfaceBody,vim9Type,vim9Var 368 endif 369 370 " Filetypes {{{2 371 " ========= 372 syn match vimFiletype "\<filet\%[ype]\(\s\+\I\i*\)*" skipwhite contains=vimFTCmd,vimFTOption,vimFTError 373 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError") 374 syn match vimFTError contained "\I\i*" 375 endif 376 syn keyword vimFTCmd contained filet[ype] 377 syn keyword vimFTOption contained detect indent off on plugin 378 379 " History {{{2 380 " ======= 381 " TODO: handle Vim9 "history" variable assignment (like :wincmd, but a common variable name) 382 syn keyword vimHistory his[tory] skipwhite nextgroup=vimHistoryName,vimHistoryRange,vimCmdSep,vimComment,vim9Comment 383 syn keyword vimHistoryName contained c[md] s[earch] e[xpr] i[nput] d[ebug] a[ll] skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment 384 syn match vimHistoryName contained "[:/?=@>]" skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment 385 syn match vimHistoryRange contained "-\=\<\d\+\>\%(\s*,\)\=" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 386 syn match vimHistoryRange contained ",\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 387 syn match vimHistoryRange contained "-\=\<\d\+\s*,\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 388 389 " Import {{{2 390 " ====== 391 syn keyword vimImportAutoload contained autoload skipwhite nextgroup=vimImportFilename 392 if s:vim9script 393 syn region vimImportFilename contained 394 \ start="\S" 395 \ skip=+\%#=1 396 "\ continuation operators at SOL 397 \\n\%(\s*#.*\n\)*\s*\%([[:punct:]]\+\&[^#"'(]\) 398 \\| 399 "\ continuation operators at EOL 400 \\%(\%([[:punct:]]\+\&[^#"')]\)\s*\%(#.*\)\=\)\@<=$ 401 \\| 402 \\n\%(\s*#.*\n\)*\s*as\s 403 \\| 404 \\%(^\s*#.*\)\@<=$ 405 \\| 406 \\n\s*\%(\\\|#\\ \) 407 \+ 408 \ matchgroup=vimCommand 409 \ end="\s\+\zsas\ze\s\+\h" 410 \ matchgroup=NONE 411 \ end="$" 412 \ skipwhite nextgroup=vimImportName 413 \ contains=@vim9Continue,@vimExprList,vim9Comment 414 \ transparent 415 else 416 syn region vimImportFilename contained 417 \ start="\S" 418 \ skip=+\n\s*\%(\\\|"\\ \)+ 419 \ matchgroup=vimCommand 420 \ end="\s\+\zsas\ze\s\+\h" 421 \ matchgroup=NONE 422 \ end="$" 423 \ skipwhite nextgroup=vimImportName 424 \ contains=@vimContinue,@vimExprList 425 \ transparent 426 endif 427 syn match vimImportName contained "\%(\<as\s\+\)\@<=\h\w*\>" skipwhite nextgroup=@vimComment 428 syn match vimImport "\<imp\%[ort]\>" skipwhite nextgroup=vimImportAutoload,vimImportFilename 429 430 " Language {{{2 431 " ======== 432 syn keyword vimLanguage lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment 433 syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName 434 435 " [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX" 436 syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment 437 syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment 438 syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved 439 440 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 441 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. 442 syn cluster vimAugroupList contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue 443 444 " define 445 VimFolda syn region vimAugroup 446 \ start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" 447 \ matchgroup=vimAugroupKey 448 \ end="\<aug\%[roup]\ze\s\+[eE][nN][dD]\s*\%($\|[|"#]\)" 449 \ skipwhite nextgroup=vimAugroupEnd 450 \ contains=vimAutocmd,@vimAugroupList,vimAugroupkey 451 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror") 452 syn match vimAugroupError "\<aug\%[roup]\s\+[eE][nN][dD]\ze\s*\%($\|[|"#]\)" 453 endif 454 455 " TODO: Vim9 comment 456 syn match vimAugroupName contained "\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" 457 \ skipwhite nextgroup=vimCmdSep,vimComment 458 syn match vimAugroupEnd contained "\c\<END\>" skipwhite nextgroup=vimCmdSep,vimComment 459 syn match vimAugroupBang contained "\a\@1<=!" skipwhite nextgroup=vimAugroupName 460 syn keyword vimAugroupKey contained aug[roup] skipwhite nextgroup=vimAugroupBang,vimAugroupName,vimAugroupEnd 461 462 " remove 463 syn match vimAugroup "\<aug\%[roup]!" skipwhite nextgroup=vimAugroupName contains=vimAugroupKey,vimAugroupBang 464 465 " list 466 VimL syn match vimAugroup "\<aug\%[roup]\>\ze\s*\%(["|]\|$\)" skipwhite nextgroup=vimCmdSep,vimComment contains=vimAugroupKey 467 Vim9 syn match vimAugroup "\<aug\%[roup]\>\ze\s*\%([#|]\|$\)" skipwhite nextgroup=vimCmdSep,vim9Comment contains=vimAugroupKey 468 469 " Operators: {{{2 470 " ========= 471 syn cluster vimOperGroup contains=@vimContinue,@vimExprList,vim9Comment,vim9LineComment,vimContinueString 472 syn match vimOper "\a\@<!!" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile 473 syn match vimOper "||\|&&\|[-+*/%.]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile 474 syn match vimOper "?" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString 475 " distinguish ternary : from ex-colon 476 syn match vimOper "\s\@1<=:\ze\s\|\s\@1<=:$" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString 477 syn match vimOper "??" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString 478 syn match vimOper "=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile 479 syn match vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\=" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile 480 syn match vimOper "\<is\%(not\)\=\>" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile 481 syn match vimOper "\<is\%(not\)\=[?#]" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimContinueString,vimSpecFile 482 syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup nextgroup=vimSubscript 483 syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar 484 syn region vimOperParen contained matchgroup=vimSep start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar 485 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror") 486 syn match vimOperError ")" 487 endif 488 489 syn match vimOperContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList contains=vimWhitespace 490 syn match vimOperContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList contains=vimWhitespace 491 syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment 492 493 " Lambda Expressions: {{{2 494 " ================== 495 syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList 496 syn region vimLambda contained 497 \ matchgroup=vimLambdaBrace 498 \ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+ 499 \ skip=+\n\s*\%(\\\|"\\ \)+ 500 \ end="}" end="$" 501 \ contains=@vimContinue,@vimExprList,vimLambdaParams 502 syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFunctionParam 503 504 syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment 505 syn match vim9LambdaParen contained "[()]" 506 syn match vim9LambdaParams contained 507 \ "(\%(\<func(\|[^(]\)*\%(\n\s*\\\%(\<func(\|[^(]\)*\|\n\s*#\\ .*\)*\ze\s\+=>" 508 \ skipwhite nextgroup=vim9LambdaOperator 509 \ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType 510 syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent 511 syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList 512 513 syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment 514 515 " Functions: Tag is provided for those who wish to highlight tagged functions {{{2 516 " ========= 517 syn cluster vimFunctionBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFunctionFold,vimDefFold,vimCmdSep 518 syn cluster vimFunctionBodyList contains=@vimFunctionBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch 519 syn cluster vimDefBodyList contains=@vimFunctionBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar,@vim9Func 520 521 syn region vimFunctionPattern contained 522 \ matchgroup=vimOper 523 \ start="/" 524 \ end="$" 525 \ contains=@vimSubstList 526 527 syn match vimFunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName 528 syn match vimDefBang contained "\a\@1<=!" skipwhite nextgroup=vimDefName 529 syn match vimFunctionSID contained "\c<sid>" 530 syn match vimFunctionScope contained "\<[bwglstav]:" 531 syn match vimFunctionName contained 532 \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+" 533 \ skipwhite nextgroup=vimFunctionParams,vimCmdSep,vimComment,vim9Comment 534 \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag 535 syn match vimDefName contained 536 \ "\%(<[sS][iI][dD]>\|[bwglstav]:\)\=\%([[:alnum:]_#.]\+\|{.\{-1,}}\)\+" 537 \ nextgroup=vimDefTypeParams,vimDefParams,vimCmdSep,vimComment,vim9Comment 538 \ contains=vimFunctionError,vimFunctionScope,vimFunctionSID,Tag 539 540 syn match vimFunction "\<fu\%[nction]\>" skipwhite nextgroup=vimFunctionBang,vimFunctionName,vimFunctionPattern,vimCmdSep,vimComment 541 syn match vimDef "\<def\>" skipwhite nextgroup=vimDefBang,vimDefName,vimFunctionPattern,vimCmdSep,vimComment 542 543 syn region vimFunctionComment contained 544 \ start=+".*+ 545 \ skip=+\n\s*\%(\\\|"\\ \)+ 546 \ end="$" 547 \ skipwhite skipempty nextgroup=vimFunctionBody,vimEndfunction 548 syn region vimDefComment contained 549 \ start="#.*" 550 \ skip=+\n\s*\%(\\\|#\\ \)+ 551 \ end="$" 552 \ skipwhite skipempty nextgroup=vimDefBody,vimEnddef 553 554 syn region vimFunctionParams contained 555 \ matchgroup=Delimiter 556 \ start="(" 557 \ skip=+\n\s*\%(\\\|"\\ \)+ 558 \ end=")" 559 \ skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError 560 \ contains=vimFunctionParam,vimOperParen,@vimContinue 561 syn region vimDefParams contained 562 \ matchgroup=Delimiter 563 \ start="(" 564 \ end=")" 565 \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimReturnType,vimCommentError 566 \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals,vimOperParen 567 syn region vimDefTypeParams contained 568 \ matchgroup=Delimiter 569 \ start="<" 570 \ end=">" 571 \ nextgroup=vimDefParams 572 \ contains=vim9DefTypeParam 573 syn match vimFunctionParam contained "\<\h\w*\>\|\.\.\." skipwhite nextgroup=vimFunctionParamEquals 574 syn match vimDefParam contained "\<\h\w*\>" skipwhite nextgroup=vimParamType,vimFunctionParamEquals 575 syn match vim9DefTypeParam contained "\<\u\w*\>" 576 577 syn match vimFunctionParamEquals contained "=" skipwhite nextgroup=@vimExprList 578 syn match vimFunctionMod contained "\<\%(abort\|closure\|dict\|range\)\>" skipwhite skipempty nextgroup=vimFunctionBody,vimFunctionComment,vimEndfunction,vimFunctionMod,vim9CommentError 579 580 syn region vimFunctionBody contained 581 \ start="^." 582 \ matchgroup=vimCommand 583 \ end="\<endfu\%[nction]\>" 584 \ skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError 585 \ contains=@vimFunctionBodyList 586 syn region vimDefBody contained 587 \ start="^." 588 \ matchgroup=vimCommand 589 \ end="\<enddef\>" 590 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError 591 \ contains=@vimDefBodyList 592 593 syn match vimEndfunction "\<endf\%[unction]\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9CommentError 594 syn match vimEnddef "\<enddef\>" skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError 595 596 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f' 597 syn region vimFunctionFold 598 \ start="\<fu\%[nction]!" 599 "\ assume no dict literal in curly-brace name expressions 600 \ start="\<fu\%[nction]\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+\s*(" 601 \ end="^\s*:\=\s*endf\%[unction]\>" 602 \ contains=vimFunction 603 \ extend fold keepend transparent 604 syn region vimDefFold 605 \ start="\<def!" 606 "\ assume no dict literal in curly-brace name expressions 607 \ start="\<def\>\s*\%([[:alnum:]_:<>.#]\+\|{.\{-1,}}\)\+[<(]" 608 \ end="^\s*:\=\s*enddef\>" 609 \ contains=vimDef 610 \ extend fold keepend transparent 611 endif 612 613 syn match vimDelfunctionBang contained "\a\@1<=!" skipwhite nextgroup=vimFunctionName 614 syn match vimDelfunction "\<delf\%[unction]\>" skipwhite nextgroup=vimDelfunctionBang,vimFunctionName 615 616 " Types: {{{2 617 " ===== 618 619 syn region vimReturnType contained 620 \ start=":\%(\s\|\n\)\@=" 621 \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + 622 \ end="$" 623 \ matchgroup=vim9Comment 624 "\ allow for legacy script tail comment error 625 \ end="\ze[#"]" 626 \ skipwhite skipempty nextgroup=vimDefBody,vimDefComment,vimEnddef,vimCommentError 627 \ contains=@vim9Continue,@vimType 628 \ transparent 629 syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType contains=vimTypeSep 630 631 syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType 632 syn keyword vimType contained blob bool channel float job number string void 633 syn keyword vimTypeAny contained any 634 syn match vimTypeObject contained "\<object<\@=" nextgroup=vimTypeObjectArgs 635 syn region vimTypeObjectArgs contained 636 \ matchgroup=vimTypeObjectBracket 637 \ start="<" 638 \ end=">" 639 \ contains=vimTypeAny,vimTypeObject,vimUserType 640 \ oneline 641 \ transparent 642 syn match vimType contained "\<\%(func\)\>" 643 syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vim9Continue,@vimType transparent 644 syn region vimCompoundType contained matchgroup=vimType start="\<tuple<" end=">" contains=@vim9Continue,@vimType transparent 645 syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent 646 syn match vimUserType contained "\<\%(\h\w*\.\)*\u\w*\>" 647 648 syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType 649 650 " Classes, Enums And Interfaces: {{{2 651 " ============================= 652 653 if s:vim9script 654 655 " Methods {{{3 656 syn match vim9MethodDef contained "\<def\>" skipwhite nextgroup=vim9MethodDefName,vim9ConstructorDefName 657 syn match vim9MethodDefName contained "\<\h\w*\>" nextgroup=vim9MethodDefParams,vim9MethodDefTypeParams contains=@vim9MethodName 658 syn region vim9MethodDefParams contained 659 \ matchgroup=Delimiter start="(" end=")" 660 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vim9MethodDefReturnType,vimCommentError 661 \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals 662 syn region vim9MethodDefTypeParams contained 663 \ matchgroup=Delimiter 664 \ start="<" 665 \ end=">" 666 \ nextgroup=vim9MethodDefParams 667 \ contains=vim9DefTypeParam 668 669 syn match vim9ConstructorDefName contained "\<_\=new\w*\>" 670 \ nextgroup=vim9ConstructorDefParams,vim9ConstuctorDefTypeParams 671 \ contains=@vim9MethodName 672 syn match vim9ConstructorDefParam contained "\<\%(this\.\)\=\h\w*\>" 673 \ skipwhite nextgroup=vimParamType,vimFunctionParamEquals 674 \ contains=vim9This,vimOper 675 syn region vim9ConstructorDefParams contained 676 \ matchgroup=Delimiter start="(" end=")" 677 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError 678 \ contains=vim9ConstructorDefParam,vim9Comment,vimFunctionParamEquals 679 syn region vim9ConstuctorDefTypeParams contained 680 \ matchgroup=Delimiter 681 \ start="<" 682 \ end=">" 683 \ nextgroup=vim9ConstructorDefParams 684 \ contains=vim9DefTypeParam 685 686 syn region vim9MethodDefReturnType contained 687 \ start=":\%(\s\|\n\)\@=" 688 \ skip=+\n\s*\%(\\\|#\\ \)\|^\s*#\\ + 689 \ end="$" 690 \ matchgroup=vim9Comment 691 \ end="\ze#" 692 \ skipwhite skipnl nextgroup=vim9MethodDefBody,vim9MethodDefComment,vimEnddef,vimCommentError 693 \ contains=@vim9Continue,vimType,vimTypeSep 694 \ transparent 695 696 syn region vim9MethodDefComment contained 697 \ start="#.*" 698 \ skip=+\n\s*\%(\\\|#\\ \)+ 699 \ end="$" 700 \ skipwhite skipempty nextgroup=vim9MethodDefBody,vimEnddef 701 702 syn region vim9MethodDefBody contained 703 \ start="^.\=" matchgroup=vimCommand end="\<enddef\>" 704 \ skipwhite nextgroup=vimCmdSep,vim9Comment,vimCommentError 705 \ contains=@vim9MethodDefBodyList 706 707 syn cluster vim9MethodDefBodyList contains=@vimDefBodyList,vim9This,vim9Super 708 709 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror") 710 syn match vim9MethodNameError contained "\<[a-z0-9]\i\>" 711 endif 712 syn match vim9MethodName contained "\<_\=new\w*\>" 713 syn keyword vim9MethodName contained empty len string 714 715 syn cluster vim9MethodName contains=vim9MethodName,vim9MethodNameError 716 717 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f' 718 syn region vim9MethodDefFold contained 719 \ start="\%(^\s*\%(:\=static\s\+\)\=\)\@16<=:\=def\s\+\h\w*[<(]" 720 \ end="^\s*:\=enddef\>" 721 \ contains=vim9MethodDef 722 \ fold keepend extend transparent 723 endif 724 725 syn cluster vim9MethodDef contains=vim9MethodDef,vim9MethodDefFold 726 727 " Classes {{{3 728 syn cluster vim9ClassBodyList contains=vim9Abstract,vim9Class,vim9Comment,vim9LineComment,@vim9Continue,@vimExprList,vim9Extends,vim9Implements,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Super,vim9Var 729 730 syn match vim9Class contained "\<class\>" skipwhite nextgroup=vim9ClassName 731 syn match vim9ClassName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends,vim9Implements 732 syn match vim9SuperClass contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Implements 733 syn match vim9ImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9InterfaceListComma,vim9Extends 734 syn match vim9InterfaceListComma contained "," skipwhite skipnl nextgroup=vim9ImplementedInterface 735 syn keyword vim9Abstract abstract skipwhite skipnl nextgroup=vim9ClassBody,vim9AbstractDef 736 syn keyword vim9Extends contained extends skipwhite skipnl nextgroup=vim9SuperClass 737 syn keyword vim9Implements contained implements skipwhite skipnl nextgroup=vim9ImplementedInterface 738 syn keyword vim9Public contained public 739 syn keyword vim9Static contained static 740 " FIXME: don't match as dictionary keys, remove when operators are not 741 " shared between Vim9 and legacy script 742 syn match vim9This contained "\.\@1<!\<this\>:\@!" 743 " super must be followed by '.' 744 syn match vim9Super contained "\.\@1<!\<super\.\@=" 745 746 VimFoldc syn region vim9ClassBody start="\<class\>" matchgroup=vimCommand end="\<endclass\>" contains=@vim9ClassBodyList transparent 747 748 " Enums {{{3 749 syn cluster vim9EnumBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Enum,@vimExprList,@vim9MethodDef,vim9Public,vim9Static,vim9Const,vim9Final,vim9This,vim9Var 750 751 syn match vim9Enum contained "\<enum\>" skipwhite nextgroup=vim9EnumName 752 753 syn match vim9EnumName contained "\<\u\w*\>" skipwhite skipempty nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements 754 syn match vim9EnumNameTrailing contained "\S.*" 755 syn region vim9EnumNameComment contained 756 \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" 757 \ skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue 758 \ contains=@vimCommentGroup,vimCommentString 759 " vim9EnumName's "skipempty" should only apply to comments and enum values and not implements clauses 760 syn match vim9EnumNameEmpty contained "^" skipwhite skipempty nextgroup=vim9EnumNameComment,vim9EnumValue 761 " allow line continuation between enum name and "implements" 762 syn match vim9EnumNameContinue contained 763 \ "^\s*\\" 764 \ skipwhite skipnl nextgroup=vim9EnumNameTrailing,vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue,vim9EnumImplements 765 \ contains=vimWhitespace 766 syn match vim9EnumNameContinueComment contained 767 \ "^\s*#\\ .*" 768 \ skipwhite skipnl nextgroup=vim9EnumNameEmpty,vim9EnumNameComment,@vim9EnumNameContinue 769 \ contains=vimWhitespace 770 syn cluster vim9EnumNameContinue contains=vim9EnumNameContinue,vim9EnumNameContinueComment 771 772 " enforce enum value list location 773 syn match vim9EnumValue contained "\<\a\w*\>" nextgroup=vim9EnumValueTypeArgs,vim9EnumValueArgList,vim9EnumValueListComma,vim9Comment 774 syn match vim9EnumValueListComma contained "," skipwhite skipempty nextgroup=vim9EnumValue,vim9EnumValueListCommaComment 775 syn region vim9EnumValueListCommaComment contained 776 \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" 777 \ skipwhite skipempty nextgroup=vim9EnumValueListCommaComment,vim9EnumValue 778 \ contains=@vimCommentGroup,vimCommentString 779 syn region vim9EnumValueTypeArgs contained 780 \ matchgroup=Delimiter 781 \ start="<\ze\a" 782 \ end=">" 783 \ nextgroup=vim9EnumValueArgList 784 \ contains=@vimType 785 \ oneline 786 syn region vim9EnumValueArgList contained 787 \ matchgroup=vimParenSep start="(" end=")" 788 \ nextgroup=vim9EnumValueListComma 789 \ contains=@vimExprList,vimContinueString,vim9Comment 790 791 syn keyword vim9EnumImplements contained implements skipwhite nextgroup=vim9EnumImplementedInterface 792 syn match vim9EnumImplementedInterface contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9EnumInterfaceListComma,vim9EnumImplementedInterfaceComment,vim9EnumValue 793 syn match vim9EnumInterfaceListComma contained "," skipwhite nextgroup=vim9EnumImplementedInterface 794 syn region vim9EnumImplementedInterfaceComment contained 795 \ start="#" skip="\n\s*\%(\\\|#\\ \)" end="$" 796 \ skipwhite skipempty nextgroup=vim9EnumImplementedInterfaceComment,vim9EnumValue 797 \ contains=@vimCommentGroup,vimCommentString 798 799 VimFolde syn region vim9EnumBody start="\<enum\>" matchgroup=vimCommand end="\<endenum\>" contains=@vim9EnumBodyList transparent 800 801 " Interfaces {{{3 802 " TODO: limit to decl only - no init values 803 syn cluster vim9InterfaceBodyList contains=vim9Comment,vim9LineComment,@vim9Continue,vim9Extends,vim9Interface,vim9AbstractDef,vim9Var 804 805 syn match vim9Interface contained "\<interface\>" skipwhite nextgroup=vim9InterfaceName 806 syn match vim9InterfaceName contained "\<\u\w*\>" skipwhite skipnl nextgroup=vim9Extends 807 808 syn keyword vim9AbstractDef contained def skipwhite nextgroup=vim9AbstractDefName 809 syn match vim9AbstractDefName contained "\<\h\w*\>" skipwhite nextgroup=vim9AbstractDefParams,vim9AbstractDefTypeParams contains=@vim9MethodName 810 syn region vim9AbstractDefParams contained 811 \ matchgroup=Delimiter start="(" end=")" 812 \ skipwhite skipnl nextgroup=vimDefComment,vim9AbstractDefReturnType,vimCommentError 813 \ contains=vimDefParam,vim9Comment,vimFunctionParamEquals 814 syn region vim9AbstractDefReturnType contained 815 \ start=":\s" end="$" matchgroup=vim9Comment end="\ze[#"]" 816 \ skipwhite skipnl nextgroup=vimDefComment,vimCommentError 817 \ contains=vimTypeSep 818 \ transparent 819 syn region vim9AbstractDefTypeParams contained 820 \ matchgroup=Delimiter 821 \ start="<" 822 \ end=">" 823 \ nextgroup=vim9AbstractDefParams 824 \ contains=vim9DefTypeParam 825 826 VimFoldi syn region vim9InterfaceBody start="\<interface\>" matchgroup=vimCommand end="\<endinterface\>" contains=@vim9InterfaceBodyList transparent 827 828 " Type Aliases {{{3 829 syn match vim9Type "\<ty\%[pe]\>" skipwhite nextgroup=vim9TypeAlias,vim9TypeAliasError 830 syn match vim9TypeAlias contained "\<\u\w*\>" skipwhite nextgroup=vim9TypeEquals 831 syn match vim9TypeEquals contained "=" skipwhite nextgroup=@vimType 832 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_notypealiaserror") 833 syn match vim9TypeAliasError contained "\<\l\w*\>" skipwhite nextgroup=vim9TypeEquals 834 endif 835 endif 836 837 " Blocks: {{{2 838 " ====== 839 Vim9 syn region vim9Block 840 \ matchgroup=vimSep 841 \ start="{\ze\s*\%($\|[#|]\)" 842 \ end="^\s*\zs}" 843 \ skipwhite nextgroup=vim9Comment,vimCmdSep 844 \ contains=@vimDefBodyList 845 846 " Keymaps: {{{2 847 " ======= 848 849 syn match vimKeymapStart "^" contained skipwhite nextgroup=vimKeymapLhs,@vimKeymapLineComment 850 syn match vimKeymapLhs "\S\+" contained skipwhite nextgroup=vimKeymapRhs contains=vimNotation 851 syn match vimKeymapRhs "\S\+" contained skipwhite nextgroup=vimKeymapTailComment contains=vimNotation 852 syn match vimKeymapTailComment "\S.*" contained 853 854 " TODO: remove when :" comment is matched in parts as "ex-colon comment" --djk 855 if s:vim9script 856 syn match vim9KeymapLineComment "#.*" contained contains=@vimCommentGroup,vimCommentString,vim9CommentTitle 857 else 858 syn match vimKeymapLineComment +".*+ contained contains=@vimCommentGroup,vimCommentString,vimCommentTitle 859 endif 860 syn cluster vimKeymapLineComment contains=vim9\=KeymapLineComment 861 862 syn region vimLoadkeymap matchgroup=vimCommand start="\<loadk\%[eymap]\>" end="\%$" contains=vimKeymapStart 863 864 " Special Filenames, Modifiers, Extension Removal: {{{2 865 " =============================================== 866 syn match vimSpecFile "<c\(word\|WORD\)>" nextgroup=vimSpecFileMod,vimSubst1 867 syn match vimSpecFile "<\([acs]file\|amatch\|abuf\)>" nextgroup=vimSpecFileMod,vimSubst1 868 syn match vimSpecFile "\s%[ \t:]"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 869 syn match vimSpecFile "\s%$"ms=s+1 nextgroup=vimSpecFileMod,vimSubst1 870 syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 871 syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1 872 syn match vimSpecFileMod "\(:[phtre]\)\+" contained 873 874 syn match vimSpecFile contained "%[ \t:]"me=e-1 nextgroup=vimSpecFileMod 875 syn match vimSpecFile contained excludenl "%$" nextgroup=vimSpecFileMod 876 syn match vimSpecFile contained "%<"me=e-1 nextgroup=vimSpecFileMod 877 878 " User-Specified Commands: {{{2 879 " ======================= 880 syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange 881 882 syn match vimUserCmd "\<com\%[mand]\>!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang 883 syn match vimUserCmd +\<com\%[mand]\>!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang 884 885 syn region vimUserCmdAttrs contained 886 \ start="-\l" 887 \ start=+^\s*\%(\\\|["#]\\ \)+ 888 \ end="\ze\s\u" 889 \ skipwhite nextgroup=vimUserCmdName 890 \ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError 891 \ transparent 892 syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)" 893 syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr 894 syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey 895 syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey 896 syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey 897 syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError 898 syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey 899 syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber 900 syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey 901 syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs 902 syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey 903 syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange 904 syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey 905 906 syn match vimUserCmdAttrNargs contained "[01*?+]" 907 syn match vimUserCmdAttrRange contained "%" 908 909 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror") 910 syn match vimUserCmdError contained "\S\+\>" 911 endif 912 913 syn case ignore 914 syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister] 915 916 " GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR='' 917 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 918 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 919 syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError 920 syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFunctionSID 921 922 " GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR='' 923 syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win 924 syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win 925 syn match vimUserCmdAttrAddr contained "?" 926 syn case match 927 928 syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement 929 syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement 930 syn region vimUserCmdReplacement contained 931 \ start="\S" 932 \ start=+^\s*\%(\\\|["#]\\ \)+ 933 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 934 \ end="$" 935 \ contains=@vimContinue,@vimUserCmdList,vimComFilter 936 \ keepend 937 syn region vimUserCmdBlock contained 938 \ matchgroup=vimSep 939 \ start="{" 940 \ end="^\s*\zs}" 941 \ contains=@vimDefBodyList,@vimUserCmdList 942 943 syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName 944 syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName 945 syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>" 946 947 " Lower Priority Comments: after some vim commands... {{{2 948 " ======================= 949 if get(g:, "vimsyn_comment_strings", 1) 950 syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' extend 951 endif 952 953 if s:vim9script 954 syn cluster vimComment contains=vim9Comment 955 else 956 syn cluster vimComment contains=vimComment 957 endif 958 959 VimL syn region vimComment 960 \ excludenl 961 \ start=+"+ 962 \ skip=+\n\s*\%(\\\|"\\ \)+ 963 \ end="$" 964 \ contains=@vimCommentGroup,vimCommentString 965 \ extend 966 Vim9 syn region vim9Comment 967 \ excludenl 968 \ start="\%#=1\s\@1<=#\%({\@!\|{{\)" 969 \ skip="\n\s*\%(\\\|#\\ \)" 970 \ end="$" 971 \ contains=@vimCommentGroup,vimCommentString 972 \ extend 973 974 syn match vim9CommentError contained "#.*" 975 syn match vimCommentError contained +".*+ 976 977 " Environment Variables: {{{2 978 " ===================== 979 syn match vimEnvvar "\$\I\i*" 980 syn match vimEnvvar "\${\I\i*}" 981 982 " Strings {{{2 983 " ======= 984 985 " In-String Specials: 986 " Try to catch strings, if nothing else matches (therefore it must precede the others!) 987 " vimEscapeBrace handles ["] []"] (ie. "s don't terminate string inside []) 988 " syn region vimEscapeBrace oneline contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1 989 syn match vimPatSepErr contained "\\)" 990 syn match vimPatSep contained "\\|" 991 syn region vimPatSepZone oneline contained matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\\]['"]" contains=@vimStringGroup 992 syn region vimPatRegion contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)" contains=@vimSubstList oneline 993 syn match vimNotPatSep contained "\\\\" 994 syn cluster vimStringGroup contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell 995 syn region vimString oneline keepend matchgroup=vimString start=+[^a-zA-Z\\@]"+lc=1 skip=+\\\\\|\\"+ matchgroup=vimStringEnd end=+"+ nextgroup=vimSubscript contains=@vimStringGroup extend 996 syn region vimString oneline matchgroup=vimString start=+[^a-zA-Z\\@]'+lc=1 end=+'+ nextgroup=vimSubscript contains=vimQuoteEscape extend 997 "syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim 998 999 syn match vimEscape contained "\\." 1000 " syn match vimEscape contained +\\[befnrt\"]+ 1001 syn match vimEscape contained "\\\o\{1,3}\|\\[xX]\x\{1,2}\|\\u\x\{1,4}\|\\U\x\{1,8}" 1002 syn match vimEscape contained "\\<" contains=vimNotation 1003 syn match vimEscape contained "\\<\*[^>]*>\=>" 1004 syn match vimQuoteEscape contained "''" 1005 1006 syn region vimString oneline matchgroup=vimString start=+$'+ end=+'+ nextgroup=vimSubscript contains=@vimStringInterpolation,vimQuoteEscape extend 1007 syn region vimString oneline matchgroup=vimString start=+$"+ end=+"+ nextgroup=vimSubscript contains=@vimStringInterpolation,@vimStringGroup extend 1008 syn region vimStringInterpolationExpr oneline contained matchgroup=vimSep start=+{+ end=+}+ contains=@vimExprList 1009 syn match vimStringInterpolationBrace contained "{{" 1010 syn match vimStringInterpolationBrace contained "}}" 1011 syn cluster vimStringInterpolation contains=vimStringInterpolationExpr,vimStringInterpolationBrace 1012 1013 syn region vimContinueString contained matchgroup=vimContinueString start=+"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringGroup 1014 syn region vimContinueString contained matchgroup=vimContinueString start=+'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,vimQuoteEscape 1015 syn region vimContinueString contained matchgroup=vimContinueString start=+$"+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+"+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,@vimStringGroup 1016 syn region vimContinueString contained matchgroup=vimContinueString start=+$'+ skip=+\n\s*\%(\\\|["#]\\ \)+ end=+'+ end="$" skipwhite nextgroup=vimSubscript,vimComment contains=@vimContinue,@vimStringInterpolation,vimQuoteEscape 1017 1018 " Substitutions: {{{2 1019 " ============= 1020 syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation 1021 syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation 1022 syn cluster vimSubstList add=vimCollection 1023 syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount 1024 syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat 1025 syn match vimSubst "^\s*\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount 1026 syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\>" skipwhite nextgroup=vimSubstPat,vimSubstFlags,vimSubstCount 1027 syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)[_#]\@=" skipwhite nextgroup=vimSubstPat 1028 syn match vimSubst1 contained "\%(s\%[ubstitute]\|sm\%[agic]\>\|sno\%[magic]\)\%(\d\+\)\@=" skipwhite nextgroup=vimSubstCount 1029 syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags 1030 " & and # after :s are always pattern delimiters not flags 1031 syn match vimSubstFlags contained "[&cegiIlnpr#]\+" skipwhite nextgroup=vimSubstCount 1032 syn match vimSubstCount contained "\d\+\>" 1033 " TODO: Vim9 illegal separators for abbreviated :s form are [-.:], :su\%[...] required 1034 " : # is allowed but "not recommended" (see :h pattern-delimiter) 1035 syn region vimSubstPat contained matchgroup=vimSubstDelim start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1 contains=@vimSubstList nextgroup=vimSubstRep4 oneline 1036 syn region vimSubstRep4 contained matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList nextgroup=vimSubstFlagErr oneline 1037 syn region vimCollection contained transparent start="\\\@<!\[" skip="\\\[" end="\]" contains=vimCollClass 1038 syn match vimCollClassErr contained "\[:.\{-\}:\]" 1039 syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|retu\%[rn]\|tab\|escape\|backspace\):\]" 1040 syn match vimSubstSubstr contained "\\z\=\d" 1041 syn match vimSubstTwoBS contained "\\\\" 1042 1043 " TODO: flags, unlike count, must follow immediately 1044 " : distinguish from with Vim9 &var 1045 " syn match vimSubst "^\s*\zs&&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount 1046 " syn match vimSubst "^\s*\zs\~&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount 1047 " syn match vimSubst1 contained "&&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount 1048 " syn match vimSubst1 contained "\~&\=" skipwhite nextgroup=vimSubstFlags,vimSubstCount 1049 1050 " two and three letter variants (matched as :s + flags, count may follow immediately) 1051 syn match vimSubst "^\s*\zssc[egiIlnp]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1052 syn match vimSubst "^\s*\zssg[ceiIlnpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1053 syn match vimSubst "^\s*\zssi[ceInpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1054 syn match vimSubst "^\s*\zssI[ceginplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1055 syn match vimSubst "^\s*\zssr[cgiInplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1056 1057 syn match vimSubst1 contained "\<sc[egiIlnp]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1058 syn match vimSubst1 contained "\<sg[ceiIlnpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1059 syn match vimSubst1 contained "\<si[ceInpr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1060 syn match vimSubst1 contained "\<sI[ceginplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1061 syn match vimSubst1 contained "\<sr[cgiInplr]\=\a\@!" skipwhite nextgroup=vimSubstCount contains=vimSubstFlags 1062 1063 " Vi compatibility 1064 syn match vimSubstDelim contained "\\" 1065 syn match vimSubstPat contained "\\\ze[/?&]" contains=vimSubstDelim nextgroup=vimSubstRep4 1066 1067 " Mark: {{{2 1068 " ==== 1069 VimL syn match vimExMark "\<k\%([a-zA-Z0-9]\>\|[[\]<>'`]\)\@=" nextgroup=@vimMarkArg 1070 VimL syn match vimExMark "\<k\>" skipwhite nextgroup=@vimMarkArg 1071 syn match vimExMark "\<mark\>" skipwhite nextgroup=@vimMarkArg 1072 1073 syn match vimMarkArg contained "[a-zA-Z]\>\|[[\]<>'`]" skipwhite nextgroup=vimCmdSep,vimComment 1074 syn match vimMarkArgError contained "["^.(){}0-9]" 1075 syn cluster vimMarkArg contains=vimMarkArg,vimMarkArgError 1076 1077 " Marks, Registers, Addresses, Filters: {{{2 1078 syn match vimMark "'[a-zA-Z0-9]\ze\s*$" 1079 syn match vimMark "'[[\]{}()<>'`"^.]\ze\s*$" 1080 syn match vimMark "'[a-zA-Z0-9]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 1081 syn match vimMark "'[[\]{}()<>'`"^.]\ze[-+,!]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 1082 syn match vimMark ",\zs'[[\]{}()<>'`"^.]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 1083 syn match vimMark "[!,:]\zs'[a-zA-Z0-9]" nextgroup=vimFilter,vimMarkNumber,vimSubst1 1084 syn match vimMarkNumber "[-+]\d\+" contained contains=vimOper nextgroup=vimSubst1 1085 syn match vimPlainMark contained "'[a-zA-Z0-9]" 1086 syn match vimRange "[`'][a-zA-Z0-9],[`'][a-zA-Z0-9]" contains=vimMark skipwhite nextgroup=vimFilter 1087 1088 syn match vimRegister '[^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]' 1089 syn match vimRegister '@"' 1090 syn match vimLetRegister contained '@["@0-9\-a-zA-Z:.%#=*+~_/]' 1091 1092 syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1 1093 syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1 1094 1095 syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile 1096 syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile 1097 syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile 1098 1099 " Complex Repeats: (:h complex-repeat) {{{2 1100 " =============== 1101 syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1 1102 1103 " NOTE: :* as an alias for :@ is not supported, this is considered a :range, 1104 " see :help cpo-star 1105 syn match vimAtArg contained +@\@1<=[0-9a-z".=*+:@]+ 1106 syn match vimAt +@[0-9a-z".=*+:@]\ze\s*\%($\|[|"#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment contains=vimAtArg 1107 " Vim9: avoid LHS assignment mismatching of :@["#] 1108 syn match vimAt +@\ze\s*\%($\||\|\s["#]\)+ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 1109 1110 " Set command and associated set-options (vimOptions) with comment {{{2 1111 syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimCmdSep,vimComment,vimSetArgs 1112 syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend 1113 syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,@vimFunc 1114 syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" 1115 syn match vimSetBarEscape contained "\\|" 1116 syn match vimSetQuoteEscape contained +\\"+ 1117 syn region vimSetArgs contained 1118 \ start="\l\|<" 1119 \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + 1120 \ end=+\ze\\\@1<![|"]+ 1121 "\ assume this isn't an escaped char with backslash on the previous line 1122 \ end=+^\s*\\\ze[|"]+ 1123 \ end="\ze\s#" 1124 \ end="$" 1125 \ nextgroup=vimSetCmdSep,vimSetComment,vim9Comment 1126 \ contains=@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap 1127 \ keepend 1128 " TODO: restrict this to valid values? 1129 syn match vimOption contained "<[^>]\+>" contains=vimOption 1130 syn region vimSetEqual contained 1131 \ matchgroup=vimOper 1132 \ start="[=:]\|[-+^]=" 1133 \ skip=+\\\s\|^\s*\%(\\\|["#]\\ \)+ 1134 \ end="\ze\s" 1135 \ contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep,vimSetEscape,vimSetBarEscape,vimSetQuoteEscape 1136 syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap 1137 syn keyword vimSetAll contained all nextgroup=vimSetMod 1138 syn keyword vimSetTermcap contained termcap 1139 syn match vimSetSep contained "[,:]" 1140 syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)" 1141 1142 " Variable Declarations: {{{2 1143 " ===================== 1144 VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar 1145 VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar 1146 syn region vimVarList contained 1147 \ start="\[" end="]" 1148 \ skipwhite nextgroup=vimLetHeredoc 1149 \ contains=@vimContinue,@vimSpecialVar,vimVar 1150 syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript 1151 hi link vimLetVar vimVar 1152 syn region vimLetVarSubscript contained 1153 \ matchgroup=vimSubscriptBracket 1154 \ start="\S\@1<=\[" 1155 \ end="]" 1156 \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc 1157 \ contains=@vimExprList 1158 1159 syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars 1160 syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars 1161 syn region vimUnletVars contained 1162 \ start="$\I\|\h" skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*["#]\\ + end="$" end=+\ze\s*[|"#]+ 1163 \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 1164 \ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar 1165 1166 " TODO: type error after register or environment variables (strings) 1167 VimFoldh syn region vimLetHeredoc contained 1168 \ matchgroup=vimLetHeredocStart 1169 \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)" 1170 \ matchgroup=vimLetHeredocStop 1171 \ end="^\z1\=\z2$" 1172 \ extend 1173 VimFoldh syn region vimLetHeredoc contained 1174 \ matchgroup=vimLetHeredocStart 1175 \ start="=<<\%(\s*\)\@>\z(\L\S*\)" 1176 \ matchgroup=vimLetHeredocStop end="^\z1$" 1177 \ extend 1178 VimFoldh syn region vimLetHeredoc contained 1179 \ matchgroup=vimLetHeredocStart 1180 \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)" 1181 \ matchgroup=vimLetHeredocStop 1182 \ end="^\z1\=\z2$" 1183 \ contains=@vimStringInterpolation 1184 \ extend 1185 VimFoldh syn region vimLetHeredoc contained 1186 \ matchgroup=vimLetHeredocStart 1187 \ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)" 1188 \ matchgroup=vimLetHeredocStop 1189 \ end="^\z1$" 1190 \ contains=@vimStringInterpolation 1191 \ extend 1192 1193 Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList 1194 Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList 1195 Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList 1196 1197 syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper 1198 syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite nextgroup=vimLetHeredoc 1199 1200 syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType 1201 syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc 1202 syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc 1203 syn match vim9VariableTypeObject contained "\<object<\@=" nextgroup=vim9VariableTypeObjectArgs 1204 syn region vim9VariableTypeObjectArgs 1205 \ matchgroup=vim9VariableTypeObjectBracket 1206 \ start="<" 1207 \ end=">" 1208 \ contains=vimTypeAny,vimTypeObject,vimUserType 1209 \ oneline 1210 \ transparent 1211 syn match vim9VariableType contained "\<\%(func\)\>" skipwhite nextgroup=vimLetHeredoc 1212 syn region vim9VariableCompoundType contained 1213 \ matchgroup=vim9VariableType 1214 \ start="\<func(" 1215 \ end=")" 1216 \ skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc 1217 \ contains=@vim9Continue,@vim9VariableType 1218 \ transparent 1219 syn region vim9VariableCompoundType contained 1220 \ matchgroup=vim9VariableType 1221 \ start="\<tuple<" 1222 \ end=">" 1223 \ skipwhite nextgroup=vimLetHeredoc 1224 \ contains=@vim9Continue,@vim9VariableType 1225 \ transparent 1226 syn region vim9VariableCompoundType contained 1227 \ matchgroup=vim9VariableType 1228 \ start="\<\%(list\|dict\)<" 1229 \ end=">" 1230 \ skipwhite nextgroup=vimLetHeredoc 1231 \ contains=@vim9VariableType 1232 \ oneline 1233 \ transparent 1234 syn match vim9VariableUserType contained "\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc 1235 1236 syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType 1237 1238 " Lockvar and Unlockvar: {{{2 1239 " ===================== 1240 syn keyword vimLockvar lockv[ar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars 1241 syn keyword vimUnlockvar unlo[ckvar] skipwhite nextgroup=vimLockvarBang,vimLockvarDepth,vimLockvarVars 1242 syn match vimLockvarBang contained "\a\@1<=!" skipwhite nextgroup=vimLockvarVars 1243 syn match vimLockvarDepth contained "\<[0-3]\>" skipwhite nextgroup=vimLockvarVars 1244 syn region vimLockvarVars contained 1245 \ start="\h" skip=+\n\s*\%(\\\|"\\ \)\|^\s*"\\ + end="$" end="\ze[|"]" 1246 \ nextgroup=vimCmdSep,vimComment 1247 \ contains=@vimContinue,vimVar 1248 1249 hi def link vimLockvar vimCommand 1250 hi def link vimUnlockvar vimCommand 1251 hi def link vimLockvarBang vimBang 1252 hi def link vimLockvarDepth vimNumber 1253 1254 " For: {{{2 1255 " === 1256 " handles Vim9 and legacy for now 1257 syn region vimFor 1258 \ matchgroup=vimCommand 1259 \ start="\<for\>" end="\<in\>" 1260 \ skipwhite skipnl nextgroup=@vimForInContinue,vim9ForInComment,@vimExprList 1261 \ contains=@vimContinue,vimVar,vimVarList,vim9Variable,vim9VariableList 1262 \ transparent 1263 1264 syn match vim9ForInComment contained "#.*" skipwhite skipempty nextgroup=vimForInComment,@vimExprList 1265 1266 syn match vimForInContinue contained "^\s*\zs\\" skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList 1267 syn match vimForInContinueComment contained '^\s*\zs["#]\\ .*' skipwhite skipnl nextgroup=@vimForInContinue,@vimExprList 1268 syn cluster vimForInContinue contains=vimForInContinue,vimForInContinueComment 1269 1270 " Abbreviations: {{{2 1271 " ============= 1272 " GEN_SYN_VIM: vimCommand abbrev, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' 1273 syn keyword vimAbb ab[breviate] ca[bbrev] cnorea[bbrev] cuna[bbrev] ia[bbrev] inorea[bbrev] iuna[bbrev] norea[bbrev] una[bbreviate] skipwhite nextgroup=vimMapMod,vimMapLhs 1274 " GEN_SYN_VIM: vimCommand abclear, START_STR='syn keyword vimAbb', END_STR='skipwhite nextgroup=vimMapMod' 1275 syn keyword vimAbb abc[lear] cabc[lear] iabc[lear] skipwhite nextgroup=vimMapMod 1276 1277 " Filename Patterns: {{{2 1278 " ================= 1279 1280 syn match vimWildcardQuestion contained "?" 1281 syn match vimWildcardStar contained "*" 1282 1283 syn match vimWildcardBraceComma contained "," 1284 syn region vimWildcardBrace contained 1285 \ matchgroup=vimWildcard 1286 \ start="{" 1287 \ end="}" 1288 \ contains=vimWildcardEscape,vimWildcardBrace,vimWildcardBraceComma,vimWildcardQuestion,vimWildcardStar,vimWildcardBracket 1289 \ oneline 1290 1291 syn match vimWildcardIntervalNumber contained "\d\+" 1292 syn match vimWildcardInterval contained "\\\\\\{\d\+\%(,\d\+\)\=\\}" contains=vimWildcardIntervalNumber 1293 1294 1295 syn match vimWildcardBracket contained "\[\%(\^\=]\=\%(\\.\|\[\([:.=]\)[^:.=]\+\1]\|[^][:space:]]\)*\)\@>]" 1296 \ contains=vimWildcardBracketStart,vimWildcardEscape 1297 1298 syn match vimWildcardBracketCharacter contained "." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd 1299 syn match vimWildcardBracketRightBracket contained "]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd 1300 syn match vimWildcardBracketHyphen contained "-]\@!" nextgroup=@vimWildcardBracketCharacter 1301 syn match vimWildcardBracketEscape contained "\\." nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketHyphen,vimWildcardBracketEnd 1302 syn match vimWildcardBracketCharacterClass contained "\[:[^:]\+:]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd 1303 syn match vimWildcardBracketEquivalenceClass contained "\[=[^=]\+=]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd 1304 syn match vimWildcardBracketCollatingSymbol contained "\[\.[^.]\+\.]" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketEnd 1305 1306 syn match vimWildcardBracketStart contained "\[" nextgroup=vimWildcardBracketCaret,vimWildcardBracketRightBracket,@vimWildcardBracketCharacter 1307 syn match vimWildcardBracketCaret contained "\^" nextgroup=@vimWildcardBracketCharacter,vimWildcardBracketRightBracket 1308 syn match vimWildcardBracketEnd contained "]" 1309 1310 syn cluster vimWildcardBracketCharacter contains=vimWildcardBracketCharacter,vimWildcardBracketEscape,vimWildcardBracketCharacterClass,vimWildcardBracketEquivalenceClass,vimWildcardBracketCollatingSymbol 1311 1312 syn match vimWildcardEscape contained "\\." 1313 1314 syn cluster vimWildcard contains=vimWildcardQuestion,vimWildcardStar,vimWildcardBrace,vimWildcardBracket,vimWildcardInterval 1315 1316 " Autocmd and Doauto{cmd,all}: {{{2 1317 " =========================== 1318 1319 " TODO: explicitly match the {cmd} arg rather than bailing out to TOP 1320 syn region vimAutocmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList 1321 1322 syn match vimAutocmdGroup contained "\%(\\["|[:space:]]\|[^"|[:space:]]\)\+" skipwhite nextgroup=vimAutoEvent,nvimAutoEvent,vimAutoEventGlob 1323 syn match vimAutocmdBang contained "\a\@1<=!" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,nvimAutoEvent,vimAutoEventGlob 1324 1325 " TODO: cleaner handling of | in pattern position 1326 " : match pattern items in addition to wildcards 1327 syn region vimAutocmdPattern contained 1328 \ start="|\@!\S" 1329 \ skip="\\\\\|\\[,[:space:]]" 1330 \ end="\ze[,[:space:]]" 1331 \ end="$" 1332 \ skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc 1333 \ contains=vimEnvvar,@vimWildcard,vimAutocmdPatternEscape 1334 syn match vimAutocmdBufferPattern contained "<buffer\%(=\%(\d\+\|abuf\)\)\=>" skipwhite nextgroup=vimAutocmdPatternSep,vimAutocmdMod,vimAutocmdBlock,@vimFunc 1335 " trailing pattern separator comma allowed 1336 syn match vimAutocmdPatternSep contained "," skipwhite nextgroup=@vimAutocmdPattern,vimAutocmdMod,vimAutocmdBlock 1337 syn match vimAutocmdPatternEscape contained "\\." 1338 syn cluster vimAutocmdPattern contains=vimAutocmdPattern,vimAutocmdBufferPattern 1339 1340 " TODO: Vim9 requires '++' prefix 1341 syn match vimAutocmdMod contained "\%(++\)\=\<nested\>" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock 1342 syn match vimAutocmdMod contained "++once\>" skipwhite nextgroup=vimAutocmdMod,vimAutocmdBlock 1343 1344 " higher priority than vimAutocmdGroup, assume no group is so named 1345 syn match vimAutoEventGlob contained "*" skipwhite nextgroup=@vimAutocmdPattern 1346 syn match vimAutoEventSep contained "\a\@1<=," nextgroup=vimAutoEvent,nvimAutoEvent 1347 syn match vimUserAutoEventSep contained "\a\@1<=," nextgroup=vimUserAutoEvent 1348 1349 syn match vimAutocmd "\<au\%[tocmd]\>" skipwhite nextgroup=vimAutocmdBang,vimAutocmdGroup,vimAutoEvent,nvimAutoEvent,vimAutoEventGlob 1350 1351 1352 syn match vimDoautocmdMod contained "<nomodeline>" skipwhite nextgroup=vimAutocmdGroup,vimAutoEvent,nvimAutoEvent 1353 syn match vimDoautocmd "\<do\%[autocmd]\>" skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent,nvimAutoEvent 1354 syn match vimDoautocmd "\<doautoa\%[ll]\>" skipwhite nextgroup=vimDoautocmdMod,vimAutocmdGroup,vimAutoEvent,nvimAutoEvent 1355 1356 " Echo And Execute: -- prefer strings! {{{2 1357 " ================ 1358 " NOTE: No trailing comments 1359 1360 syn region vimEcho 1361 \ matchgroup=vimCommand 1362 \ start="\<ec\%[ho]\>" 1363 \ start="\<echoe\%[rr]\>" 1364 \ start="\<echom\%[sg]\>" 1365 \ start="\<echoc\%[onsole]\>" 1366 \ start="\<echon\>" 1367 \ start="\<echow\%[indow]\>" 1368 \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ 1369 \ end="\ze|" 1370 \ excludenl end="$" 1371 \ nextgroup=vimCmdSep 1372 \ contains=@vimContinue,@vimExprList,vim9Comment 1373 \ transparent 1374 1375 syn match vimEchohl "\<echohl\=\>" skipwhite nextgroup=vimGroup,vimHLGroup,vimEchohlNone,vimOnlyHLGroup,nvimHLGroup 1376 syn case ignore 1377 syn keyword vimEchohlNone contained none 1378 syn case match 1379 1380 syn cluster vimEcho contains=vimEcho,vimEchohl 1381 1382 syn region vimExecute 1383 \ matchgroup=vimCommand 1384 \ start="\<exe\%[cute]\>" 1385 \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ 1386 \ end="\ze|" 1387 \ excludenl end="$" 1388 \ nextgroup=vimCmdSep 1389 \ contains=@vimContinue,@vimExprList,vim9Comment 1390 \ transparent 1391 1392 syn region vimEval 1393 \ matchgroup=vimCommand 1394 \ start="\<ev\%[al]\>" 1395 \ skip=+\\|\|||\|\n\s*\%(\\\|["#]\\ \)+ 1396 \ end="\ze|" 1397 \ excludenl end="$" 1398 \ nextgroup=vimCmdSep 1399 \ contains=@vimContinue,@vimExprList,vim9Comment,vimComment 1400 \ transparent 1401 1402 " Filter: {{{2 1403 " ====== 1404 syn match vimExFilter "\<filt\%[er]\>" skipwhite nextgroup=vimExFilterBang,vimExFilterPattern 1405 syn region vimExFilterPattern contained 1406 \ start="[[:ident:]]" 1407 \ end="\ze[[:space:]\n]" 1408 \ skipwhite nextgroup=@vimCmdList 1409 \ contains=@vimSubstList 1410 \ oneline 1411 syn region vimExFilterPattern contained 1412 \ matchgroup=Delimiter 1413 \ start="\z([^[:space:][:ident:]|"]\)" 1414 \ skip="\\\\\|\\\z1" 1415 \ end="\z1" 1416 \ skipwhite nextgroup=@vimCmdList 1417 \ contains=@vimSubstList 1418 \ oneline 1419 syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern 1420 1421 " Grep and Make: {{{2 1422 " ============= 1423 " | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments 1424 syn match vimGrep "\<l\=gr\%[ep]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep 1425 syn match vimGrepadd "\<l\=grepa\%[dd]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep 1426 syn region vimGrepArgs contained 1427 \ start="|\@!\S" 1428 \ skip=+\n\s*\%(\\\|[#"]\\ \)+ 1429 \ matchgroup=vimCmdSep 1430 \ end="|" 1431 \ end="$" 1432 "\ TODO: include vimSpecFile 1433 \ contains=vimGrepBarEscape 1434 syn match vimGrepBarEscape contained "\\|" 1435 syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep 1436 1437 syn match vimMake "\<l\=make\=\>" skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep 1438 syn region vimMakeArgs contained 1439 \ start="|\@!\S" 1440 \ skip=+\n\s*\%(\\\|[#"]\\ \)+ 1441 \ matchgroup=vimCmdSep 1442 \ end="|" 1443 \ end="$" 1444 "\ TODO: include vimSpecFile 1445 \ contains=vimMakeBarEscape 1446 syn match vimMakeBarEscape contained "\\|" 1447 syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep 1448 1449 " Help*: {{{2 1450 " ===== 1451 syn match vimHelp "\<h\%[elp]\>" skipwhite nextgroup=vimHelpBang,vimHelpArg,vimHelpNextCommand 1452 " TODO: match wildcards, ignoring exceptions? 1453 syn region vimHelpArg contained 1454 \ start="\S" 1455 \ matchgroup=Special 1456 \ end="\%(@\a\a\)\=\ze\s*\%($\|\%x0d\|\%x00\||[^|]\)" 1457 \ oneline 1458 syn match vimHelpNextCommand contained "\ze|[^|]" skipwhite nextgroup=vimCmdSep 1459 syn match vimHelpBang contained "\a\@1<=!" skipwhite nextgroup=vimHelpArg,vimHelpNextCommand 1460 1461 syn match vimHelpgrep "\<l\=helpg\%[rep]\>" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern 1462 syn region vimHelpgrepPattern contained 1463 \ start="\S" 1464 \ matchgroup=Special 1465 \ end="@\a\a\>" 1466 \ end="$" 1467 \ contains=@vimSubstList 1468 \ oneline 1469 1470 " Vimgrep: {{{2 1471 " ======= 1472 syn match vimVimgrep "\<l\=vim\%[grep]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern 1473 syn match vimVimgrepadd "\<l\=vimgrepa\%[dd]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern 1474 syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern 1475 syn region vimVimgrepPattern contained 1476 \ start="[[:ident:]]" 1477 \ end="\ze[[:space:]\n]" 1478 \ skipwhite nextgroup=vimVimgrepFile,vimCmdSep 1479 \ contains=@vimSubstList 1480 \ oneline 1481 syn region vimVimgrepPattern contained 1482 \ matchgroup=Delimiter 1483 \ start="\z([^[:space:][:ident:]|"]\)" 1484 \ skip="\\\\\|\\\z1" 1485 \ end="\z1" 1486 \ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep 1487 \ contains=@vimSubstList 1488 \ oneline 1489 syn match vimVimgrepEscape contained "\\\%(\\|\|.\)" 1490 syn match vimVimgrepBarEscape contained "\\|" 1491 syn region vimVimgrepFile contained 1492 \ start="|\@!\S" 1493 \ matchgroup=vimCmdSep 1494 \ end="|" 1495 \ end="\ze\s" 1496 \ end="$" 1497 \ skipwhite nextgroup=vimVimgrepFile 1498 \ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape 1499 syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepfile 1500 1501 " Maps: {{{2 1502 " ==== 1503 " GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' 1504 syn keyword vimMap 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 1505 syn match vimMap "\<map\>" skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs 1506 syn keyword vimMap no[remap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs 1507 " GEN_SYN_VIM: vimCommand mapclear, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod' 1508 syn keyword vimMap cmapc[lear] imapc[lear] lmapc[lear] nmapc[lear] omapc[lear] smapc[lear] tmapc[lear] vmapc[lear] xmapc[lear] skipwhite nextgroup=vimMapMod 1509 syn keyword vimMap mapc[lear] skipwhite nextgroup=vimMapBang,vimMapMod 1510 " GEN_SYN_VIM: vimCommand unmap, START_STR='syn keyword vimUnmap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs' 1511 syn keyword vimUnmap cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] tunma[p] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapMod,vimMapLhs 1512 syn keyword vimUnmap unm[ap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs 1513 1514 syn match vimMapLhs contained "\%(.\|\S\)\+" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite nextgroup=vimMapRhs 1515 syn match vimMapLhs contained "\%(.\|\S\)\+\ze\s*$" contains=vimCtrlChar,vimNotation,vimMapLeader skipwhite skipnl nextgroup=vimMapRhsContinue 1516 syn match vimMapBang contained "\a\@1<=!" skipwhite nextgroup=vimMapMod,vimMapLhs 1517 syn match vimMapMod contained "\%#=1<\%(buffer\|expr\|nowait\|script\|silent\|special\|unique\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs 1518 syn region vimMapRhs contained 1519 \ start="\S" 1520 \ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+ 1521 \ end="\ze|" 1522 \ end="$" 1523 \ nextgroup=vimCmdSep 1524 \ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader 1525 syn region vimMapRhsContinue contained 1526 \ start=+^\s*\%(\\\|["#]\\ \)+ 1527 \ skip=+\\|\|\@1<=|\|\n\s*\%(\\\|["#]\\ \)+ 1528 \ end="\ze|" 1529 \ end="$" 1530 \ nextgroup=vimCmdSep 1531 \ contains=@vimContinue,vimCtrlChar,vimNotation,vimMapLeader 1532 syn match vimMapLeader contained "\%#=1\c<\%(local\)\=leader>" contains=vimMapLeaderKey 1533 syn keyword vimMapModKey contained buffer expr nowait script silent special unique 1534 syn case ignore 1535 syn keyword vimMapLeaderKey contained leader localleader 1536 syn case match 1537 1538 " Menus: {{{2 1539 " ===== 1540 " NOTE: tail comments disallowed 1541 " GEN_SYN_VIM: vimCommand menu, START_STR='syn keyword vimMenu', END_STR='skipwhite nextgroup=vimMenuBang,vimMenuMod,vimMenuName,vimMenuPriority,vimMenuStatus' 1542 syn keyword vimMenu 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 1543 syn keyword vimMenu popu[p] skipwhite nextgroup=vimMenuBang,vimMenuName 1544 syn region vimMenuRhs contained contains=@vimContinue,vimNotation start="|\@!\S" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ end="$" matchgroup=vimSep end="|" 1545 syn region vimMenuRhsContinue contained contains=@vimContinue,vimNotation start=+^\s*\%(\\\|"\\ \)+ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ end="$" matchgroup=vimSep end="|" 1546 syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation skipwhite nextgroup=vimCmdSep,vimMenuRhs 1547 syn match vimMenuName "\.\@!\%(\\\s\|\S\)\+\ze\s*$" contained contains=vimMenuNotation,vimNotation skipwhite skipnl nextgroup=vimCmdSep,vimMenuRhsContinue 1548 syn match vimMenuNotation "&\a\|&&\|\\\s\|\\\." contained 1549 syn match vimMenuPriority "\<\d\+\%(\.\d\+\)*\>" contained skipwhite nextgroup=vimMenuName 1550 syn match vimMenuMod "\c<\%(script\|silent\|special\)>" contained skipwhite nextgroup=vimMenuName,vimMenuPriority,vimMenuMod contains=vimMapModKey,vimMapModErr 1551 syn keyword vimMenuStatus enable disable nextgroup=vimMenuName skipwhite 1552 syn match vimMenuBang "\a\@1<=!" contained skipwhite nextgroup=vimMenuName,vimMenuMod 1553 1554 syn region vimMenutranslate 1555 \ matchgroup=vimCommand start="\<menut\%[ranslate]\>" 1556 \ skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ 1557 \ end="$" matchgroup=vimCmdSep end="|" matchgroup=vimMenuClear end="\<clear\ze\s*\%(["#|]\|$\)" 1558 \ contains=@vimContinue,vimMenutranslateName keepend transparent 1559 " oneline is sufficient to match the current formatting in runtime/lang/*.vim 1560 syn match vimMenutranslateName "\%(\\\s\|\S\)\+" contained contains=vimMenuNotation,vimNotation 1561 syn match vimMenutranslateComment +".*+ contained containedin=vimMenutranslate 1562 1563 " If, While and Return: {{{2 1564 " ==================== 1565 syn match vimNotFunc "\%#=1\<\%(if\|el\%[seif]\|retu\%[rn]\|while\)\>" skipwhite nextgroup=@vimExprList,vimNotation 1566 syn match vimElse "\<el\%[se]\>" skipwhite nextgroup=vimComment,vim9Comment 1567 syn match vimEndif "\<en\%[dif]\>" skipwhite nextgroup=vimComment,vim9Comment 1568 1569 " Angle-Bracket Notation: (tnx to Michael Geddes) {{{2 1570 " ====================== 1571 syn case ignore 1572 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}x\=\%(f\d\{1,2}\|[^ \t:]\|space\|bar\|bslash\|nl\|newline\|lf\|linefeed\|cr\|retu\%[rn]\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|csi\|right\|paste\%(start\|end\)\|left\|help\|undo\|k\=insert\|ins\|mouse\|[kz]\=home\|[kz]\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\%(page\)\=\%(\|down\|up\|k\d\>\)\)>" contains=vimBracket 1573 1574 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(net\|dec\|jsb\|pterm\|urxvt\|sgr\)mouse>" contains=vimBracket 1575 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}\%(left\|middle\|right\)\%(mouse\|drag\|release\)>" contains=vimBracket 1576 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}left\%(mouse\|release\)nm>" contains=vimBracket 1577 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}x[12]\%(mouse\|drag\|release\)>" contains=vimBracket 1578 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}sgrmouserelease>" contains=vimBracket 1579 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}mouse\%(up\|down\|move\)>" contains=vimBracket 1580 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd2-4]-\)\{0,4}scrollwheel\%(up\|down\|right\|left\)>" contains=vimBracket 1581 1582 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(sid\|nop\|nul\|lt\|drop\)>" contains=vimBracket 1583 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%(snr\|plug\|cursorhold\|ignore\|cmd\|scriptcmd\|focus\%(gained\|lost\)\)>" contains=vimBracket 1584 " syn match vimNotation contained '\%(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1 contains=vimBracket 1585 syn match vimNotation contained '\%#=1\%(\\\|<lt>\)\=<\%([fq]-\)\=\%(line[12]\|count\|bang\|reg\|args\|mods\|lt\)>' contains=vimBracket skipwhite nextgroup=vimSubst1 1586 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([cas]file\|abuf\|amatch\|cexpr\|cword\|cWORD\|client\|stack\|script\|sf\=lnum\)>" contains=vimBracket 1587 syn match vimNotation contained "\%#=1\%(\\\|<lt>\)\=<\%([scamd]-\)\{0,4}char-\%(\d\+\|0\o\+\|0x\x\+\)>" contains=vimBracket 1588 1589 syn match vimBracket contained "[\\<>]" 1590 syn case match 1591 1592 " User Command Highlighting: {{{2 1593 syn match vimUsrCmd '^\s*\zs\u\%(\w*\)\@>\%([<.(#[]\|\s\+\%([-+*/%]\=\|\.\.\)=\)\@!' 1594 1595 " Vim user commands 1596 1597 " Compiler plugins 1598 syn match vimCompilerSet "\<CompilerSet\>" skipwhite nextgroup=vimSetArgs 1599 1600 " runtime/makemenu.vim 1601 syn match vimSynMenu "\<SynMenu\>" skipwhite nextgroup=vimSynMenuPath 1602 syn match vimSynMenuPath contained ".*\ze:" nextgroup=vimSynMenuColon contains=vimMenuNotation 1603 syn match vimSynMenuColon contained ":" nextgroup=vimSynMenuName 1604 syn match vimSynMenuName contained "\w\+" 1605 1606 " runtime/syntax/syncolor.vim 1607 syn match vimSynColor "\<SynColor\>" skipwhite nextgroup=vimSynColorGroup 1608 syn match vimSynColorGroup contained "\<\h\w*\>" skipwhite nextgroup=vimHiKeyList contains=vimGroup 1609 syn match vimSynLink "\<SynLink\>" skipwhite nextgroup=vimSynLinkGroup 1610 syn match vimSynLinkGroup contained "\<\h\w*\>" skipwhite nextgroup=vimGroup contains=vimGroup 1611 1612 syn cluster vimExUserCmdList contains=vimCompilerSet,vimSynColor,vimSynLink,vimSynMenu 1613 1614 " Errors And Warnings: {{{2 1615 " ==================== 1616 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror") 1617 syn match vimFunctionError contained "[[:space:]!]\@1<=\<[a-z0-9]\w\{-}\ze\s*(" 1618 syn match vimFunctionError contained "\%(<[sS][iI][dD]>\|[sg]:\)\d\w\{-}\ze\s*(" 1619 syn match vimElseIfErr "\<else\s\+if\>" 1620 syn match vimBufnrWarn /\<bufnr\s*(\s*["']\.['"]\s*)/ 1621 endif 1622 1623 " Match: {{{2 1624 " ===== 1625 syn match vimMatch "\<\%([1-3]\s*\)\=mat\%[ch]\>" skipwhite nextgroup=vimMatchGroup,vimMatchNone contains=vimCount 1626 syn match vimMatchGroup contained "[[:alnum:]._-]\+" skipwhite nextgroup=vimMatchPattern 1627 syn case ignore 1628 syn keyword vimMatchNone contained none 1629 syn case match 1630 syn region vimMatchPattern contained 1631 \ matchgroup=Delimiter 1632 \ start="\z([!#$%&'()*+,-./:;<=>?@[\]^_`{}~]\)" 1633 \ skip="\\\\\|\\\z1" 1634 \ end="\z1" 1635 \ contains=@vimSubstList 1636 \ oneline 1637 1638 " Normal: {{{2 1639 " ====== 1640 syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang 1641 syn region vimNormalArg contained start="\S" skip=+\n\s*\%(\\\|["#]\\ \)+ end="$" contains=@vimContinue 1642 1643 " Profile: {{{2 1644 " ======= 1645 syn match vimProfileBang contained "\a\@1<=!" skipwhite nextgroup=vimProfileArg 1646 syn keyword vimProfileArg contained start skipwhite nextgroup=vimProfilePattern 1647 syn keyword vimProfileArg contained func skipwhite nextgroup=vimProfilePattern 1648 syn keyword vimProfileArg contained file skipwhite nextgroup=vimProfilePattern 1649 syn keyword vimProfileArg contained stop pause skipwhite nextgroup=vimCmdSep,@vimComment 1650 syn keyword vimProfileArg contained continue dump skipwhite nextgroup=vimCmdSep,@vimComment 1651 " TODO: match file pattern 1652 syn region vimProfilePattern contained 1653 \ start="\S" 1654 \ skip=+\\[|"#]+ 1655 \ end="$" end=+\ze\s*[|"#]+ 1656 \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 1657 syn match vimProfile "\<prof\%[ile]\>" skipwhite nextgroup=vimProfileBang,vimProfileArg 1658 1659 syn keyword vimProfdelArg contained func skipwhite nextgroup=vimProfilePattern 1660 syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern 1661 syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment 1662 syn match vimProfdel "\<profd\%[el]\>" skipwhite nextgroup=vimProfdelArg 1663 1664 " Prompt{find,repl}: {{{2 1665 " ================= 1666 syn region vimPromptArg contained 1667 \ start="\S" 1668 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 1669 \ end="$" 1670 \ contains=@vimContinue 1671 syn keyword vimPrompt promptf[ind] promptr[epl] skipwhite nextgroup=vimPromptArg 1672 1673 " Redir: {{{2 1674 " ===== 1675 syn match vimRedir "\<redir\=\>" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd 1676 syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator 1677 1678 syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile 1679 syn region vimRedirFile contained 1680 \ start="\S" 1681 \ matchgroup=Normal 1682 \ end="\s*$" 1683 \ end="\s*\ze[|"]" 1684 \ nextgroup=vimCmdSep,vimComment 1685 \ contains=vimSpecFile 1686 syn match vimRedirRegisterOperator contained ">>\=" 1687 syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator 1688 syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar 1689 syn keyword vimRedirEnd contained END 1690 1691 " Sleep: {{{2 1692 " ===== 1693 syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg 1694 syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg 1695 syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>" 1696 1697 " Sort: {{{2 1698 " ==== 1699 syn match vimSort "\<sort\=\>" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep 1700 syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep 1701 syn match vimSortOptionsError contained "\a\+" 1702 syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep 1703 syn region vimSortPattern contained 1704 \ matchgroup=Delimiter 1705 \ start="\z([^[:space:][:alpha:]|]\)" 1706 \ skip="\\\\\|\\\z1" 1707 \ end="\z1" 1708 \ skipwhite nextgroup=@vimSortOptions,vimCmdSep 1709 \ contains=@vimSubstList 1710 \ oneline 1711 1712 syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError 1713 1714 " Terminal: {{{2 1715 " ======== 1716 syn match vimTerminal "\<ter\%[minal]\>" skipwhite nextgroup=vimTerminalOptions,vimTerminalCommand 1717 syn match vimTerminal +\<ter\%[minal]\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimTerminalOptions,vimTerminalCommand,@vimTerminalContinue 1718 1719 syn match vimTerminalContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace 1720 syn match vimTerminalContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimTerminalContinue,vimTerminalOptions,vimTerminalCommand contains=vimWhitespace 1721 syn cluster vimTerminalContinue contains=vimTerminalContinue,vimTerminalContinueComment 1722 1723 syn region vimTerminalCommand contained 1724 \ start="\S" 1725 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 1726 \ end="$" 1727 \ contains=@vimContinue 1728 1729 syn region vimTerminalOptions contained 1730 \ start="++" 1731 \ skip=/\s\+++\|\%(\n\|^\)\s*\%(\\\|["#]\\ \)/ 1732 \ end="\s" 1733 \ end="$" 1734 \ skipwhite nextgroup=vimTerminalCommand 1735 \ contains=@vimContinue,vimTerminalOption 1736 \ transparent 1737 1738 syn match vimTerminalOption contained "++\%(\%(no\)\=close\|open\|curwin\|hidden\|norestore\|shell\)\>" 1739 syn match vimTerminalOption contained "++kill=" nextgroup=vimTerminalKillOptionArg 1740 syn match vimTerminalOption contained "++\%(rows\|cols\)=" nextgroup=vimTerminalSizeOptionArg 1741 syn match vimTerminalOption contained "++eof=" nextgroup=vimTerminalEofOptionArg 1742 syn match vimTerminalOption contained "++type=" nextgroup=vimTerminalTypeOptionArg 1743 syn match vimTerminalOption contained "++api=" nextgroup=vimTerminalApiOptionArg 1744 1745 syn match vimTerminalApiOptionArg contained "\<\S\+\>" 1746 syn match vimTerminalEofOptionArg contained "\<\S\+\>" 1747 syn match vimTerminalSizeOptionArg contained "\<\d\+\>" 1748 syn keyword vimTerminalKillOptionArg contained term hup quit int kill 1749 syn match vimTerminalKillOptionArg contained "\<\d\+\>" 1750 syn keyword vimTerminalTypeOptionArg contained conpty winpty 1751 1752 " Uniq: {{{2 1753 " ==== 1754 syn match vimUniq "\<uniq\=\>" skipwhite nextgroup=vimUniqBang,@vimUniqOptions,vimUniqPattern,vimCmdSep 1755 syn match vimUniqBang contained "\a\@1<=!" skipwhite nextgroup=@vimUniqOptions,vimUniqPattern,vimCmdSep 1756 syn match vimUniqOptionsError contained "\a\+" 1757 syn match vimUniqOptions contained "\<[ilur]*\>" skipwhite nextgroup=vimUniqPattern,vimCmdSep 1758 syn region vimUniqPattern contained 1759 \ matchgroup=Delimiter 1760 \ start="\z([^[:space:][:alpha:]|]\)" 1761 \ skip="\\\\\|\\\z1" 1762 \ end="\z1" 1763 \ skipwhite nextgroup=@vimUniqOptions,vimCmdSep 1764 \ contains=@vimSubstList 1765 \ oneline 1766 1767 syn cluster vimUniqOptions contains=vimUniqOptions,vimUniqOptionsError 1768 1769 " Wincmd: {{{2 1770 " ====== 1771 syn match vimWincmd "\<winc\%[md]\>" skipwhite nextgroup=vimWincmdArg 1772 " TODO: consider extracting this list from the help file 1773 syn match vimWincmdArg contained 1774 \ "\<[sSvnqojkhlwWtbpPrRxKJHLTfFz]\>\|[\^:=\-+_<>|\]}]\|\<g\s\+[\]}]\|\<g[fFtT]\>" 1775 \ skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment 1776 1777 " only handles oneline assignments 1778 Vim9 syn match vimWincmd "\s\=\<winc\%[md]\>\ze\s\+=\s*\%([#|]\|$\)" skipwhite nextgroup=vimWincmdArg 1779 1780 " Syntax: {{{2 1781 "======= 1782 syn region vimGroupList contained 1783 \ start="\S" 1784 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 1785 "\ need to consume the whitespace 1786 \ end="\s"he=e-1 1787 \ end="$" 1788 \ contains=@vimGroupListContinue,vimGroupSpecial,vimGroupListContinueComma 1789 syn keyword vimGroupSpecial contained ALL ALLBUT CONTAINED TOP 1790 syn match vimGroupListComma contained "," 1791 syn match vimGroupListContinueComma contained "\s\+,\s*\|,\s\+" contains=vimGroupListComma 1792 syn match vimGroupListContinueComma contained "\s*,\s*\%(\n\s*\%(\\\s\+\|["#]\\ .*\)\)\+" contains=@vimGroupListContinue,vimGroupListComma 1793 1794 syn match vimGroupListEquals contained "=" skipwhite skipnl nextgroup=vimGroupListContinueStart,vimGroupList 1795 " the first continuation line does not terminate the list at whitepace after \ 1796 syn match vimGroupListContinueStart contained "^\%(\s*["#]\\ .*\n\)*\s*\\\s\+" skipwhite nextgroup=vimGroupList contains=@vimGroupListContinue transparent 1797 1798 syn match vimGroupListContinue contained "^\s*\\" skipwhite skipnl nextgroup=@vimGroupListContinue,vimGroupListContinueComma contains=vimWhitespace 1799 syn match vimGroupListContinueComment contained '^\s*["#]\\ .*' skipwhite skipnl nextgroup=@vimGroupListContinue contains=vimWhitespace 1800 syn cluster vimGroupListContinue contains=vimGroupListContinue,vimGroupListContinueComment 1801 1802 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror") 1803 syn match vimSynError contained "\i\+" 1804 endif 1805 syn match vimSynContains contained "\<contains\>" skipwhite nextgroup=vimGroupListEquals 1806 syn match vimSynContainedin contained "\<containedin\>" skipwhite nextgroup=vimGroupListEquals 1807 syn match vimSynNextgroup contained "\<nextgroup\>" skipwhite nextgroup=vimGroupListEquals 1808 if has("conceal") 1809 " no whitespace allowed after '=' 1810 syn match vimSynCchar contained "\<cchar=" nextgroup=vimSynCcharValue 1811 syn match vimSynCcharValue contained "\S" 1812 endif 1813 1814 syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,@vimComment 1815 syn cluster vimFunctionBodyList add=vimSyntax 1816 1817 " Syntax: case {{{2 1818 syn keyword vimSynType contained case skipwhite nextgroup=vimSynCase,vimSynCaseError 1819 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror") 1820 syn match vimSynCaseError contained "\i\+" 1821 endif 1822 syn keyword vimSynCase contained ignore match 1823 1824 " Syntax: clear {{{2 1825 syn keyword vimSynType contained clear 1826 1827 " Syntax: cluster {{{2 1828 syn keyword vimSynType contained cluster skipwhite nextgroup=vimClusterName 1829 syn region vimClusterName contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="$\||" contains=@vimContinue,vimGroupAdd,vimGroupRem,vimSynContains,vimSynError 1830 syn match vimGroupAdd contained "\<add\>" skipwhite nextgroup=vimGroupListEquals 1831 syn match vimGroupRem contained "\<remove\>" skipwhite nextgroup=vimGroupListEquals 1832 1833 " Syntax: conceal {{{2 1834 syn match vimSynType contained "\<conceal\>" skipwhite nextgroup=vimSynConceal,vimSynConcealError 1835 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynconcealerror") 1836 syn match vimSynConcealError contained "\i\+" 1837 endif 1838 syn keyword vimSynConceal contained on off 1839 1840 " Syntax: foldlevel {{{2 1841 syn keyword vimSynType contained foldlevel skipwhite nextgroup=vimSynFoldlevel,vimSynFoldlevelError 1842 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynfoldlevelerror") 1843 syn match vimSynFoldlevelError contained "\i\+" 1844 endif 1845 syn keyword vimSynFoldlevel contained start minimum 1846 1847 " Syntax: iskeyword {{{2 1848 syn keyword vimSynType contained iskeyword skipwhite nextgroup=vimSynIskeyword 1849 syn keyword vimSynIskeyword contained clear 1850 syn match vimSynIskeyword contained "\S\+" contains=vimSynIskeywordSep 1851 syn match vimSynIskeywordSep contained "," 1852 1853 " Syntax: include {{{2 1854 syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeCluster 1855 syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>" 1856 1857 " Syntax: keyword {{{2 1858 syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin 1859 syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion 1860 syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup 1861 syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>" 1862 1863 " Syntax: match {{{2 1864 syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment 1865 syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion 1866 syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynMtchGroup 1867 syn match vimSynMtchOpt contained "\%#=1\<\%(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>" 1868 1869 " Syntax: off and on {{{2 1870 syn keyword vimSynType contained enable list manual off on reset 1871 1872 " Syntax: region {{{2 1873 syn cluster vimSynRegPatGroup contains=@vimContinue,vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation 1874 syn cluster vimSynRegGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp 1875 syn keyword vimSynType contained region skipwhite nextgroup=vimSynRegion 1876 syn region vimSynRegion contained keepend matchgroup=vimGroupName start="\h\w*" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynRegGroup 1877 syn match vimSynRegOpt contained "\%#=1\<\%(conceal\%(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>" 1878 syn match vimSynReg contained "\<\%(start\|skip\|end\)=" nextgroup=vimSynRegPat 1879 syn match vimSynMtchGrp contained "matchgroup=" nextgroup=vimGroup,vimHLGroup,vimOnlyHLGroup,nvimHLGroup 1880 syn region vimSynRegPat contained extend start="\z([-`~!@#$%^&*_=+;:'",./?]\)" skip=/\\\\\|\\\z1\|\n\s*\%(\\\|"\\ \)/ end="\z1" contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg 1881 syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\=" 1882 syn match vimSynPatMod contained "\%#=1\%(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\%([-+]\d\+\)\=," nextgroup=vimSynPatMod 1883 syn match vimSynPatMod contained "lc=\d\+" 1884 syn match vimSynPatMod contained "lc=\d\+," nextgroup=vimSynPatMod 1885 syn region vimSynPatRange contained start="\[" skip="\\\\\|\\]" end="]" 1886 syn match vimSynNotPatRange contained "\\\\\|\\\[" 1887 syn match vimMtchComment contained '"[^"]\+$' 1888 1889 " Syntax: spell {{{2 1890 syn keyword vimSynType contained spell skipwhite nextgroup=vimSynSpell,vimSynSpellError 1891 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynspellerror") 1892 syn match vimSynSpellError contained "\i\+" 1893 endif 1894 syn keyword vimSynSpell contained default notoplevel toplevel 1895 1896 " Syntax: sync {{{2 1897 " ============ 1898 syn keyword vimSynType contained sync skipwhite nextgroup=vimSyncClear,vimSyncMatch,vimSyncError,vimSyncRegion,vimSyncArgs 1899 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror") 1900 syn match vimSyncError contained "\i\+" 1901 endif 1902 1903 syn region vimSyncArgs contained start="\S" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=vimSyncLines,vimSyncLinebreak,vimSyncLinecont,vimSyncFromstart,vimSyncCcomment 1904 1905 syn keyword vimSyncCcomment contained ccomment skipwhite nextgroup=vimGroupName 1906 syn keyword vimSyncClear contained clear skipwhite nextgroup=vimSyncGroupName 1907 syn keyword vimSyncFromstart contained fromstart 1908 syn keyword vimSyncMatch contained match skipwhite nextgroup=vimSyncGroupName 1909 syn keyword vimSyncRegion contained region skipwhite nextgroup=vimSynRegion 1910 syn match vimSyncLinebreak contained "\<linebreaks=" nextgroup=vimNumber 1911 syn keyword vimSyncLinecont contained linecont skipwhite nextgroup=vimSynRegPat 1912 syn match vimSyncLines contained "\<lines=" nextgroup=vimNumber 1913 syn match vimSyncLines contained "\<minlines=" nextgroup=vimNumber 1914 syn match vimSyncLines contained "\<maxlines=" nextgroup=vimNumber 1915 syn match vimSyncGroupName contained "\<\h\w*\>" skipwhite nextgroup=vimSyncKey 1916 syn match vimSyncKey contained "\<grouphere\>" skipwhite nextgroup=vimSyncGroup 1917 syn match vimSyncKey contained "\<groupthere\>" skipwhite nextgroup=vimSyncGroup 1918 syn match vimSyncGroup contained "\<\h\w*\>" skipwhite nextgroup=vimSynRegPat,vimSyncNone 1919 syn keyword vimSyncNone contained NONE 1920 1921 " Syntime: {{{2 1922 " ======= 1923 syn keyword vimSyntimeArg contained on off clear report skipwhite nextgroup=vimComment,vim9Comment,vimCmdSep 1924 syn keyword vimSyntime synti[me] skipwhite nextgroup=vimSyntimeArg 1925 " Additional IsCommand: here by reasons of precedence {{{2 1926 " ==================== 1927 syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation 1928 1929 " Highlighting: {{{2 1930 " ============ 1931 syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,@vimComment 1932 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror") 1933 syn match vimHiCtermError contained "\D\i*" 1934 endif 1935 syn match vimHighlight "\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster 1936 syn match vimHiBang contained "\a\@1<=!" skipwhite nextgroup=@vimHighlightCluster 1937 1938 syn case ignore 1939 " Conceal is a generated low-priority match 1940 syn match vimHiGroup contained "\%(\<Conceal\>\)\@!\i\+" 1941 syn keyword vimHiNone contained NONE 1942 syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl underdashed underdotted underdouble 1943 syn keyword vimFgBgAttrib contained none bg background fg foreground 1944 syn case match 1945 syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib 1946 syn match vimHiAttribList contained "\i\+,"he=e-1 contains=vimHiAttrib nextgroup=vimHiAttribList 1947 syn case ignore 1948 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 1949 syn match vimHiCtermColor contained "\<color\d\{1,3}\>" 1950 syn case match 1951 1952 syn match vimHiFontname contained "[a-zA-Z\-*]\+" 1953 syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'" 1954 syn match vimHiGuiRgb contained "#\x\{6}" 1955 1956 " Highlighting: hi group key=arg ... {{{2 1957 syn cluster vimHiCluster contains=vimGroup,vimHLGroup,vimHiBlend,vimHiGroup,vimHiNone,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiCtermfont,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation,vimComment,vim9comment 1958 syn region vimHiKeyList contained start="\i\+" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster 1959 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror") 1960 syn match vimHiKeyError contained "\i\+="he=e-1 1961 endif 1962 syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList 1963 syn match vimHiStartStop contained "\c\%(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption 1964 syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList 1965 syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError 1966 syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError 1967 syn match vimHiCtermfont contained "\cctermfont="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError 1968 syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList 1969 syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname 1970 syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib 1971 syn match vimHiTermcap contained "\S\+" contains=vimNotation 1972 syn match vimHiBlend contained "\cblend="he=e-1 nextgroup=vimHiNmbr 1973 syn match vimHiNmbr contained '\d\+' 1974 1975 " Highlight: clear {{{2 1976 syn keyword vimHiClear contained clear skipwhite nextgroup=vimGroup,vimHLGroup,vimHiGroup 1977 1978 " Highlight: link {{{2 1979 " see tst24 (hi def vs hi) (Jul 06, 2018) 1980 "syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation 1981 " TODO: simplify and allow line continuations --djk 1982 syn region vimHiLink contained matchgroup=Type start="\%(\<hi\%[ghlight]!\=\s\+\)\@<=\%(\%(def\%[ault]\s\+\)\=link\>\|\<def\%[ault]\>\)" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimHiCluster 1983 1984 " Control Characters: {{{2 1985 " ================== 1986 syn match vimCtrlChar "[--]" 1987 1988 " Embedded Scripts: {{{2 1989 " ================ 1990 " perl,ruby : Benoit Cerrina 1991 " python,tcl : Johannes Zellner 1992 " mzscheme, lua : Charles Campbell 1993 1994 " Allows users to specify the type of embedded script highlighting 1995 " they want: (lua/mzscheme/perl/python/ruby/tcl support) 1996 " g:vimsyn_embed == 0 : don't embed any scripts 1997 " g:vimsyn_embed =~# 'l' : embed Lua 1998 " g:vimsyn_embed =~# 'm' : embed MzScheme 1999 " g:vimsyn_embed =~# 'p' : embed Perl 2000 " g:vimsyn_embed =~# 'P' : embed Python 2001 " g:vimsyn_embed =~# 'r' : embed Ruby 2002 " g:vimsyn_embed =~# 't' : embed Tcl 2003 2004 let s:interfaces = get(g:, "vimsyn_embed", "l") 2005 2006 " [-- lua --] {{{3 2007 if s:interfaces =~# 'l' 2008 syn include @vimLuaScript syntax/lua.vim 2009 unlet b:current_syntax 2010 endif 2011 2012 syn keyword vimLua lua skipwhite nextgroup=vimLuaHeredoc,vimLuaStatement 2013 syn keyword vimLua luado skipwhite nextgroup=vimLuaStatement 2014 syn keyword vimLua luafile 2015 2016 syn region vimLuaStatement contained 2017 \ start="\S" 2018 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2019 \ end="$" 2020 \ contains=@vimLuaScript,@vimContinue 2021 VimFoldl syn region vimLuaHeredoc contained 2022 \ matchgroup=vimScriptHeredocStart 2023 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2024 \ matchgroup=vimScriptHeredocStop 2025 \ end=+^\z1$+ 2026 \ contains=@vimLuaScript 2027 VimFoldl syn region vimLuaHeredoc contained 2028 \ matchgroup=vimScriptHeredocStart 2029 \ start=+<<\ze\s*$+ 2030 \ matchgroup=vimScriptHeredocStop 2031 \ end=+^\.$+ 2032 \ contains=@vimLuaScript 2033 VimFoldl syn region vimLuaHeredoc contained 2034 \ matchgroup=vimScriptHeredocStart 2035 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2036 \ matchgroup=vimScriptHeredocStop 2037 \ end=+^\z1\=\z2$+ 2038 \ contains=@vimLuaScript 2039 VimFoldl syn region vimLuaHeredoc contained 2040 \ matchgroup=vimScriptHeredocStart 2041 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2042 \ matchgroup=vimScriptHeredocStop 2043 \ end=+^\z1\=\.$+ 2044 \ contains=@vimLuaScript 2045 2046 " [-- mzscheme --] {{{3 2047 if s:interfaces =~# 'm' 2048 let s:iskKeep = &l:isk 2049 syn include @vimMzSchemeScript syntax/scheme.vim 2050 unlet b:current_syntax 2051 let &l:isk = s:iskKeep 2052 endif 2053 2054 syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement 2055 syn keyword vimMzScheme mzf[ile] 2056 2057 syn region vimMzSchemeStatement contained 2058 \ start="\S" 2059 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2060 \ end="$" 2061 \ contains=@vimMzSchemeScript,@vimContinue 2062 VimFoldm syn region vimMzSchemeHeredoc contained 2063 \ matchgroup=vimScriptHeredocStart 2064 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2065 \ matchgroup=vimScriptHeredocStop 2066 \ end=+^\z1$+ 2067 \ contains=@vimMzSchemeScript 2068 VimFoldm syn region vimMzSchemeHeredoc contained 2069 \ matchgroup=vimScriptHeredocStart 2070 \ start=+<<\ze\s*$+ 2071 \ matchgroup=vimScriptHeredocStop 2072 \ end=+^\.$+ 2073 \ contains=@vimMzSchemeScript 2074 VimFoldm syn region vimMzSchemeHeredoc contained 2075 \ matchgroup=vimScriptHeredocStart 2076 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2077 \ matchgroup=vimScriptHeredocStop 2078 \ end=+^\z1\=\z2$+ 2079 \ contains=@vimMzSchemeScript 2080 VimFoldm syn region vimMzSchemeHeredoc contained 2081 \ matchgroup=vimScriptHeredocStart 2082 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2083 \ matchgroup=vimScriptHeredocStop 2084 \ end=+^\z1\=\.$+ 2085 \ contains=@vimMzSchemeScript 2086 2087 " [-- perl --] {{{3 2088 if s:interfaces =~# 'p' 2089 syn include @vimPerlScript syntax/perl.vim 2090 unlet b:current_syntax 2091 endif 2092 2093 syn keyword vimPerl pe[rl] skipwhite nextgroup=vimPerlHeredoc,vimPerlStatement 2094 syn keyword vimPerl perld[o] skipwhite nextgroup=vimPerlStatement 2095 2096 syn region vimPerlStatement contained 2097 \ start="\S" 2098 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2099 \ end="$" 2100 \ contains=@vimPerlScript,@vimContinue 2101 VimFoldp syn region vimPerlHeredoc contained 2102 \ matchgroup=vimScriptHeredocStart 2103 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2104 \ matchgroup=vimScriptHeredocStop 2105 \ end=+^\z1$+ contains=@vimPerlScript 2106 VimFoldp syn region vimPerlHeredoc contained 2107 \ matchgroup=vimScriptHeredocStart 2108 \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop 2109 \ end=+^\.$+ 2110 \ contains=@vimPerlScript 2111 VimFoldp syn region vimPerlHeredoc contained 2112 \ matchgroup=vimScriptHeredocStart 2113 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2114 \ matchgroup=vimScriptHeredocStop 2115 \ end=+^\z1\=\z2$+ 2116 \ contains=@vimPerlScript 2117 VimFoldp syn region vimPerlHeredoc contained 2118 \ matchgroup=vimScriptHeredocStart 2119 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2120 \ matchgroup=vimScriptHeredocStop 2121 \ end=+^\z1\=\.$+ 2122 \ contains=@vimPerlScript 2123 2124 " [-- python --] {{{3 2125 if s:interfaces =~# 'P' 2126 syn include @vimPythonScript syntax/python2.vim 2127 unlet b:current_syntax 2128 endif 2129 2130 syn keyword vimPython py[thon] skipwhite nextgroup=vimPythonHeredoc,vimPythonStatement 2131 syn keyword vimPython pydo skipwhite nextgroup=vimPythonStatement 2132 syn keyword vimPython pyfile 2133 2134 syn region vimPythonStatement contained 2135 \ start="\S" 2136 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2137 \ end="$" 2138 \ contains=@vimPythonScript,@vimContinue 2139 VimFoldP syn region vimPythonHeredoc contained 2140 \ matchgroup=vimScriptHeredocStart 2141 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2142 \ matchgroup=vimScriptHeredocStop 2143 \ end=+^\z1$+ 2144 \ contains=@vimPythonScript 2145 VimFoldP syn region vimPythonHeredoc contained 2146 \ matchgroup=vimScriptHeredocStart 2147 \ start=+<<\ze\s*$+ 2148 \ matchgroup=vimScriptHeredocStop 2149 \ end=+^\.$+ 2150 \ contains=@vimPythonScript 2151 VimFoldP syn region vimPythonHeredoc contained 2152 \ matchgroup=vimScriptHeredocStart 2153 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2154 \ matchgroup=vimScriptHeredocStop 2155 \ end=+^\z1\=\z2$+ 2156 \ contains=@vimPythonScript 2157 VimFoldP syn region vimPythonHeredoc contained 2158 \ matchgroup=vimScriptHeredocStart 2159 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2160 \ matchgroup=vimScriptHeredocStop 2161 \ end=+^\z1\=\.$+ 2162 \ contains=@vimPythonScript 2163 2164 " [-- python3 --] {{{3 2165 if s:interfaces =~# 'P' 2166 syn include @vimPython3Script syntax/python.vim 2167 unlet b:current_syntax 2168 endif 2169 2170 syn keyword vimPython3 python3 py3 skipwhite nextgroup=vimPython3Heredoc,vimPython3Statement 2171 syn keyword vimPython3 py3do skipwhite nextgroup=vimPython3Statement 2172 syn keyword vimPython3 py3file 2173 2174 syn region vimPython3Statement contained 2175 \ start="\S" 2176 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2177 \ end="$" 2178 \ contains=@vimPython3Script,@vimContinue 2179 VimFoldP syn region vimPython3Heredoc contained 2180 \ matchgroup=vimScriptHeredocStart 2181 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2182 \ matchgroup=vimScriptHeredocStop 2183 \ end=+^\z1$+ 2184 \ contains=@vimPython3Script 2185 VimFoldP syn region vimPython3Heredoc contained 2186 \ matchgroup=vimScriptHeredocStart 2187 \ start=+<<\ze\s*$+ 2188 \ matchgroup=vimScriptHeredocStop 2189 \ end=+^\.$+ 2190 \ contains=@vimPython3Script 2191 VimFoldP syn region vimPython3Heredoc contained 2192 \ matchgroup=vimScriptHeredocStart 2193 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2194 \ matchgroup=vimScriptHeredocStop 2195 \ end=+^\z1\=\z2$+ 2196 \ contains=@vimPython3Script 2197 VimFoldP syn region vimPython3Heredoc contained 2198 \ matchgroup=vimScriptHeredocStart 2199 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2200 \ matchgroup=vimScriptHeredocStop 2201 \ end=+^\z1\=\.$+ 2202 \ contains=@vimPython3Script 2203 2204 " [-- pythonx --] {{{3 2205 if s:interfaces =~# 'P' 2206 if &pyxversion == 2 2207 syn cluster vimPythonXScript contains=@vimPythonScript 2208 else 2209 syn cluster vimPythonXScript contains=@vimPython3Script 2210 endif 2211 endif 2212 2213 syn keyword vimPythonX pythonx pyx skipwhite nextgroup=vimPythonXHeredoc,vimPythonXStatement 2214 syn keyword vimPythonX pyxdo skipwhite nextgroup=vimPythonXStatement 2215 syn keyword vimPythonX pyxfile 2216 2217 syn region vimPythonXStatement contained 2218 \ start="\S" 2219 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2220 \ end="$" 2221 \ contains=@vimPythonXScript,@vimContinue 2222 VimFoldP syn region vimPythonXHeredoc contained 2223 \ matchgroup=vimScriptHeredocStart 2224 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2225 \ matchgroup=vimScriptHeredocStop 2226 \ end=+^\z1$+ 2227 \ contains=@vimPythonXScript 2228 VimFoldP syn region vimPythonXHeredoc contained 2229 \ matchgroup=vimScriptHeredocStart 2230 \ start=+<<\ze\s*$+ 2231 \ matchgroup=vimScriptHeredocStop 2232 \ end=+^\.$+ 2233 \ contains=@vimPythonXScript 2234 VimFoldP syn region vimPythonXHeredoc contained 2235 \ matchgroup=vimScriptHeredocStart 2236 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2237 \ matchgroup=vimScriptHeredocStop 2238 \ end=+^\z1\=\z2$+ 2239 \ contains=@vimPythonXScript 2240 VimFoldP syn region vimPythonXHeredoc contained 2241 \ matchgroup=vimScriptHeredocStart 2242 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2243 \ matchgroup=vimScriptHeredocStop 2244 \ end=+^\z1\=\.$+ 2245 \ contains=@vimPythonXScript 2246 2247 " [-- ruby --] {{{3 2248 if s:interfaces =~# 'r' 2249 let s:foldmethod = &l:foldmethod 2250 syn include @vimRubyScript syntax/ruby.vim 2251 let &l:foldmethod = s:foldmethod 2252 unlet b:current_syntax 2253 endif 2254 2255 syn keyword vimRuby rub[y] skipwhite nextgroup=vimRubyHeredoc,vimRubyStatement 2256 syn keyword vimRuby rubyd[o] skipwhite nextgroup=vimRubyStatement 2257 syn keyword vimRuby rubyf[ile] 2258 2259 syn region vimRubyStatement contained 2260 \ start="\S" 2261 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2262 \ end="$" 2263 \ contains=@vimRubyScript,@vimContinue 2264 VimFoldr syn region vimRubyHeredoc contained 2265 \ matchgroup=vimScriptHeredocStart 2266 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2267 \ matchgroup=vimScriptHeredocStop 2268 \ end=+^\z1$+ 2269 \ contains=@vimRubyScript 2270 VimFoldr syn region vimRubyHeredoc contained 2271 \ matchgroup=vimScriptHeredocStart 2272 \ start=+<<\ze\s*$+ matchgroup=vimScriptHeredocStop 2273 \ end=+^\.$+ 2274 \ contains=@vimRubyScript 2275 VimFoldr syn region vimRubyHeredoc contained 2276 \ matchgroup=vimScriptHeredocStart 2277 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2278 \ matchgroup=vimScriptHeredocStop 2279 \ end=+^\z1\=\z2$+ 2280 \ contains=@vimRubyScript 2281 VimFoldr syn region vimRubyHeredoc contained 2282 \ matchgroup=vimScriptHeredocStart 2283 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2284 \ matchgroup=vimScriptHeredocStop 2285 \ end=+^\z1\.$+ 2286 \ contains=@vimRubyScript 2287 2288 " [-- tcl --] {{{3 2289 if s:interfaces =~# 't' 2290 syn include @vimTclScript syntax/tcl.vim 2291 unlet b:current_syntax 2292 endif 2293 2294 syn keyword vimTcl tcl skipwhite nextgroup=vimTclHeredoc,vimTclStatement 2295 syn keyword vimTcl tcld[o] skipwhite nextgroup=vimTclStatement 2296 syn keyword vimTcl tclf[ile] 2297 syn region vimTclStatement contained 2298 \ start="\S" 2299 \ skip=+\n\s*\%(\\\|["#]\\ \)+ 2300 \ end="$" 2301 \ contains=@vimTclScript,@vimContinue 2302 VimFoldt syn region vimTclHeredoc contained 2303 \ matchgroup=vimScriptHeredocStart 2304 \ start=+<<\s*\z(\S\+\)\ze\s*$+ 2305 \ matchgroup=vimScriptHeredocStop 2306 \ end=+^\z1$+ 2307 \ contains=@vimTclScript 2308 VimFoldt syn region vimTclHeredoc contained 2309 \ matchgroup=vimScriptHeredocStart 2310 \ start=+<<\ze\s*$+ 2311 \ matchgroup=vimScriptHeredocStop 2312 \ end=+^\.$+ 2313 \ contains=@vimTclScript 2314 VimFoldt syn region vimTclHeredoc contained 2315 \ matchgroup=vimScriptHeredocStart 2316 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\s\+\z(\S\+\)\ze\s*$+ 2317 \ matchgroup=vimScriptHeredocStop 2318 \ end=+^\z1\=\z2$+ 2319 \ contains=@vimTclScript 2320 VimFoldt syn region vimTclHeredoc contained 2321 \ matchgroup=vimScriptHeredocStart 2322 \ start=+\%(^\z(\s*\)\S.*\)\@<=<<\s*trim\ze\s*$+ 2323 \ matchgroup=vimScriptHeredocStop 2324 \ end=+^\z1\=\.$+ 2325 \ contains=@vimTclScript 2326 2327 unlet s:interfaces 2328 " Function Call Highlighting: {{{2 2329 " (following Gautam Iyer's suggestion) 2330 " ========================== 2331 syn match vimFunc contained "\<\l\w*\ze\s*(" skipwhite nextgroup=vimOperParen contains=vimFuncName 2332 syn match vimUserFunc contained "\.\@1<=\l\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs 2333 syn match vimUserFunc contained "\<\%([[:upper:]_]\|\%(\h\w*\.\)\+\h\)\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vim9MethodName,vim9Super,vim9This 2334 syn match vimUserFunc contained "\<\%(g:\)\=\%(\h\w*#\)\+\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen contains=vimVarScope 2335 syn match vimUserFunc contained "\%(\<[sgbwtlav]:\|<[sS][iI][dD]>\)\%(\h\w*\.\)*\h\w*\ze\%(\s*(\|<.*>(\)" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation 2336 2337 Vim9 syn match vim9UserFunc "^\s*\zs\%([sgbwtv]:\|<[sS][iI][dD]>\)\=\%(\h\w*[.#]\)*\h\w*\ze[<(]" skipwhite nextgroup=vimOperParen,vim9TypeArgs contains=vimVarScope,vimNotation,vim9MethodName,vim9Super,vim9This 2338 Vim9 syn match vim9Func "^\s*\zs\l\w*\ze(" skipwhite nextgroup=vimOperParen contains=vimFuncName 2339 2340 syn cluster vimFunc contains=vimFunc,vimUserFunc 2341 syn cluster vim9Func contains=vim9Func,vim9UserFunc 2342 2343 syn region vim9TypeArgs contained 2344 \ matchgroup=Delimiter 2345 \ start="<\ze\a" 2346 \ end=">" 2347 \ nextgroup=vimOperParen 2348 \ contains=@vimType 2349 \ oneline 2350 2351 " Beginners - Patterns that involve ^ {{{2 2352 " ========= 2353 Vim9 syn region vim9LineComment start=+^[ \t:]*\zs#.*$+ skip=+\n\s*\%(\\\|#\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vim9CommentTitle extend 2354 VimL syn region vimLineComment start=+^[ \t:]*\zs".*$+ skip=+\n\s*\%(\\\|"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString,vimCommentTitle extend 2355 2356 syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup 2357 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 2358 2359 " allowed anywhere in the file 2360 if !s:vim9script 2361 syn match vimShebangError "^\s*\zs#!.*" display 2362 endif 2363 syn match vimShebang "\%^#!.*" display 2364 2365 syn match vimContinue "^\s*\zs\\" 2366 syn match vimContinueComment '^\s*\zs["#]\\ .*' extend 2367 syn match vim9ContinueComment "^\s*\zs#\\ .*" extend 2368 syn cluster vimContinue contains=vimContinue,vimContinueComment 2369 syn cluster vim9Continue contains=vimContinue,vim9ContinueComment 2370 2371 syn region vimString start='^\s*\\"' end='"' oneline keepend contains=@vimStringGroup,vimContinue 2372 syn region vimString start="^\s*\\'" end="'" oneline keepend contains=vimQuoteEscape,vimContinue 2373 2374 syn match vimCommentTitleLeader '"\s\+'ms=s+1 contained 2375 syn match vim9CommentTitleLeader '#\s\+'ms=s+1 contained 2376 2377 " Searches And Globals: {{{2 2378 " ==================== 2379 VimL syn match vimSearch '^\s*[/?].*' contains=vimSearchDelim 2380 syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained 2381 Vim9 syn match vim9Search '^\s*:[/?].*' contains=vim9SearchDelim 2382 syn match vim9SearchDelim '^\s*\zs:[/?]\|[/?]$' contained contains=vimCmdSep 2383 syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1 2384 syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst1 2385 2386 " Vim9 script Regions: {{{2 2387 " ================== 2388 2389 if s:vim9script 2390 syn cluster vimLegacyTop contains=TOP,vim9LegacyHeader,vim9Comment,vim9LineComment 2391 VimFoldH syn region vim9LegacyHeader start="\%^" end="^\ze\s*vim9s\%[cript]\>" contains=@vimLegacyTop,vimComment,vimLineComment 2392 2393 syn keyword vim9Vim9ScriptArg noclear contained 2394 syn keyword vim9Vim9Script vim9s[cript] nextgroup=vim9Vim9ScriptArg skipwhite 2395 endif 2396 2397 " Synchronize (speed) {{{2 2398 "============ 2399 2400 exe "syn sync minlines=" .. get(g:, "vimsyn_minlines", 100) 2401 exe "syn sync maxlines=" .. get(g:, "vimsyn_maxlines", 200) 2402 2403 syn sync linecont "^\s\+\\" 2404 syn sync linebreaks=2 2405 syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]" 2406 2407 " ==================== 2408 " Highlighting Settings {{{2 2409 " ==================== 2410 2411 if !exists("skip_vim_syntax_inits") 2412 if !exists("g:vimsyn_noerror") 2413 hi def link vimBehaveError vimError 2414 hi def link vimCollClassErr vimError 2415 hi def link vimErrSetting vimError 2416 hi def link vimFTError vimError 2417 hi def link vimFunctionError vimError 2418 hi def link vimFunc vimError 2419 hi def link vim9Func vimError 2420 hi def link vimHiAttribList vimError 2421 hi def link vimHiCtermError vimError 2422 hi def link vimHiKeyError vimError 2423 hi def link vimMapModErr vimError 2424 hi def link vimMarkArgError vimError 2425 hi def link vimShebangError vimError 2426 hi def link vimSortOptionsError Error 2427 hi def link vimSubstFlagErr vimError 2428 hi def link vimSynCaseError vimError 2429 hi def link vimSyncError vimError 2430 hi def link vimSynConcealError vimError 2431 hi def link vimSynError vimError 2432 hi def link vimSynFoldlevelError vimError 2433 hi def link vimSynIskeywordError vimError 2434 hi def link vimSynSpellError vimError 2435 hi def link vimBufnrWarn vimWarn 2436 2437 hi def link vim9TypeAliasError vimError 2438 endif 2439 2440 hi def link vimAbb vimCommand 2441 hi def link vimAddress vimMark 2442 hi def link vimAt vimCommand 2443 hi def link vimAtArg Special 2444 hi def link vimAugroupBang vimBang 2445 hi def link vimAugroupError vimError 2446 hi def link vimAugroupKey vimCommand 2447 hi def link vimAutocmd vimCommand 2448 hi def link vimAutocmdBang vimBang 2449 hi def link vimAutocmdPatternEscape Special 2450 hi def link vimAutoEvent Type 2451 hi def link vimAutoEventGlob Type 2452 hi def link vimAutocmdBufferPattern Special 2453 hi def link vimAutocmdMod Special 2454 hi def link vimAutocmdPatternSep vimSep 2455 hi def link vimBang vimOper 2456 hi def link vimBehaveBang vimBang 2457 hi def link vimBehaveModel vimBehave 2458 hi def link vimBehave vimCommand 2459 hi def link vimBracket Delimiter 2460 hi def link vimBreakaddFunc Special 2461 hi def link vimBreakaddFile Special 2462 hi def link vimBreakaddHere Special 2463 hi def link vimBreakaddExpr Special 2464 hi def link vimBreakpointGlob Special 2465 hi def link vimBreakadd vimCommand 2466 hi def link vimBreakdel vimCommand 2467 hi def link vimBreaklist vimCommand 2468 hi def link vimCall vimCommand 2469 hi def link vimCatch vimCommand 2470 hi def link vimCd vimCommand 2471 hi def link vimCdBang vimBang 2472 hi def link vimCmplxRepeat SpecialChar 2473 hi def link vimCommand Statement 2474 hi def link vimCommandModifier vimCommand 2475 hi def link vimCommandModifierBang vimBang 2476 hi def link vimComment Comment 2477 hi def link vimCommentError vimError 2478 hi def link vimCommentString vimString 2479 hi def link vimCommentTitle PreProc 2480 hi def link vimCondHL vimCommand 2481 hi def link vimConst vimCommand 2482 hi def link vimContinue Special 2483 hi def link vimContinueComment vimComment 2484 hi def link vimContinueString vimString 2485 hi def link vimCount Number 2486 hi def link vimCtrlChar SpecialChar 2487 hi def link vimDebug vimCommand 2488 hi def link vimDebuggreedy vimCommand 2489 hi def link vimDef vimCommand 2490 hi def link vimDefBang vimBang 2491 hi def link vimDefComment vim9Comment 2492 hi def link vimDefer vimCommand 2493 hi def link vimDefParam vimVar 2494 hi def link vimDelcommand vimCommand 2495 hi def link vimDelcommandAttr vimUserCmdAttr 2496 hi def link vimDelfunction vimCommand 2497 hi def link vimDelfunctionBang vimBang 2498 hi def link vimDoautocmd vimCommand 2499 hi def link vimDoautocmdMod Special 2500 hi def link vimDoCommand vimCommand 2501 hi def link vimDoCommandBang vimBang 2502 hi def link vimEcho vimCommand 2503 hi def link vimEchohlNone vimGroup 2504 hi def link vimEchohl vimCommand 2505 hi def link vimElse vimCommand 2506 hi def link vimElseIfErr Error 2507 hi def link vimEndfunction vimCommand 2508 hi def link vimEnddef vimCommand 2509 hi def link vimEndif vimCommand 2510 hi def link vimEnvvar PreProc 2511 hi def link vimError Error 2512 hi def link vimEscape Special 2513 hi def link vimEval vimCommand 2514 hi def link vimExFilter vimCommand 2515 hi def link vimExFilterBang vimBang 2516 hi def link vimExMark vimCommand 2517 hi def link vimFBVar vimVar 2518 hi def link vimFgBgAttrib vimHiAttrib 2519 hi def link vimFuncEcho vimCommand 2520 hi def link vimFor vimCommand 2521 hi def link vimForInContinue vimContinue 2522 hi def link vimForInContinueComment vimContinueComment 2523 hi def link vimFTCmd vimCommand 2524 hi def link vimFTOption vimSynType 2525 hi def link vimFunction vimCommand 2526 hi def link vimFunctionBang vimBang 2527 hi def link vimFunctionComment vimComment 2528 hi def link vimFuncName Function 2529 hi def link vimFunctionMod Special 2530 hi def link vimFunctionParam vimVar 2531 hi def link vimFunctionParamEquals vimOper 2532 hi def link vimFunctionScope vimVarScope 2533 hi def link vimFunctionSID vimNotation 2534 hi def link vimGrep vimCommand 2535 hi def link vimGrepadd vimCommand 2536 hi def link vimGrepBang vimBang 2537 hi def link vimGroup Type 2538 hi def link vimGroupAdd vimSynOption 2539 hi def link vimGroupListEquals vimSynOption 2540 hi def link vimGroupListContinue vimContinue 2541 hi def link vimGroupListContinueComment vimContinueComment 2542 hi def link vimGroupName Normal 2543 hi def link vimGroupRem vimSynOption 2544 hi def link vimGroupSpecial Special 2545 hi def link vimHelp vimCommand 2546 hi def link vimHelpBang vimBang 2547 hi def link vimHelpgrep vimCommand 2548 hi def link vimHiAttrib PreProc 2549 hi def link vimHiBang vimBang 2550 hi def link vimHiBlend vimHiTerm 2551 hi def link vimHiClear Type 2552 hi def link vimHiCtermColor Constant 2553 hi def link vimHiCtermFgBg vimHiTerm 2554 hi def link vimHiCtermfont vimHiTerm 2555 hi def link vimHiCtermul vimHiTerm 2556 hi def link vimHiCTerm vimHiTerm 2557 hi def link vimHighlight vimCommand 2558 hi def link vimHiGroup vimGroupName 2559 hi def link vimHiGuiFgBg vimHiTerm 2560 hi def link vimHiGuiFont vimHiTerm 2561 hi def link vimHiGuiRgb vimNumber 2562 hi def link vimHiGui vimHiTerm 2563 hi def link vimHiNmbr Number 2564 hi def link vimHiNone vimGroup 2565 hi def link vimHiStartStop vimHiTerm 2566 hi def link vimHiTerm Type 2567 hi def link vimHLGroup vimGroup 2568 hi def link vimHistory vimCommand 2569 hi def link vimHistoryName Special 2570 hi def link vimImport vimCommand 2571 hi def link vimImportAutoload Special 2572 hi def link vimImportAs vimImport 2573 hi def link vimInsert vimString 2574 hi def link vim9KeymapLineComment vimKeymapLineComment 2575 hi def link vimKeymapLineComment vimComment 2576 hi def link vimKeymapTailComment vimComment 2577 hi def link vimLambdaBrace Delimiter 2578 hi def link vimLambdaOperator vimOper 2579 hi def link vimLanguage vimCommand 2580 hi def link vimLanguageCategory Special 2581 hi def link vimLanguageNameReserved Constant 2582 hi def link vimLet vimCommand 2583 hi def link vimLetHeredoc vimString 2584 hi def link vimLetHeredocStart Special 2585 hi def link vimLetHeredocStop Special 2586 hi def link vimLetRegister vimRegister 2587 hi def link vimLineComment vimComment 2588 hi def link vimLua vimCommand 2589 hi def link vimMake vimCommand 2590 hi def link vimMakeadd vimCommand 2591 hi def link vimMakeBang vimBang 2592 hi def link vimMapBang vimBang 2593 hi def link vimMapLeader vimBracket 2594 hi def link vimMapLeaderKey vimNotation 2595 hi def link vimMapModKey vimFunctionSID 2596 hi def link vimMapMod vimBracket 2597 hi def link vimMap vimCommand 2598 hi def link vimMark Number 2599 hi def link vimMarkNumber vimNumber 2600 hi def link vimMatch vimCommand 2601 hi def link vimMatchGroup vimGroup 2602 hi def link vimMatchNone vimGroup 2603 hi def link vimMenuBang vimBang 2604 hi def link vimMenuClear Special 2605 hi def link vimMenuMod vimMapMod 2606 hi def link vimMenuName PreProc 2607 hi def link vimMenu vimCommand 2608 hi def link vimMenuNotation vimNotation 2609 hi def link vimMenuPriority Number 2610 hi def link vimMenuStatus Special 2611 hi def link vimMenutranslateComment vimComment 2612 hi def link vim9MethodName vimFuncName 2613 hi def link vimMtchComment vimComment 2614 hi def link vimMzScheme vimCommand 2615 hi def link vimNonText NonText 2616 hi def link vimNormal vimCommand 2617 hi def link vimNotation Special 2618 hi def link vimNotFunc vimCommand 2619 hi def link vimNotPatSep vimString 2620 hi def link vimNumber Number 2621 hi def link vimOperError Error 2622 hi def link vimOper Operator 2623 hi def link vimOperContinue vimContinue 2624 hi def link vimOperContinueComment vimContinueComment 2625 hi def link vimOption PreProc 2626 hi def link vimOptionVar Identifier 2627 hi def link vimOptionVarName Identifier 2628 hi def link vimParenSep Delimiter 2629 hi def link vimPatSepErr vimError 2630 hi def link vimPatSepR vimPatSep 2631 hi def link vimPatSep SpecialChar 2632 hi def link vimPatSepZone vimString 2633 hi def link vimPatSepZ vimPatSep 2634 hi def link vimPattern Type 2635 hi def link vimPerl vimCommand 2636 hi def link vimPlainMark vimMark 2637 hi def link vimProfile vimCommand 2638 hi def link vimProfileArg vimSpecial 2639 hi def link vimProfileBang vimBang 2640 hi def link vimProfdel vimCommand 2641 hi def link vimProfdelArg vimSpecial 2642 hi def link vimPrompt vimCommand 2643 hi def link vimPython vimCommand 2644 hi def link vimPython3 vimCommand 2645 hi def link vimPythonX vimCommand 2646 hi def link vimQuoteEscape vimEscape 2647 hi def link vimRedir vimCommand 2648 hi def link vimRedirBang vimBang 2649 hi def link vimRedirFileOperator vimOper 2650 hi def link vimRedirRegisterOperator vimOper 2651 hi def link vimRedirVariableOperator vimOper 2652 hi def link vimRedirEnd Special 2653 hi def link vimRedirRegister vimRegister 2654 hi def link vimRegister SpecialChar 2655 hi def link vimRuby vimCommand 2656 hi def link vimScriptDelim Comment 2657 hi def link vimScriptHeredocStart vimLetHeredocStart 2658 hi def link vimScriptHeredocStop vimLetHeredocStop 2659 hi def link vimSearch vimString 2660 hi def link vimSearchDelim Delimiter 2661 hi def link vimSep Delimiter 2662 hi def link vimSet vimCommand 2663 hi def link vimSetAll vimOption 2664 hi def link vimSetBang vimBang 2665 hi def link vimSetComment vimComment 2666 hi def link vimSetMod vimOption 2667 hi def link vimSetSep vimSep 2668 hi def link vimSetTermcap vimOption 2669 hi def link vimShebang PreProc 2670 hi def link vimSleep vimCommand 2671 hi def link vimSleepArg Constant 2672 hi def link vimSleepBang vimBang 2673 hi def link vimSort vimCommand 2674 hi def link vimSortBang vimBang 2675 hi def link vimSortOptions Special 2676 hi def link vimSpecFile Identifier 2677 hi def link vimSpecFileMod vimSpecFile 2678 hi def link vimSpecial Type 2679 hi def link vimStringCont vimString 2680 hi def link vimString String 2681 hi def link vimStringEnd vimString 2682 hi def link vimStringInterpolationBrace vimEscape 2683 hi def link vimSubst1 vimSubst 2684 hi def link vimSubstCount Number 2685 hi def link vimSubstDelim Delimiter 2686 hi def link vimSubstFlags Special 2687 hi def link vimSubstSubstr SpecialChar 2688 hi def link vimSubstTwoBS vimString 2689 hi def link vimSubst vimCommand 2690 hi def link vimSynCase Type 2691 hi def link vimSyncCcomment Type 2692 hi def link vimSynCchar vimSynOption 2693 hi def link vimSynCcharValue Character 2694 hi def link vimSyncClear Type 2695 hi def link vimSyncFromstart Type 2696 hi def link vimSyncGroup vimGroupName 2697 hi def link vimSyncGroupName vimGroupName 2698 hi def link vimSyncKey Type 2699 hi def link vimSyncLinebreak Type 2700 hi def link vimSyncLinecont Type 2701 hi def link vimSyncLines Type 2702 hi def link vimSyncMatch Type 2703 hi def link vimSyncNone Type 2704 hi def link vimSynConceal Type 2705 hi def link vimSynContains vimSynOption 2706 hi def link vimSyncRegion Type 2707 hi def link vimSynFoldlevel Type 2708 hi def link vimSynIskeyword Type 2709 hi def link vimSynIskeywordSep Delimiter 2710 hi def link vimSynContainedin vimSynContains 2711 hi def link vimSynKeyOpt vimSynOption 2712 hi def link vimSynMtchGrp vimSynOption 2713 hi def link vimSynMtchOpt vimSynOption 2714 hi def link vimSynNextgroup vimSynOption 2715 hi def link vimSynNotPatRange vimSynRegPat 2716 hi def link vimSynOption Special 2717 hi def link vimSynPatRange vimString 2718 hi def link vimSynReg Type 2719 hi def link vimSynRegOpt vimSynOption 2720 hi def link vimSynRegPat vimString 2721 hi def link vimSynSpell Type 2722 hi def link vimSyntax vimCommand 2723 hi def link vimSynType vimSpecial 2724 hi def link vimSyntime vimCommand 2725 hi def link vimSyntimeArg vimSpecial 2726 hi def link vimTcl vimCommand 2727 hi def link vimTerminal vimCommand 2728 hi def link vimTerminalContinue vimContinue 2729 hi def link vimTerminalContinueComment vimContinueComment 2730 hi def link vimTerminalOption vimSpecial 2731 hi def link vimTerminalKillOptionArg Constant 2732 hi def link vimTerminalSizeOptionArg Constant 2733 hi def link vimTerminalTypeOptionArg Constant 2734 hi def link vimThrow vimCommand 2735 hi def link vimTodo Todo 2736 hi def link vimType Type 2737 hi def link vimTypeAny vimType 2738 hi def link vimTypeObject vimType 2739 hi def link vimTypeObjectBracket vimTypeObject 2740 hi def link vimUniq vimCommand 2741 hi def link vimUniqBang vimBang 2742 hi def link vimUniqOptions Special 2743 hi def link vimUnlet vimCommand 2744 hi def link vimUnletBang vimBang 2745 hi def link vimUnmap vimMap 2746 hi def link vimUserCmd vimCommand 2747 hi def link vimUserCmdAttrAddr vimSpecial 2748 hi def link vimUserCmdAttrComplete vimSpecial 2749 hi def link vimUserCmdAttrCompleteFunc vimVar 2750 hi def link vimUserCmdAttrNargs vimSpecial 2751 hi def link vimUserCmdAttrRange vimSpecial 2752 hi def link vimUserCmdAttrKey vimUserCmdAttr 2753 hi def link vimUserCmdAttr Special 2754 hi def link vimUserCmdAttrError Error 2755 hi def link vimUserCmdError Error 2756 hi def link vimUserCmdKey vimCommand 2757 hi def link vimUserFunc Normal 2758 hi def link vimVar Normal 2759 hi def link vimVarScope Identifier 2760 hi def link vimVimgrep vimCommand 2761 hi def link vimVimgrepadd vimCommand 2762 hi def link vimVimgrepBang vimBang 2763 hi def link vimVimgrepFlags Special 2764 hi def link vimVimVar Identifier 2765 hi def link vimVimVarName Identifier 2766 hi def link vimWarn WarningMsg 2767 hi def link vimWildcard Special 2768 hi def link vimWildcardBraceComma vimWildcard 2769 hi def link vimWildcardBracket vimWildcard 2770 hi def link vimWildcardBracketCaret vimWildcard 2771 hi def link vimWildcardBracketCharacter Normal 2772 hi def link vimWildcardBracketCharacter Normal 2773 hi def link vimWildcardBracketCharacterClass vimWildCard 2774 hi def link vimWildcardBracketCollatingSymbol vimWildCard 2775 hi def link vimWildcardBracketEnd vimWildcard 2776 hi def link vimWildcardBracketEquivalenceClass vimWildCard 2777 hi def link vimWildcardBracketEscape vimWildcard 2778 hi def link vimWildcardBracketHyphen vimWildcard 2779 hi def link vimWildcardBracketRightBracket vimWildcardBracketCharacter 2780 hi def link vimWildcardBracketStart vimWildcard 2781 hi def link vimWildcardEscape vimWildcard 2782 hi def link vimWildcardInterval vimWildcard 2783 hi def link vimWildcardQuestion vimWildcard 2784 hi def link vimWildcardStar vimWildcard 2785 hi def link vimWinCmd vimCommand 2786 2787 hi def link vim9Abstract vimCommand 2788 hi def link vim9Boolean Boolean 2789 hi def link vim9Class vimCommand 2790 hi def link vim9Comment Comment 2791 hi def link vim9CommentError vimError 2792 hi def link vim9CommentTitle PreProc 2793 hi def link vim9ConstructorDefParam vimVar 2794 hi def link vim9Const vimCommand 2795 hi def link vim9ContinueComment vimContinueComment 2796 hi def link vim9Enum vimCommand 2797 hi def link vim9EnumImplementedInterfaceComment vim9Comment 2798 hi def link vim9EnumImplements vim9Implements 2799 hi def link vim9EnumNameComment vim9Comment 2800 hi def link vim9EnumNameContinue vimContinue 2801 hi def link vim9EnumNameContinueComment vim9Comment 2802 hi def link vim9EnumValueListCommaComment vim9Comment 2803 hi def link vim9Export vimCommand 2804 hi def link vim9Extends Keyword 2805 hi def link vim9Final vimCommand 2806 hi def link vim9For vimCommand 2807 hi def link vim9ForInComment vim9Comment 2808 hi def link vim9Implements Keyword 2809 hi def link vim9AbstractDef vimCommand 2810 hi def link vim9Interface vimCommand 2811 hi def link vim9LambdaOperator vimOper 2812 hi def link vim9LambdaOperatorComment vim9Comment 2813 hi def link vim9LambdaParen vimParenSep 2814 hi def link vim9LhsRegister vimLetRegister 2815 hi def link vim9LhsVariable vimVar 2816 hi def link vim9LineComment vimComment 2817 hi def link vim9MethodDef vimCommand 2818 hi def link vim9MethodDefComment vimDefComment 2819 hi def link vim9MethodNameError vimFunctionError 2820 hi def link vim9Null Constant 2821 hi def link vim9Public vimCommand 2822 hi def link vim9Search vimString 2823 hi def link vim9SearchDelim Delimiter 2824 hi def link vim9Static vimCommand 2825 hi def link vim9Super Identifier 2826 hi def link vim9This Identifier 2827 hi def link vim9Type vimCommand 2828 hi def link vim9TypeEquals vimOper 2829 hi def link vim9Variable vimVar 2830 hi def link vim9VariableType vimType 2831 hi def link vim9VariableTypeAny vimTypeAny 2832 hi def link vim9VariableTypeObject vimTypeObject 2833 hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket 2834 hi def link vim9Var vimCommand 2835 hi def link vim9Vim9ScriptArg Special 2836 hi def link vim9Vim9Script vimCommand 2837 2838 hi def link vimCompilerSet vimCommand 2839 hi def link vimSynColor vimCommand 2840 hi def link vimSynLink vimCommand 2841 hi def link vimSynMenu vimCommand 2842 hi def link vimSynMenuPath vimMenuName 2843 2844 hi def link nvimAutoEvent vimAutoEvent 2845 hi def link nvimHLGroup vimHLGroup 2846 endif 2847 2848 " Current Syntax Variable: {{{2 2849 let b:current_syntax = "vim" 2850 2851 " --------------------------------------------------------------------- 2852 " Cleanup: {{{1 2853 delc Vim9 2854 delc VimL 2855 delc VimFolda 2856 delc VimFoldc 2857 delc VimFolde 2858 delc VimFoldf 2859 delc VimFoldh 2860 delc VimFoldH 2861 delc VimFoldi 2862 delc VimFoldl 2863 delc VimFoldm 2864 delc VimFoldp 2865 delc VimFoldP 2866 delc VimFoldr 2867 delc VimFoldt 2868 let &cpo = s:keepcpo 2869 unlet s:keepcpo s:vim9script 2870 " vim:ts=18 fdm=marker ft=vim