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