1" Vim syntax file 2" Language: Zsh shell script 3" Maintainer: Christian Brabandt <cb@256bit.org> 4" Previous Maintainer: Nikolai Weibull <now@bitwi.se> 5" Latest Revision: 2020-11-21 6" License: Vim (see :h license) 7" Repository: https://github.com/chrisbra/vim-zsh 8 9if exists("b:current_syntax") 10 finish 11endif 12 13let s:cpo_save = &cpo 14set cpo&vim 15 16function! s:ContainedGroup() 17 " needs 7.4.2008 for execute() function 18 let result='TOP' 19 " vim-pandoc syntax defines the @langname cluster for embedded syntax languages 20 " However, if no syntax is defined yet, `syn list @zsh` will return 21 " "No syntax items defined", so make sure the result is actually a valid syn cluster 22 for cluster in ['markdownHighlightzsh', 'zsh'] 23 try 24 " markdown syntax defines embedded clusters as @markdownhighlight<lang>, 25 " pandoc just uses @<lang>, so check both for both clusters 26 let a=split(execute('syn list @'. cluster), "\n") 27 if len(a) == 2 && a[0] =~# '^---' && a[1] =~? cluster 28 return '@'. cluster 29 endif 30 catch /E392/ 31 " ignore 32 endtry 33 endfor 34 return result 35endfunction 36 37let s:contained=s:ContainedGroup() 38 39syn iskeyword @,48-57,_,192-255,#,- 40if get(g:, 'zsh_fold_enable', 0) 41 setlocal foldmethod=syntax 42endif 43 44syn match zshPOSIXQuoted '\\[xX][0-9a-fA-F]\{1,2}' 45syn match zshPOSIXQuoted '\\[0-7]\{1,3}' 46syn match zshPOSIXQuoted '\\u[0-9a-fA-F]\{1,4}' 47syn match zshPOSIXQuoted '\\U[1-9a-fA-F]\{1,8}' 48syn match zshQuoted '\\.' 49syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+ 50 \ contains=zshQuoted,@zshDerefs,@zshSubst fold 51syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ fold 52syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+ 53 \ skip=+\\[\\']+ end=+'+ contains=zshPOSIXQuoted,zshQuoted 54syn match zshJobSpec '%\(\d\+\|?\=\w\+\|[%+-]\)' 55 56syn keyword zshPrecommand noglob nocorrect exec command builtin - time 57 58syn keyword zshDelimiter do done end 59 60syn keyword zshConditional if then elif else fi case in esac select 61 62syn keyword zshRepeat while until repeat 63 64syn keyword zshRepeat for foreach nextgroup=zshVariable skipwhite 65 66syn keyword zshException always 67 68syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite 69 70syn match zshKSHFunction contained '\w\S\+' 71syn match zshFunction '^\s*\k\+\ze\s*()' 72 73syn match zshOperator '||\|&&\|;\|&!\=' 74 75syn match zshRedir '\d\=\(<\|<>\|<<<\|<&\s*[0-9p-]\=\)' 76syn match zshRedir '\d\=\(>\|>>\|>&\s*[0-9p-]\=\|&>\|>>&\|&>>\)[|!]\=' 77syn match zshRedir '|&\=' 78 79syn region zshHereDoc matchgroup=zshRedir 80 \ start='<\@<!<<\s*\z([^<]\S*\)' 81 \ end='^\z1\>' 82 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString 83syn region zshHereDoc matchgroup=zshRedir 84 \ start='<\@<!<<\s*\\\z(\S\+\)' 85 \ end='^\z1\>' 86 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString 87syn region zshHereDoc matchgroup=zshRedir 88 \ start='<\@<!<<-\s*\\\=\z(\S\+\)' 89 \ end='^\s*\z1\>' 90 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString 91syn region zshHereDoc matchgroup=zshRedir 92 \ start=+<\@<!<<\s*\(["']\)\z(\S\+\)\1+ 93 \ end='^\z1\>' 94syn region zshHereDoc matchgroup=zshRedir 95 \ start=+<\@<!<<-\s*\(["']\)\z(\S\+\)\1+ 96 \ end='^\s*\z1\>' 97 98syn match zshVariable '\<\h\w*' contained 99 100syn match zshVariableDef '\<\h\w*\ze+\==' 101" XXX: how safe is this? 102syn region zshVariableDef oneline 103 \ start='\$\@<!\<\h\w*\[' end='\]\ze+\?=\?' 104 \ contains=@zshSubst 105 106syn cluster zshDerefs contains=zshShortDeref,zshLongDeref,zshDeref,zshDollarVar 107 108syn match zshShortDeref '\$[!#$*@?_-]\w\@!' 109syn match zshShortDeref '\$[=^~]*[#+]*\d\+\>' 110 111syn match zshLongDeref '\$\%(ARGC\|argv\|status\|pipestatus\|CPUTYPE\|EGID\|EUID\|ERRNO\|GID\|HOST\|LINENO\|LOGNAME\)' 112syn match zshLongDeref '\$\%(MACHTYPE\|OLDPWD OPTARG\|OPTIND\|OSTYPE\|PPID\|PWD\|RANDOM\|SECONDS\|SHLVL\|signals\)' 113syn match zshLongDeref '\$\%(TRY_BLOCK_ERROR\|TTY\|TTYIDLE\|UID\|USERNAME\|VENDOR\|ZSH_NAME\|ZSH_VERSION\|REPLY\|reply\|TERM\)' 114 115syn match zshDollarVar '\$\h\w*' 116syn match zshDeref '\$[=^~]*[#+]*\h\w*\>' 117 118syn match zshCommands '\%(^\|\s\)[.:]\ze\s' 119syn keyword zshCommands alias autoload bg bindkey break bye cap cd 120 \ chdir clone comparguments compcall compctl 121 \ compdescribe compfiles compgroups compquote 122 \ comptags comptry compvalues continue dirs 123 \ disable disown echo echotc echoti emulate 124 \ enable eval exec exit export false fc fg 125 \ functions getcap getln getopts hash history 126 \ jobs kill let limit log logout popd print 127 \ printf pushd pushln pwd r read 128 \ rehash return sched set setcap shift 129 \ source stat suspend test times trap true 130 \ ttyctl type ulimit umask unalias unfunction 131 \ unhash unlimit unset vared wait 132 \ whence where which zcompile zformat zftp zle 133 \ zmodload zparseopts zprof zpty zrecompile 134 \ zregexparse zsocket zstyle ztcp 135 136" Options, generated by: echo ${(j:\n:)options[(I)*]} | sort 137" Create a list of option names from zsh source dir: 138" #!/bin/zsh 139" topdir=/path/to/zsh-xxx 140" grep '^pindex([A-Za-z_]*)$' $topdir/Doc/Zsh/options.yo | 141" while read opt 142" do 143" echo ${${(L)opt#pindex\(}%\)} 144" done 145 146syn case ignore 147 148syn match zshOptStart /^\s*\%(\%(\%(un\)\?setopt\)\|set\s+[-+]o\)/ nextgroup=zshOption skipwhite 149syn match zshOption / 150 \ \%(\%(\<no_\?\)\?aliases\>\)\| 151 \ \%(\%(\<no_\?\)\?aliasfuncdef\>\)\|\%(\%(no_\?\)\?alias_func_def\>\)\| 152 \ \%(\%(\<no_\?\)\?allexport\>\)\|\%(\%(no_\?\)\?all_export\>\)\| 153 \ \%(\%(\<no_\?\)\?alwayslastprompt\>\)\|\%(\%(no_\?\)\?always_last_prompt\>\)\|\%(\%(no_\?\)\?always_lastprompt\>\)\| 154 \ \%(\%(\<no_\?\)\?alwaystoend\>\)\|\%(\%(no_\?\)\?always_to_end\>\)\| 155 \ \%(\%(\<no_\?\)\?appendcreate\>\)\|\%(\%(no_\?\)\?append_create\>\)\| 156 \ \%(\%(\<no_\?\)\?appendhistory\>\)\|\%(\%(no_\?\)\?append_history\>\)\| 157 \ \%(\%(\<no_\?\)\?autocd\>\)\|\%(\%(no_\?\)\?auto_cd\>\)\| 158 \ \%(\%(\<no_\?\)\?autocontinue\>\)\|\%(\%(no_\?\)\?auto_continue\>\)\| 159 \ \%(\%(\<no_\?\)\?autolist\>\)\|\%(\%(no_\?\)\?auto_list\>\)\| 160 \ \%(\%(\<no_\?\)\?automenu\>\)\|\%(\%(no_\?\)\?auto_menu\>\)\| 161 \ \%(\%(\<no_\?\)\?autonamedirs\>\)\|\%(\%(no_\?\)\?auto_name_dirs\>\)\| 162 \ \%(\%(\<no_\?\)\?autoparamkeys\>\)\|\%(\%(no_\?\)\?auto_param_keys\>\)\| 163 \ \%(\%(\<no_\?\)\?autoparamslash\>\)\|\%(\%(no_\?\)\?auto_param_slash\>\)\| 164 \ \%(\%(\<no_\?\)\?autopushd\>\)\|\%(\%(no_\?\)\?auto_pushd\>\)\| 165 \ \%(\%(\<no_\?\)\?autoremoveslash\>\)\|\%(\%(no_\?\)\?auto_remove_slash\>\)\| 166 \ \%(\%(\<no_\?\)\?autoresume\>\)\|\%(\%(no_\?\)\?auto_resume\>\)\| 167 \ \%(\%(\<no_\?\)\?badpattern\>\)\|\%(\%(no_\?\)\?bad_pattern\>\)\| 168 \ \%(\%(\<no_\?\)\?banghist\>\)\|\%(\%(no_\?\)\?bang_hist\>\)\| 169 \ \%(\%(\<no_\?\)\?bareglobqual\>\)\|\%(\%(no_\?\)\?bare_glob_qual\>\)\| 170 \ \%(\%(\<no_\?\)\?bashautolist\>\)\|\%(\%(no_\?\)\?bash_auto_list\>\)\| 171 \ \%(\%(\<no_\?\)\?bashrematch\>\)\|\%(\%(no_\?\)\?bash_rematch\>\)\| 172 \ \%(\%(\<no_\?\)\?beep\>\)\| 173 \ \%(\%(\<no_\?\)\?bgnice\>\)\|\%(\%(no_\?\)\?bg_nice\>\)\| 174 \ \%(\%(\<no_\?\)\?braceccl\>\)\|\%(\%(no_\?\)\?brace_ccl\>\)\| 175 \ \%(\%(\<no_\?\)\?braceexpand\>\)\|\%(\%(no_\?\)\?brace_expand\>\)\| 176 \ \%(\%(\<no_\?\)\?bsdecho\>\)\|\%(\%(no_\?\)\?bsd_echo\>\)\| 177 \ \%(\%(\<no_\?\)\?caseglob\>\)\|\%(\%(no_\?\)\?case_glob\>\)\| 178 \ \%(\%(\<no_\?\)\?casematch\>\)\|\%(\%(no_\?\)\?case_match\>\)\| 179 \ \%(\%(\<no_\?\)\?cbases\>\)\|\%(\%(no_\?\)\?c_bases\>\)\| 180 \ \%(\%(\<no_\?\)\?cdablevars\>\)\|\%(\%(no_\?\)\?cdable_vars\>\)\|\%(\%(no_\?\)\?cd_able_vars\>\)\| 181 \ \%(\%(\<no_\?\)\?cdsilent\>\)\|\%(\%(no_\?\)\?cd_silent\>\)\|\%(\%(no_\?\)\?cd_silent\>\)\| 182 \ \%(\%(\<no_\?\)\?chasedots\>\)\|\%(\%(no_\?\)\?chase_dots\>\)\| 183 \ \%(\%(\<no_\?\)\?chaselinks\>\)\|\%(\%(no_\?\)\?chase_links\>\)\| 184 \ \%(\%(\<no_\?\)\?checkjobs\>\)\|\%(\%(no_\?\)\?check_jobs\>\)\| 185 \ \%(\%(\<no_\?\)\?checkrunningjobs\>\)\|\%(\%(no_\?\)\?check_running_jobs\>\)\| 186 \ \%(\%(\<no_\?\)\?clobber\>\)\| 187 \ \%(\%(\<no_\?\)\?clobberempty\>\)\|\%(\%(no_\?\)\?clobber_empty\>\)\| 188 \ \%(\%(\<no_\?\)\?combiningchars\>\)\|\%(\%(no_\?\)\?combining_chars\>\)\| 189 \ \%(\%(\<no_\?\)\?completealiases\>\)\|\%(\%(no_\?\)\?complete_aliases\>\)\| 190 \ \%(\%(\<no_\?\)\?completeinword\>\)\|\%(\%(no_\?\)\?complete_in_word\>\)\| 191 \ \%(\%(\<no_\?\)\?continueonerror\>\)\|\%(\%(no_\?\)\?continue_on_error\>\)\| 192 \ \%(\%(\<no_\?\)\?correct\>\)\| 193 \ \%(\%(\<no_\?\)\?correctall\>\)\|\%(\%(no_\?\)\?correct_all\>\)\| 194 \ \%(\%(\<no_\?\)\?cprecedences\>\)\|\%(\%(no_\?\)\?c_precedences\>\)\| 195 \ \%(\%(\<no_\?\)\?cshjunkiehistory\>\)\|\%(\%(no_\?\)\?csh_junkie_history\>\)\| 196 \ \%(\%(\<no_\?\)\?cshjunkieloops\>\)\|\%(\%(no_\?\)\?csh_junkie_loops\>\)\| 197 \ \%(\%(\<no_\?\)\?cshjunkiequotes\>\)\|\%(\%(no_\?\)\?csh_junkie_quotes\>\)\| 198 \ \%(\%(\<no_\?\)\?csh_nullcmd\>\)\|\%(\%(no_\?\)\?csh_null_cmd\>\)\|\%(\%(no_\?\)\?cshnullcmd\>\)\|\%(\%(no_\?\)\?csh_null_cmd\>\)\| 199 \ \%(\%(\<no_\?\)\?cshnullglob\>\)\|\%(\%(no_\?\)\?csh_null_glob\>\)\| 200 \ \%(\%(\<no_\?\)\?debugbeforecmd\>\)\|\%(\%(no_\?\)\?debug_before_cmd\>\)\| 201 \ \%(\%(\<no_\?\)\?dotglob\>\)\|\%(\%(no_\?\)\?dot_glob\>\)\| 202 \ \%(\%(\<no_\?\)\?dvorak\>\)\| 203 \ \%(\%(\<no_\?\)\?emacs\>\)\| 204 \ \%(\%(\<no_\?\)\?equals\>\)\| 205 \ \%(\%(\<no_\?\)\?errexit\>\)\|\%(\%(no_\?\)\?err_exit\>\)\| 206 \ \%(\%(\<no_\?\)\?errreturn\>\)\|\%(\%(no_\?\)\?err_return\>\)\| 207 \ \%(\%(\<no_\?\)\?evallineno\>\)\|\%(\%(no_\?\)\?eval_lineno\>\)\| 208 \ \%(\%(\<no_\?\)\?exec\>\)\| 209 \ \%(\%(\<no_\?\)\?extendedglob\>\)\|\%(\%(no_\?\)\?extended_glob\>\)\| 210 \ \%(\%(\<no_\?\)\?extendedhistory\>\)\|\%(\%(no_\?\)\?extended_history\>\)\| 211 \ \%(\%(\<no_\?\)\?flowcontrol\>\)\|\%(\%(no_\?\)\?flow_control\>\)\| 212 \ \%(\%(\<no_\?\)\?forcefloat\>\)\|\%(\%(no_\?\)\?force_float\>\)\| 213 \ \%(\%(\<no_\?\)\?functionargzero\>\)\|\%(\%(no_\?\)\?function_argzero\>\)\|\%(\%(no_\?\)\?function_arg_zero\>\)\| 214 \ \%(\%(\<no_\?\)\?glob\>\)\| 215 \ \%(\%(\<no_\?\)\?globalexport\>\)\|\%(\%(no_\?\)\?global_export\>\)\| 216 \ \%(\%(\<no_\?\)\?globalrcs\>\)\|\%(\%(no_\?\)\?global_rcs\>\)\| 217 \ \%(\%(\<no_\?\)\?globassign\>\)\|\%(\%(no_\?\)\?glob_assign\>\)\| 218 \ \%(\%(\<no_\?\)\?globcomplete\>\)\|\%(\%(no_\?\)\?glob_complete\>\)\| 219 \ \%(\%(\<no_\?\)\?globdots\>\)\|\%(\%(no_\?\)\?glob_dots\>\)\| 220 \ \%(\%(\<no_\?\)\?glob_subst\>\)\|\%(\%(no_\?\)\?globsubst\>\)\| 221 \ \%(\%(\<no_\?\)\?globstarshort\>\)\|\%(\%(no_\?\)\?glob_star_short\>\)\| 222 \ \%(\%(\<no_\?\)\?hashall\>\)\|\%(\%(no_\?\)\?hash_all\>\)\| 223 \ \%(\%(\<no_\?\)\?hashcmds\>\)\|\%(\%(no_\?\)\?hash_cmds\>\)\| 224 \ \%(\%(\<no_\?\)\?hashdirs\>\)\|\%(\%(no_\?\)\?hash_dirs\>\)\| 225 \ \%(\%(\<no_\?\)\?hashexecutablesonly\>\)\|\%(\%(no_\?\)\?hash_executables_only\>\)\| 226 \ \%(\%(\<no_\?\)\?hashlistall\>\)\|\%(\%(no_\?\)\?hash_list_all\>\)\| 227 \ \%(\%(\<no_\?\)\?histallowclobber\>\)\|\%(\%(no_\?\)\?hist_allow_clobber\>\)\| 228 \ \%(\%(\<no_\?\)\?histappend\>\)\|\%(\%(no_\?\)\?hist_append\>\)\| 229 \ \%(\%(\<no_\?\)\?histbeep\>\)\|\%(\%(no_\?\)\?hist_beep\>\)\| 230 \ \%(\%(\<no_\?\)\?hist_expand\>\)\|\%(\%(no_\?\)\?histexpand\>\)\| 231 \ \%(\%(\<no_\?\)\?hist_expire_dups_first\>\)\|\%(\%(no_\?\)\?histexpiredupsfirst\>\)\| 232 \ \%(\%(\<no_\?\)\?histfcntllock\>\)\|\%(\%(no_\?\)\?hist_fcntl_lock\>\)\| 233 \ \%(\%(\<no_\?\)\?histfindnodups\>\)\|\%(\%(no_\?\)\?hist_find_no_dups\>\)\| 234 \ \%(\%(\<no_\?\)\?histignorealldups\>\)\|\%(\%(no_\?\)\?hist_ignore_all_dups\>\)\| 235 \ \%(\%(\<no_\?\)\?histignoredups\>\)\|\%(\%(no_\?\)\?hist_ignore_dups\>\)\| 236 \ \%(\%(\<no_\?\)\?histignorespace\>\)\|\%(\%(no_\?\)\?hist_ignore_space\>\)\| 237 \ \%(\%(\<no_\?\)\?histlexwords\>\)\|\%(\%(no_\?\)\?hist_lex_words\>\)\| 238 \ \%(\%(\<no_\?\)\?histnofunctions\>\)\|\%(\%(no_\?\)\?hist_no_functions\>\)\| 239 \ \%(\%(\<no_\?\)\?histnostore\>\)\|\%(\%(no_\?\)\?hist_no_store\>\)\| 240 \ \%(\%(\<no_\?\)\?histreduceblanks\>\)\|\%(\%(no_\?\)\?hist_reduce_blanks\>\)\| 241 \ \%(\%(\<no_\?\)\?histsavebycopy\>\)\|\%(\%(no_\?\)\?hist_save_by_copy\>\)\| 242 \ \%(\%(\<no_\?\)\?histsavenodups\>\)\|\%(\%(no_\?\)\?hist_save_no_dups\>\)\| 243 \ \%(\%(\<no_\?\)\?histsubstpattern\>\)\|\%(\%(no_\?\)\?hist_subst_pattern\>\)\| 244 \ \%(\%(\<no_\?\)\?histverify\>\)\|\%(\%(no_\?\)\?hist_verify\>\)\| 245 \ \%(\%(\<no_\?\)\?hup\>\)\| 246 \ \%(\%(\<no_\?\)\?ignorebraces\>\)\|\%(\%(no_\?\)\?ignore_braces\>\)\| 247 \ \%(\%(\<no_\?\)\?ignoreclosebraces\>\)\|\%(\%(no_\?\)\?ignore_close_braces\>\)\| 248 \ \%(\%(\<no_\?\)\?ignoreeof\>\)\|\%(\%(no_\?\)\?ignore_eof\>\)\| 249 \ \%(\%(\<no_\?\)\?incappendhistory\>\)\|\%(\%(no_\?\)\?inc_append_history\>\)\| 250 \ \%(\%(\<no_\?\)\?incappendhistorytime\>\)\|\%(\%(no_\?\)\?inc_append_history_time\>\)\| 251 \ \%(\%(\<no_\?\)\?interactive\>\)\| 252 \ \%(\%(\<no_\?\)\?interactivecomments\>\)\|\%(\%(no_\?\)\?interactive_comments\>\)\| 253 \ \%(\%(\<no_\?\)\?ksharrays\>\)\|\%(\%(no_\?\)\?ksh_arrays\>\)\| 254 \ \%(\%(\<no_\?\)\?kshautoload\>\)\|\%(\%(no_\?\)\?ksh_autoload\>\)\| 255 \ \%(\%(\<no_\?\)\?kshglob\>\)\|\%(\%(no_\?\)\?ksh_glob\>\)\| 256 \ \%(\%(\<no_\?\)\?kshoptionprint\>\)\|\%(\%(no_\?\)\?ksh_option_print\>\)\| 257 \ \%(\%(\<no_\?\)\?kshtypeset\>\)\|\%(\%(no_\?\)\?ksh_typeset\>\)\| 258 \ \%(\%(\<no_\?\)\?kshzerosubscript\>\)\|\%(\%(no_\?\)\?ksh_zero_subscript\>\)\| 259 \ \%(\%(\<no_\?\)\?listambiguous\>\)\|\%(\%(no_\?\)\?list_ambiguous\>\)\| 260 \ \%(\%(\<no_\?\)\?listbeep\>\)\|\%(\%(no_\?\)\?list_beep\>\)\| 261 \ \%(\%(\<no_\?\)\?listpacked\>\)\|\%(\%(no_\?\)\?list_packed\>\)\| 262 \ \%(\%(\<no_\?\)\?listrowsfirst\>\)\|\%(\%(no_\?\)\?list_rows_first\>\)\| 263 \ \%(\%(\<no_\?\)\?listtypes\>\)\|\%(\%(no_\?\)\?list_types\>\)\| 264 \ \%(\%(\<no_\?\)\?localloops\>\)\|\%(\%(no_\?\)\?local_loops\>\)\| 265 \ \%(\%(\<no_\?\)\?localoptions\>\)\|\%(\%(no_\?\)\?local_options\>\)\| 266 \ \%(\%(\<no_\?\)\?localpatterns\>\)\|\%(\%(no_\?\)\?local_patterns\>\)\| 267 \ \%(\%(\<no_\?\)\?localtraps\>\)\|\%(\%(no_\?\)\?local_traps\>\)\| 268 \ \%(\%(\<no_\?\)\?log\>\)\| 269 \ \%(\%(\<no_\?\)\?login\>\)\| 270 \ \%(\%(\<no_\?\)\?longlistjobs\>\)\|\%(\%(no_\?\)\?long_list_jobs\>\)\| 271 \ \%(\%(\<no_\?\)\?magicequalsubst\>\)\|\%(\%(no_\?\)\?magic_equal_subst\>\)\| 272 \ \%(\%(\<no_\?\)\?mark_dirs\>\)\| 273 \ \%(\%(\<no_\?\)\?mailwarn\>\)\|\%(\%(no_\?\)\?mail_warn\>\)\| 274 \ \%(\%(\<no_\?\)\?mailwarning\>\)\|\%(\%(no_\?\)\?mail_warning\>\)\| 275 \ \%(\%(\<no_\?\)\?markdirs\>\)\| 276 \ \%(\%(\<no_\?\)\?menucomplete\>\)\|\%(\%(no_\?\)\?menu_complete\>\)\| 277 \ \%(\%(\<no_\?\)\?monitor\>\)\| 278 \ \%(\%(\<no_\?\)\?multibyte\>\)\|\%(\%(no_\?\)\?multi_byte\>\)\| 279 \ \%(\%(\<no_\?\)\?multifuncdef\>\)\|\%(\%(no_\?\)\?multi_func_def\>\)\| 280 \ \%(\%(\<no_\?\)\?multios\>\)\|\%(\%(no_\?\)\?multi_os\>\)\| 281 \ \%(\%(\<no_\?\)\?nomatch\>\)\|\%(\%(no_\?\)\?no_match\>\)\| 282 \ \%(\%(\<no_\?\)\?notify\>\)\| 283 \ \%(\%(\<no_\?\)\?nullglob\>\)\|\%(\%(no_\?\)\?null_glob\>\)\| 284 \ \%(\%(\<no_\?\)\?numericglobsort\>\)\|\%(\%(no_\?\)\?numeric_glob_sort\>\)\| 285 \ \%(\%(\<no_\?\)\?octalzeroes\>\)\|\%(\%(no_\?\)\?octal_zeroes\>\)\| 286 \ \%(\%(\<no_\?\)\?onecmd\>\)\|\%(\%(no_\?\)\?one_cmd\>\)\| 287 \ \%(\%(\<no_\?\)\?overstrike\>\)\|\%(\%(no_\?\)\?over_strike\>\)\| 288 \ \%(\%(\<no_\?\)\?pathdirs\>\)\|\%(\%(no_\?\)\?path_dirs\>\)\| 289 \ \%(\%(\<no_\?\)\?pathscript\>\)\|\%(\%(no_\?\)\?path_script\>\)\| 290 \ \%(\%(\<no_\?\)\?physical\>\)\| 291 \ \%(\%(\<no_\?\)\?pipefail\>\)\|\%(\%(no_\?\)\?pipe_fail\>\)\| 292 \ \%(\%(\<no_\?\)\?posixaliases\>\)\|\%(\%(no_\?\)\?posix_aliases\>\)\| 293 \ \%(\%(\<no_\?\)\?posixargzero\>\)\|\%(\%(no_\?\)\?posix_arg_zero\>\)\|\%(\%(no_\?\)\?posix_argzero\>\)\| 294 \ \%(\%(\<no_\?\)\?posixbuiltins\>\)\|\%(\%(no_\?\)\?posix_builtins\>\)\| 295 \ \%(\%(\<no_\?\)\?posixcd\>\)\|\%(\%(no_\?\)\?posix_cd\>\)\| 296 \ \%(\%(\<no_\?\)\?posixidentifiers\>\)\|\%(\%(no_\?\)\?posix_identifiers\>\)\| 297 \ \%(\%(\<no_\?\)\?posixjobs\>\)\|\%(\%(no_\?\)\?posix_jobs\>\)\| 298 \ \%(\%(\<no_\?\)\?posixstrings\>\)\|\%(\%(no_\?\)\?posix_strings\>\)\| 299 \ \%(\%(\<no_\?\)\?posixtraps\>\)\|\%(\%(no_\?\)\?posix_traps\>\)\| 300 \ \%(\%(\<no_\?\)\?printeightbit\>\)\|\%(\%(no_\?\)\?print_eight_bit\>\)\| 301 \ \%(\%(\<no_\?\)\?printexitvalue\>\)\|\%(\%(no_\?\)\?print_exit_value\>\)\| 302 \ \%(\%(\<no_\?\)\?privileged\>\)\| 303 \ \%(\%(\<no_\?\)\?promptbang\>\)\|\%(\%(no_\?\)\?prompt_bang\>\)\| 304 \ \%(\%(\<no_\?\)\?promptcr\>\)\|\%(\%(no_\?\)\?prompt_cr\>\)\| 305 \ \%(\%(\<no_\?\)\?promptpercent\>\)\|\%(\%(no_\?\)\?prompt_percent\>\)\| 306 \ \%(\%(\<no_\?\)\?promptsp\>\)\|\%(\%(no_\?\)\?prompt_sp\>\)\| 307 \ \%(\%(\<no_\?\)\?promptsubst\>\)\|\%(\%(no_\?\)\?prompt_subst\>\)\| 308 \ \%(\%(\<no_\?\)\?promptvars\>\)\|\%(\%(no_\?\)\?prompt_vars\>\)\| 309 \ \%(\%(\<no_\?\)\?pushdignoredups\>\)\|\%(\%(no_\?\)\?pushd_ignore_dups\>\)\| 310 \ \%(\%(\<no_\?\)\?pushdminus\>\)\|\%(\%(no_\?\)\?pushd_minus\>\)\| 311 \ \%(\%(\<no_\?\)\?pushdsilent\>\)\|\%(\%(no_\?\)\?pushd_silent\>\)\| 312 \ \%(\%(\<no_\?\)\?pushdtohome\>\)\|\%(\%(no_\?\)\?pushd_to_home\>\)\| 313 \ \%(\%(\<no_\?\)\?rcexpandparam\>\)\|\%(\%(no_\?\)\?rc_expandparam\>\)\|\%(\%(no_\?\)\?rc_expand_param\>\)\| 314 \ \%(\%(\<no_\?\)\?rcquotes\>\)\|\%(\%(no_\?\)\?rc_quotes\>\)\| 315 \ \%(\%(\<no_\?\)\?rcs\>\)\| 316 \ \%(\%(\<no_\?\)\?recexact\>\)\|\%(\%(no_\?\)\?rec_exact\>\)\| 317 \ \%(\%(\<no_\?\)\?rematchpcre\>\)\|\%(\%(no_\?\)\?re_match_pcre\>\)\|\%(\%(no_\?\)\?rematch_pcre\>\)\| 318 \ \%(\%(\<no_\?\)\?restricted\>\)\| 319 \ \%(\%(\<no_\?\)\?rmstarsilent\>\)\|\%(\%(no_\?\)\?rm_star_silent\>\)\| 320 \ \%(\%(\<no_\?\)\?rmstarwait\>\)\|\%(\%(no_\?\)\?rm_star_wait\>\)\| 321 \ \%(\%(\<no_\?\)\?sharehistory\>\)\|\%(\%(no_\?\)\?share_history\>\)\| 322 \ \%(\%(\<no_\?\)\?shfileexpansion\>\)\|\%(\%(no_\?\)\?sh_file_expansion\>\)\| 323 \ \%(\%(\<no_\?\)\?shglob\>\)\|\%(\%(no_\?\)\?sh_glob\>\)\| 324 \ \%(\%(\<no_\?\)\?shinstdin\>\)\|\%(\%(no_\?\)\?shin_stdin\>\)\| 325 \ \%(\%(\<no_\?\)\?shnullcmd\>\)\|\%(\%(no_\?\)\?sh_nullcmd\>\)\| 326 \ \%(\%(\<no_\?\)\?shoptionletters\>\)\|\%(\%(no_\?\)\?sh_option_letters\>\)\| 327 \ \%(\%(\<no_\?\)\?shortloops\>\)\|\%(\%(no_\?\)\?short_loops\>\)\| 328 \ \%(\%(\<no_\?\)\?shortrepeat\>\)\|\%(\%(no_\?\)\?short_repeat\>\)\| 329 \ \%(\%(\<no_\?\)\?shwordsplit\>\)\|\%(\%(no_\?\)\?sh_word_split\>\)\| 330 \ \%(\%(\<no_\?\)\?singlecommand\>\)\|\%(\%(no_\?\)\?single_command\>\)\| 331 \ \%(\%(\<no_\?\)\?singlelinezle\>\)\|\%(\%(no_\?\)\?single_line_zle\>\)\| 332 \ \%(\%(\<no_\?\)\?sourcetrace\>\)\|\%(\%(no_\?\)\?source_trace\>\)\| 333 \ \%(\%(\<no_\?\)\?stdin\>\)\| 334 \ \%(\%(\<no_\?\)\?sunkeyboardhack\>\)\|\%(\%(no_\?\)\?sun_keyboard_hack\>\)\| 335 \ \%(\%(\<no_\?\)\?trackall\>\)\|\%(\%(no_\?\)\?track_all\>\)\| 336 \ \%(\%(\<no_\?\)\?transientrprompt\>\)\|\%(\%(no_\?\)\?transient_rprompt\>\)\| 337 \ \%(\%(\<no_\?\)\?trapsasync\>\)\|\%(\%(no_\?\)\?traps_async\>\)\| 338 \ \%(\%(\<no_\?\)\?typesetsilent\>\)\|\%(\%(no_\?\)\?type_set_silent\>\)\|\%(\%(no_\?\)\?typeset_silent\>\)\| 339 \ \%(\%(\<no_\?\)\?unset\>\)\| 340 \ \%(\%(\<no_\?\)\?verbose\>\)\| 341 \ \%(\%(\<no_\?\)\?vi\>\)\| 342 \ \%(\%(\<no_\?\)\?warnnestedvar\>\)\|\%(\%(no_\?\)\?warn_nested_var\>\)\| 343 \ \%(\%(\<no_\?\)\?warncreateglobal\>\)\|\%(\%(no_\?\)\?warn_create_global\>\)\| 344 \ \%(\%(\<no_\?\)\?xtrace\>\)\| 345 \ \%(\%(\<no_\?\)\?zle\>\)/ nextgroup=zshOption,zshComment skipwhite contained 346 347syn case match 348 349syn keyword zshTypes float integer local typeset declare private readonly 350 351" XXX: this may be too much 352" syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+' 353 354syn match zshNumber '[+-]\=\<\d\+\>' 355syn match zshNumber '[+-]\=\<0x\x\+\>' 356syn match zshNumber '[+-]\=\<0\o\+\>' 357syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>' 358syn match zshNumber '[+-]\=\d\+\.\d\+\>' 359 360" TODO: $[...] is the same as $((...)), so add that as well. 361syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst 362exe 'syn region zshSubst matchgroup=zshSubstDelim transparent start=/\$(/ skip=/\\)/ end=/)/ contains='.s:contained. ' fold' 363syn region zshParentheses transparent start='(' skip='\\)' end=')' fold 364syn region zshGlob start='(#' end=')' 365syn region zshMathSubst matchgroup=zshSubstDelim transparent 366 \ start='\%(\$\?\)[<=>]\@<!((' skip='\\)' end='))' 367 \ contains=zshParentheses,@zshSubst,zshNumber, 368 \ @zshDerefs,zshString keepend fold 369" The ms=s+1 prevents matching zshBrackets several times on opening brackets 370" (see https://github.com/chrisbra/vim-zsh/issues/21#issuecomment-576330348) 371syn region zshBrackets contained transparent start='{'ms=s+1 skip='\\}' 372 \ end='}' fold 373exe 'syn region zshBrackets transparent start=/{/ms=s+1 skip=/\\}/ end=/}/ contains='.s:contained. ' fold' 374 375syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}' 376 \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold 377exe 'syn region zshOldSubst matchgroup=zshSubstDelim start=/`/ skip=/\\[\\`]/ end=/`/ contains='.s:contained. ',zshOldSubst fold' 378 379syn sync minlines=50 maxlines=90 380syn sync match zshHereDocSync grouphere NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)' 381syn sync match zshHereDocEndSync groupthere NONE '^\s*EO\a\+\>' 382 383syn keyword zshTodo contained TODO FIXME XXX NOTE 384 385syn region zshComment oneline start='\%(^\|\s\+\)#' end='$' 386 \ contains=zshTodo,@Spell fold 387 388syn region zshComment start='^\s*#' end='^\%(\s*#\)\@!' 389 \ contains=zshTodo,@Spell fold 390 391syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$' 392 393hi def link zshTodo Todo 394hi def link zshComment Comment 395hi def link zshPreProc PreProc 396hi def link zshQuoted SpecialChar 397hi def link zshPOSIXQuoted SpecialChar 398hi def link zshString String 399hi def link zshStringDelimiter zshString 400hi def link zshPOSIXString zshString 401hi def link zshJobSpec Special 402hi def link zshPrecommand Special 403hi def link zshDelimiter Keyword 404hi def link zshConditional Conditional 405hi def link zshException Exception 406hi def link zshRepeat Repeat 407hi def link zshKeyword Keyword 408hi def link zshFunction None 409hi def link zshKSHFunction zshFunction 410hi def link zshHereDoc String 411hi def link zshOperator None 412hi def link zshRedir Operator 413hi def link zshVariable None 414hi def link zshVariableDef zshVariable 415hi def link zshDereferencing PreProc 416hi def link zshShortDeref zshDereferencing 417hi def link zshLongDeref zshDereferencing 418hi def link zshDeref zshDereferencing 419hi def link zshDollarVar zshDereferencing 420hi def link zshCommands Keyword 421hi def link zshOptStart Keyword 422hi def link zshOption Constant 423hi def link zshTypes Type 424hi def link zshSwitches Special 425hi def link zshNumber Number 426hi def link zshSubst PreProc 427hi def link zshMathSubst zshSubst 428hi def link zshOldSubst zshSubst 429hi def link zshSubstDelim zshSubst 430hi def link zshGlob zshSubst 431 432let b:current_syntax = "zsh" 433 434let &cpo = s:cpo_save 435unlet s:cpo_save 436