xref: /vim-8.2.3635/runtime/syntax/zsh.vim (revision d7df2798)
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:      2018-07-13
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,@zshDerefs,zshQuoted,zshPOSIXString
71syn region  zshHereDoc          matchgroup=zshRedir
72                                \ start='<\@<!<<\s*\\\z(\S\+\)'
73                                \ end='^\z1\>'
74                                \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString
75syn region  zshHereDoc          matchgroup=zshRedir
76                                \ start='<\@<!<<-\s*\\\=\z(\S\+\)'
77                                \ end='^\s*\z1\>'
78                                \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString
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
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 zrecompile
122                                \ zregexparse 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/Doc/Zsh/options.yo |
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_\?\)\?aliasfuncdef\>\)\|\%(\%(no_\?\)\?alias_func_def\>\)\|
140      \ \%(\%(\<no_\?\)\?allexport\>\)\|\%(\%(no_\?\)\?all_export\>\)\|
141      \ \%(\%(\<no_\?\)\?alwayslastprompt\>\)\|\%(\%(no_\?\)\?always_last_prompt\>\)\|\%(\%(no_\?\)\?always_lastprompt\>\)\|
142      \ \%(\%(\<no_\?\)\?alwaystoend\>\)\|\%(\%(no_\?\)\?always_to_end\>\)\|
143      \ \%(\%(\<no_\?\)\?appendcreate\>\)\|\%(\%(no_\?\)\?append_create\>\)\|
144      \ \%(\%(\<no_\?\)\?appendhistory\>\)\|\%(\%(no_\?\)\?append_history\>\)\|
145      \ \%(\%(\<no_\?\)\?autocd\>\)\|\%(\%(no_\?\)\?auto_cd\>\)\|
146      \ \%(\%(\<no_\?\)\?autocontinue\>\)\|\%(\%(no_\?\)\?auto_continue\>\)\|
147      \ \%(\%(\<no_\?\)\?autolist\>\)\|\%(\%(no_\?\)\?auto_list\>\)\|
148      \ \%(\%(\<no_\?\)\?automenu\>\)\|\%(\%(no_\?\)\?auto_menu\>\)\|
149      \ \%(\%(\<no_\?\)\?autonamedirs\>\)\|\%(\%(no_\?\)\?auto_name_dirs\>\)\|
150      \ \%(\%(\<no_\?\)\?autoparamkeys\>\)\|\%(\%(no_\?\)\?auto_param_keys\>\)\|
151      \ \%(\%(\<no_\?\)\?autoparamslash\>\)\|\%(\%(no_\?\)\?auto_param_slash\>\)\|
152      \ \%(\%(\<no_\?\)\?autopushd\>\)\|\%(\%(no_\?\)\?auto_pushd\>\)\|
153      \ \%(\%(\<no_\?\)\?autoremoveslash\>\)\|\%(\%(no_\?\)\?auto_remove_slash\>\)\|
154      \ \%(\%(\<no_\?\)\?autoresume\>\)\|\%(\%(no_\?\)\?auto_resume\>\)\|
155      \ \%(\%(\<no_\?\)\?badpattern\>\)\|\%(\%(no_\?\)\?bad_pattern\>\)\|
156      \ \%(\%(\<no_\?\)\?banghist\>\)\|\%(\%(no_\?\)\?bang_hist\>\)\|
157      \ \%(\%(\<no_\?\)\?bareglobqual\>\)\|\%(\%(no_\?\)\?bare_glob_qual\>\)\|
158      \ \%(\%(\<no_\?\)\?bashautolist\>\)\|\%(\%(no_\?\)\?bash_auto_list\>\)\|
159      \ \%(\%(\<no_\?\)\?bashrematch\>\)\|\%(\%(no_\?\)\?bash_rematch\>\)\|
160      \ \%(\%(\<no_\?\)\?beep\>\)\|
161      \ \%(\%(\<no_\?\)\?bgnice\>\)\|\%(\%(no_\?\)\?bg_nice\>\)\|
162      \ \%(\%(\<no_\?\)\?braceccl\>\)\|\%(\%(no_\?\)\?brace_ccl\>\)\|
163      \ \%(\%(\<no_\?\)\?braceexpand\>\)\|\%(\%(no_\?\)\?brace_expand\>\)\|
164      \ \%(\%(\<no_\?\)\?bsdecho\>\)\|\%(\%(no_\?\)\?bsd_echo\>\)\|
165      \ \%(\%(\<no_\?\)\?caseglob\>\)\|\%(\%(no_\?\)\?case_glob\>\)\|
166      \ \%(\%(\<no_\?\)\?casematch\>\)\|\%(\%(no_\?\)\?case_match\>\)\|
167      \ \%(\%(\<no_\?\)\?cbases\>\)\|\%(\%(no_\?\)\?c_bases\>\)\|
168      \ \%(\%(\<no_\?\)\?cdablevars\>\)\|\%(\%(no_\?\)\?cdable_vars\>\)\|\%(\%(no_\?\)\?cd_able_vars\>\)\|
169      \ \%(\%(\<no_\?\)\?chasedots\>\)\|\%(\%(no_\?\)\?chase_dots\>\)\|
170      \ \%(\%(\<no_\?\)\?chaselinks\>\)\|\%(\%(no_\?\)\?chase_links\>\)\|
171      \ \%(\%(\<no_\?\)\?checkjobs\>\)\|\%(\%(no_\?\)\?check_jobs\>\)\|
172      \ \%(\%(\<no_\?\)\?checkrunningjobs\>\)\|\%(\%(no_\?\)\?check_running_jobs\>\)\|
173      \ \%(\%(\<no_\?\)\?clobber\>\)\|
174      \ \%(\%(\<no_\?\)\?combiningchars\>\)\|\%(\%(no_\?\)\?combining_chars\>\)\|
175      \ \%(\%(\<no_\?\)\?completealiases\>\)\|\%(\%(no_\?\)\?complete_aliases\>\)\|
176      \ \%(\%(\<no_\?\)\?completeinword\>\)\|\%(\%(no_\?\)\?complete_in_word\>\)\|
177      \ \%(\%(\<no_\?\)\?continueonerror\>\)\|\%(\%(no_\?\)\?continue_on_error\>\)\|
178      \ \%(\%(\<no_\?\)\?correct\>\)\|
179      \ \%(\%(\<no_\?\)\?correctall\>\)\|\%(\%(no_\?\)\?correct_all\>\)\|
180      \ \%(\%(\<no_\?\)\?cprecedences\>\)\|\%(\%(no_\?\)\?c_precedences\>\)\|
181      \ \%(\%(\<no_\?\)\?cshjunkiehistory\>\)\|\%(\%(no_\?\)\?csh_junkie_history\>\)\|
182      \ \%(\%(\<no_\?\)\?cshjunkieloops\>\)\|\%(\%(no_\?\)\?csh_junkie_loops\>\)\|
183      \ \%(\%(\<no_\?\)\?cshjunkiequotes\>\)\|\%(\%(no_\?\)\?csh_junkie_quotes\>\)\|
184      \ \%(\%(\<no_\?\)\?csh_nullcmd\>\)\|\%(\%(no_\?\)\?csh_null_cmd\>\)\|\%(\%(no_\?\)\?cshnullcmd\>\)\|\%(\%(no_\?\)\?csh_null_cmd\>\)\|
185      \ \%(\%(\<no_\?\)\?cshnullglob\>\)\|\%(\%(no_\?\)\?csh_null_glob\>\)\|
186      \ \%(\%(\<no_\?\)\?debugbeforecmd\>\)\|\%(\%(no_\?\)\?debug_before_cmd\>\)\|
187      \ \%(\%(\<no_\?\)\?dotglob\>\)\|\%(\%(no_\?\)\?dot_glob\>\)\|
188      \ \%(\%(\<no_\?\)\?dvorak\>\)\|
189      \ \%(\%(\<no_\?\)\?emacs\>\)\|
190      \ \%(\%(\<no_\?\)\?equals\>\)\|
191      \ \%(\%(\<no_\?\)\?errexit\>\)\|\%(\%(no_\?\)\?err_exit\>\)\|
192      \ \%(\%(\<no_\?\)\?errreturn\>\)\|\%(\%(no_\?\)\?err_return\>\)\|
193      \ \%(\%(\<no_\?\)\?evallineno\>\)\|\%(\%(no_\?\)\?eval_lineno\>\)\|
194      \ \%(\%(\<no_\?\)\?exec\>\)\|
195      \ \%(\%(\<no_\?\)\?extendedglob\>\)\|\%(\%(no_\?\)\?extended_glob\>\)\|
196      \ \%(\%(\<no_\?\)\?extendedhistory\>\)\|\%(\%(no_\?\)\?extended_history\>\)\|
197      \ \%(\%(\<no_\?\)\?flowcontrol\>\)\|\%(\%(no_\?\)\?flow_control\>\)\|
198      \ \%(\%(\<no_\?\)\?forcefloat\>\)\|\%(\%(no_\?\)\?force_float\>\)\|
199      \ \%(\%(\<no_\?\)\?functionargzero\>\)\|\%(\%(no_\?\)\?function_argzero\>\)\|\%(\%(no_\?\)\?function_arg_zero\>\)\|
200      \ \%(\%(\<no_\?\)\?glob\>\)\|
201      \ \%(\%(\<no_\?\)\?globalexport\>\)\|\%(\%(no_\?\)\?global_export\>\)\|
202      \ \%(\%(\<no_\?\)\?globalrcs\>\)\|\%(\%(no_\?\)\?global_rcs\>\)\|
203      \ \%(\%(\<no_\?\)\?globassign\>\)\|\%(\%(no_\?\)\?glob_assign\>\)\|
204      \ \%(\%(\<no_\?\)\?globcomplete\>\)\|\%(\%(no_\?\)\?glob_complete\>\)\|
205      \ \%(\%(\<no_\?\)\?globdots\>\)\|\%(\%(no_\?\)\?glob_dots\>\)\|
206      \ \%(\%(\<no_\?\)\?glob_subst\>\)\|\%(\%(no_\?\)\?globsubst\>\)\|
207      \ \%(\%(\<no_\?\)\?globstarshort\>\)\|\%(\%(no_\?\)\?glob_star_short\>\)\|
208      \ \%(\%(\<no_\?\)\?hashall\>\)\|\%(\%(no_\?\)\?hash_all\>\)\|
209      \ \%(\%(\<no_\?\)\?hashcmds\>\)\|\%(\%(no_\?\)\?hash_cmds\>\)\|
210      \ \%(\%(\<no_\?\)\?hashdirs\>\)\|\%(\%(no_\?\)\?hash_dirs\>\)\|
211      \ \%(\%(\<no_\?\)\?hashexecutablesonly\>\)\|\%(\%(no_\?\)\?hash_executables_only\>\)\|
212      \ \%(\%(\<no_\?\)\?hashlistall\>\)\|\%(\%(no_\?\)\?hash_list_all\>\)\|
213      \ \%(\%(\<no_\?\)\?histallowclobber\>\)\|\%(\%(no_\?\)\?hist_allow_clobber\>\)\|
214      \ \%(\%(\<no_\?\)\?histappend\>\)\|\%(\%(no_\?\)\?hist_append\>\)\|
215      \ \%(\%(\<no_\?\)\?histbeep\>\)\|\%(\%(no_\?\)\?hist_beep\>\)\|
216      \ \%(\%(\<no_\?\)\?hist_expand\>\)\|\%(\%(no_\?\)\?histexpand\>\)\|
217      \ \%(\%(\<no_\?\)\?hist_expire_dups_first\>\)\|\%(\%(no_\?\)\?histexpiredupsfirst\>\)\|
218      \ \%(\%(\<no_\?\)\?histfcntllock\>\)\|\%(\%(no_\?\)\?hist_fcntl_lock\>\)\|
219      \ \%(\%(\<no_\?\)\?histfindnodups\>\)\|\%(\%(no_\?\)\?hist_find_no_dups\>\)\|
220      \ \%(\%(\<no_\?\)\?histignorealldups\>\)\|\%(\%(no_\?\)\?hist_ignore_all_dups\>\)\|
221      \ \%(\%(\<no_\?\)\?histignoredups\>\)\|\%(\%(no_\?\)\?hist_ignore_dups\>\)\|
222      \ \%(\%(\<no_\?\)\?histignorespace\>\)\|\%(\%(no_\?\)\?hist_ignore_space\>\)\|
223      \ \%(\%(\<no_\?\)\?histlexwords\>\)\|\%(\%(no_\?\)\?hist_lex_words\>\)\|
224      \ \%(\%(\<no_\?\)\?histnofunctions\>\)\|\%(\%(no_\?\)\?hist_no_functions\>\)\|
225      \ \%(\%(\<no_\?\)\?histnostore\>\)\|\%(\%(no_\?\)\?hist_no_store\>\)\|
226      \ \%(\%(\<no_\?\)\?histreduceblanks\>\)\|\%(\%(no_\?\)\?hist_reduce_blanks\>\)\|
227      \ \%(\%(\<no_\?\)\?histsavebycopy\>\)\|\%(\%(no_\?\)\?hist_save_by_copy\>\)\|
228      \ \%(\%(\<no_\?\)\?histsavenodups\>\)\|\%(\%(no_\?\)\?hist_save_no_dups\>\)\|
229      \ \%(\%(\<no_\?\)\?histsubstpattern\>\)\|\%(\%(no_\?\)\?hist_subst_pattern\>\)\|
230      \ \%(\%(\<no_\?\)\?histverify\>\)\|\%(\%(no_\?\)\?hist_verify\>\)\|
231      \ \%(\%(\<no_\?\)\?hup\>\)\|
232      \ \%(\%(\<no_\?\)\?ignorebraces\>\)\|\%(\%(no_\?\)\?ignore_braces\>\)\|
233      \ \%(\%(\<no_\?\)\?ignoreclosebraces\>\)\|\%(\%(no_\?\)\?ignore_close_braces\>\)\|
234      \ \%(\%(\<no_\?\)\?ignoreeof\>\)\|\%(\%(no_\?\)\?ignore_eof\>\)\|
235      \ \%(\%(\<no_\?\)\?incappendhistory\>\)\|\%(\%(no_\?\)\?inc_append_history\>\)\|
236      \ \%(\%(\<no_\?\)\?incappendhistorytime\>\)\|\%(\%(no_\?\)\?inc_append_history_time\>\)\|
237      \ \%(\%(\<no_\?\)\?interactive\>\)\|
238      \ \%(\%(\<no_\?\)\?interactivecomments\>\)\|\%(\%(no_\?\)\?interactive_comments\>\)\|
239      \ \%(\%(\<no_\?\)\?ksharrays\>\)\|\%(\%(no_\?\)\?ksh_arrays\>\)\|
240      \ \%(\%(\<no_\?\)\?kshautoload\>\)\|\%(\%(no_\?\)\?ksh_autoload\>\)\|
241      \ \%(\%(\<no_\?\)\?kshglob\>\)\|\%(\%(no_\?\)\?ksh_glob\>\)\|
242      \ \%(\%(\<no_\?\)\?kshoptionprint\>\)\|\%(\%(no_\?\)\?ksh_option_print\>\)\|
243      \ \%(\%(\<no_\?\)\?kshtypeset\>\)\|\%(\%(no_\?\)\?ksh_typeset\>\)\|
244      \ \%(\%(\<no_\?\)\?kshzerosubscript\>\)\|\%(\%(no_\?\)\?ksh_zero_subscript\>\)\|
245      \ \%(\%(\<no_\?\)\?listambiguous\>\)\|\%(\%(no_\?\)\?list_ambiguous\>\)\|
246      \ \%(\%(\<no_\?\)\?listbeep\>\)\|\%(\%(no_\?\)\?list_beep\>\)\|
247      \ \%(\%(\<no_\?\)\?listpacked\>\)\|\%(\%(no_\?\)\?list_packed\>\)\|
248      \ \%(\%(\<no_\?\)\?listrowsfirst\>\)\|\%(\%(no_\?\)\?list_rows_first\>\)\|
249      \ \%(\%(\<no_\?\)\?listtypes\>\)\|\%(\%(no_\?\)\?list_types\>\)\|
250      \ \%(\%(\<no_\?\)\?localloops\>\)\|\%(\%(no_\?\)\?local_loops\>\)\|
251      \ \%(\%(\<no_\?\)\?localoptions\>\)\|\%(\%(no_\?\)\?local_options\>\)\|
252      \ \%(\%(\<no_\?\)\?localpatterns\>\)\|\%(\%(no_\?\)\?local_patterns\>\)\|
253      \ \%(\%(\<no_\?\)\?localtraps\>\)\|\%(\%(no_\?\)\?local_traps\>\)\|
254      \ \%(\%(\<no_\?\)\?log\>\)\|
255      \ \%(\%(\<no_\?\)\?login\>\)\|
256      \ \%(\%(\<no_\?\)\?longlistjobs\>\)\|\%(\%(no_\?\)\?long_list_jobs\>\)\|
257      \ \%(\%(\<no_\?\)\?magicequalsubst\>\)\|\%(\%(no_\?\)\?magic_equal_subst\>\)\|
258      \ \%(\%(\<no_\?\)\?mark_dirs\>\)\|
259      \ \%(\%(\<no_\?\)\?mailwarn\>\)\|\%(\%(no_\?\)\?mail_warn\>\)\|
260      \ \%(\%(\<no_\?\)\?mailwarning\>\)\|\%(\%(no_\?\)\?mail_warning\>\)\|
261      \ \%(\%(\<no_\?\)\?markdirs\>\)\|
262      \ \%(\%(\<no_\?\)\?menucomplete\>\)\|\%(\%(no_\?\)\?menu_complete\>\)\|
263      \ \%(\%(\<no_\?\)\?monitor\>\)\|
264      \ \%(\%(\<no_\?\)\?multibyte\>\)\|\%(\%(no_\?\)\?multi_byte\>\)\|
265      \ \%(\%(\<no_\?\)\?multifuncdef\>\)\|\%(\%(no_\?\)\?multi_func_def\>\)\|
266      \ \%(\%(\<no_\?\)\?multios\>\)\|\%(\%(no_\?\)\?multi_os\>\)\|
267      \ \%(\%(\<no_\?\)\?nomatch\>\)\|\%(\%(no_\?\)\?no_match\>\)\|
268      \ \%(\%(\<no_\?\)\?notify\>\)\|
269      \ \%(\%(\<no_\?\)\?nullglob\>\)\|\%(\%(no_\?\)\?null_glob\>\)\|
270      \ \%(\%(\<no_\?\)\?numericglobsort\>\)\|\%(\%(no_\?\)\?numeric_glob_sort\>\)\|
271      \ \%(\%(\<no_\?\)\?octalzeroes\>\)\|\%(\%(no_\?\)\?octal_zeroes\>\)\|
272      \ \%(\%(\<no_\?\)\?onecmd\>\)\|\%(\%(no_\?\)\?one_cmd\>\)\|
273      \ \%(\%(\<no_\?\)\?overstrike\>\)\|\%(\%(no_\?\)\?over_strike\>\)\|
274      \ \%(\%(\<no_\?\)\?pathdirs\>\)\|\%(\%(no_\?\)\?path_dirs\>\)\|
275      \ \%(\%(\<no_\?\)\?pathscript\>\)\|\%(\%(no_\?\)\?path_script\>\)\|
276      \ \%(\%(\<no_\?\)\?physical\>\)\|
277      \ \%(\%(\<no_\?\)\?pipefail\>\)\|\%(\%(no_\?\)\?pipe_fail\>\)\|
278      \ \%(\%(\<no_\?\)\?posixaliases\>\)\|\%(\%(no_\?\)\?posix_aliases\>\)\|
279      \ \%(\%(\<no_\?\)\?posixargzero\>\)\|\%(\%(no_\?\)\?posix_arg_zero\>\)\|\%(\%(no_\?\)\?posix_argzero\>\)\|
280      \ \%(\%(\<no_\?\)\?posixbuiltins\>\)\|\%(\%(no_\?\)\?posix_builtins\>\)\|
281      \ \%(\%(\<no_\?\)\?posixcd\>\)\|\%(\%(no_\?\)\?posix_cd\>\)\|
282      \ \%(\%(\<no_\?\)\?posixidentifiers\>\)\|\%(\%(no_\?\)\?posix_identifiers\>\)\|
283      \ \%(\%(\<no_\?\)\?posixjobs\>\)\|\%(\%(no_\?\)\?posix_jobs\>\)\|
284      \ \%(\%(\<no_\?\)\?posixstrings\>\)\|\%(\%(no_\?\)\?posix_strings\>\)\|
285      \ \%(\%(\<no_\?\)\?posixtraps\>\)\|\%(\%(no_\?\)\?posix_traps\>\)\|
286      \ \%(\%(\<no_\?\)\?printeightbit\>\)\|\%(\%(no_\?\)\?print_eight_bit\>\)\|
287      \ \%(\%(\<no_\?\)\?printexitvalue\>\)\|\%(\%(no_\?\)\?print_exit_value\>\)\|
288      \ \%(\%(\<no_\?\)\?privileged\>\)\|
289      \ \%(\%(\<no_\?\)\?promptbang\>\)\|\%(\%(no_\?\)\?prompt_bang\>\)\|
290      \ \%(\%(\<no_\?\)\?promptcr\>\)\|\%(\%(no_\?\)\?prompt_cr\>\)\|
291      \ \%(\%(\<no_\?\)\?promptpercent\>\)\|\%(\%(no_\?\)\?prompt_percent\>\)\|
292      \ \%(\%(\<no_\?\)\?promptsp\>\)\|\%(\%(no_\?\)\?prompt_sp\>\)\|
293      \ \%(\%(\<no_\?\)\?promptsubst\>\)\|\%(\%(no_\?\)\?prompt_subst\>\)\|
294      \ \%(\%(\<no_\?\)\?promptvars\>\)\|\%(\%(no_\?\)\?prompt_vars\>\)\|
295      \ \%(\%(\<no_\?\)\?pushdignoredups\>\)\|\%(\%(no_\?\)\?pushd_ignore_dups\>\)\|
296      \ \%(\%(\<no_\?\)\?pushdminus\>\)\|\%(\%(no_\?\)\?pushd_minus\>\)\|
297      \ \%(\%(\<no_\?\)\?pushdsilent\>\)\|\%(\%(no_\?\)\?pushd_silent\>\)\|
298      \ \%(\%(\<no_\?\)\?pushdtohome\>\)\|\%(\%(no_\?\)\?pushd_to_home\>\)\|
299      \ \%(\%(\<no_\?\)\?rcexpandparam\>\)\|\%(\%(no_\?\)\?rc_expandparam\>\)\|\%(\%(no_\?\)\?rc_expand_param\>\)\|
300      \ \%(\%(\<no_\?\)\?rcquotes\>\)\|\%(\%(no_\?\)\?rc_quotes\>\)\|
301      \ \%(\%(\<no_\?\)\?rcs\>\)\|
302      \ \%(\%(\<no_\?\)\?recexact\>\)\|\%(\%(no_\?\)\?rec_exact\>\)\|
303      \ \%(\%(\<no_\?\)\?rematchpcre\>\)\|\%(\%(no_\?\)\?re_match_pcre\>\)\|\%(\%(no_\?\)\?rematch_pcre\>\)\|
304      \ \%(\%(\<no_\?\)\?restricted\>\)\|
305      \ \%(\%(\<no_\?\)\?rmstarsilent\>\)\|\%(\%(no_\?\)\?rm_star_silent\>\)\|
306      \ \%(\%(\<no_\?\)\?rmstarwait\>\)\|\%(\%(no_\?\)\?rm_star_wait\>\)\|
307      \ \%(\%(\<no_\?\)\?sharehistory\>\)\|\%(\%(no_\?\)\?share_history\>\)\|
308      \ \%(\%(\<no_\?\)\?shfileexpansion\>\)\|\%(\%(no_\?\)\?sh_file_expansion\>\)\|
309      \ \%(\%(\<no_\?\)\?shglob\>\)\|\%(\%(no_\?\)\?sh_glob\>\)\|
310      \ \%(\%(\<no_\?\)\?shinstdin\>\)\|\%(\%(no_\?\)\?shin_stdin\>\)\|
311      \ \%(\%(\<no_\?\)\?shnullcmd\>\)\|\%(\%(no_\?\)\?sh_nullcmd\>\)\|
312      \ \%(\%(\<no_\?\)\?shoptionletters\>\)\|\%(\%(no_\?\)\?sh_option_letters\>\)\|
313      \ \%(\%(\<no_\?\)\?shortloops\>\)\|\%(\%(no_\?\)\?short_loops\>\)\|
314      \ \%(\%(\<no_\?\)\?shwordsplit\>\)\|\%(\%(no_\?\)\?sh_word_split\>\)\|
315      \ \%(\%(\<no_\?\)\?singlecommand\>\)\|\%(\%(no_\?\)\?single_command\>\)\|
316      \ \%(\%(\<no_\?\)\?singlelinezle\>\)\|\%(\%(no_\?\)\?single_line_zle\>\)\|
317      \ \%(\%(\<no_\?\)\?sourcetrace\>\)\|\%(\%(no_\?\)\?source_trace\>\)\|
318      \ \%(\%(\<no_\?\)\?stdin\>\)\|
319      \ \%(\%(\<no_\?\)\?sunkeyboardhack\>\)\|\%(\%(no_\?\)\?sun_keyboard_hack\>\)\|
320      \ \%(\%(\<no_\?\)\?trackall\>\)\|\%(\%(no_\?\)\?track_all\>\)\|
321      \ \%(\%(\<no_\?\)\?transientrprompt\>\)\|\%(\%(no_\?\)\?transient_rprompt\>\)\|
322      \ \%(\%(\<no_\?\)\?trapsasync\>\)\|\%(\%(no_\?\)\?traps_async\>\)\|
323      \ \%(\%(\<no_\?\)\?typesetsilent\>\)\|\%(\%(no_\?\)\?type_set_silent\>\)\|\%(\%(no_\?\)\?typeset_silent\>\)\|
324      \ \%(\%(\<no_\?\)\?unset\>\)\|
325      \ \%(\%(\<no_\?\)\?verbose\>\)\|
326      \ \%(\%(\<no_\?\)\?vi\>\)\|
327      \ \%(\%(\<no_\?\)\?warnnestedvar\>\)\|\%(\%(no_\?\)\?warn_nested_var\>\)\|
328      \ \%(\%(\<no_\?\)\?warncreateglobal\>\)\|\%(\%(no_\?\)\?warn_create_global\>\)\|
329      \ \%(\%(\<no_\?\)\?xtrace\>\)\|
330      \ \%(\%(\<no_\?\)\?zle\>\)/ nextgroup=zshOption,zshComment skipwhite contained
331
332syn keyword zshTypes            float integer local typeset declare private readonly
333
334" XXX: this may be too much
335" syn match   zshSwitches         '\s\zs--\=[a-zA-Z0-9-]\+'
336
337syn match   zshNumber           '[+-]\=\<\d\+\>'
338syn match   zshNumber           '[+-]\=\<0x\x\+\>'
339syn match   zshNumber           '[+-]\=\<0\o\+\>'
340syn match   zshNumber           '[+-]\=\d\+#[-+]\=\w\+\>'
341syn match   zshNumber           '[+-]\=\d\+\.\d\+\>'
342
343" TODO: $[...] is the same as $((...)), so add that as well.
344syn cluster zshSubst            contains=zshSubst,zshOldSubst,zshMathSubst
345syn region  zshSubst            matchgroup=zshSubstDelim transparent
346                                \ start='\$(' skip='\\)' end=')' contains=TOP fold
347syn region  zshParentheses      transparent start='(' skip='\\)' end=')' fold
348syn region  zshGlob             start='(#' end=')'
349syn region  zshMathSubst        matchgroup=zshSubstDelim transparent
350                                \ start='\$((' skip='\\)' end='))'
351                                \ contains=zshParentheses,@zshSubst,zshNumber,
352                                \ @zshDerefs,zshString keepend fold
353syn region  zshBrackets         contained transparent start='{' skip='\\}'
354                                \ end='}' fold
355syn region  zshBrackets         transparent start='{' skip='\\}'
356                                \ end='}' contains=TOP fold
357syn region  zshSubst            matchgroup=zshSubstDelim start='\${' skip='\\}'
358                                \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold
359syn region  zshOldSubst         matchgroup=zshSubstDelim start=+`+ skip=+\\`+
360                                \ end=+`+ contains=TOP,zshOldSubst fold
361
362syn sync    minlines=50 maxlines=90
363syn sync    match zshHereDocSync    grouphere   NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
364syn sync    match zshHereDocEndSync groupthere  NONE '^\s*EO\a\+\>'
365
366hi def link zshTodo             Todo
367hi def link zshComment          Comment
368hi def link zshPreProc          PreProc
369hi def link zshQuoted           SpecialChar
370hi def link zshString           String
371hi def link zshStringDelimiter  zshString
372hi def link zshPOSIXString      zshString
373hi def link zshJobSpec          Special
374hi def link zshPrecommand       Special
375hi def link zshDelimiter        Keyword
376hi def link zshConditional      Conditional
377hi def link zshException        Exception
378hi def link zshRepeat           Repeat
379hi def link zshKeyword          Keyword
380hi def link zshFunction         None
381hi def link zshKSHFunction      zshFunction
382hi def link zshHereDoc          String
383hi def link zshOperator         None
384hi def link zshRedir            Operator
385hi def link zshVariable         None
386hi def link zshVariableDef      zshVariable
387hi def link zshDereferencing    PreProc
388hi def link zshShortDeref       zshDereferencing
389hi def link zshLongDeref        zshDereferencing
390hi def link zshDeref            zshDereferencing
391hi def link zshDollarVar        zshDereferencing
392hi def link zshCommands         Keyword
393hi def link zshOptStart         Keyword
394hi def link zshOption           Constant
395hi def link zshTypes            Type
396hi def link zshSwitches         Special
397hi def link zshNumber           Number
398hi def link zshSubst            PreProc
399hi def link zshMathSubst        zshSubst
400hi def link zshOldSubst         zshSubst
401hi def link zshSubstDelim       zshSubst
402hi def link zshGlob             zshSubst
403
404let b:current_syntax = "zsh"
405
406let &cpo = s:cpo_save
407unlet s:cpo_save
408