blob: 1e947671a9ddd7d7c1f919499dae526bb5442cf9 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarf2571c62015-06-09 19:44:55 +02002" Language: Zsh shell script
3" Maintainer: Christian Brabandt <cb@256bit.org>
4" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
Bram Moolenaar96f45c02019-10-26 19:53:45 +02005" Latest Revision: 2018-07-13
Bram Moolenaarf2571c62015-06-09 19:44:55 +02006" License: Vim (see :h license)
Bram Moolenaar94237492017-04-23 18:40:21 +02007" Repository: https://github.com/chrisbra/vim-zsh
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
Bram Moolenaarc81e5e72007-05-05 18:24:42 +00009if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000010 finish
11endif
12
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000013let s:cpo_save = &cpo
14set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000015
Bram Moolenaarf3913272016-02-25 00:00:01 +010016if 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000024
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000025syn keyword zshTodo contained TODO FIXME XXX NOTE
Bram Moolenaar071d4272004-06-13 20:20:40 +000026
Bram Moolenaar94237492017-04-23 18:40:21 +020027syn region zshComment oneline start='\%(^\|\s\+\)#' end='$'
Bram Moolenaarf3913272016-02-25 00:00:01 +010028 \ contains=zshTodo,@Spell fold
29
30syn region zshComment start='^\s*#' end='^\%(\s*#\)\@!'
31 \ contains=zshTodo,@Spell fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000032
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000033syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$'
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000035syn match zshQuoted '\\.'
36syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+
Bram Moolenaarf3913272016-02-25 00:00:01 +010037 \ contains=zshQuoted,@zshDerefs,@zshSubst fold
38syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+ fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000039" 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\+\|[%+-]\)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000043
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000044syn keyword zshPrecommand noglob nocorrect exec command builtin - time
Bram Moolenaar071d4272004-06-13 20:20:40 +000045
Bram Moolenaarf2571c62015-06-09 19:44:55 +020046syn keyword zshDelimiter do done end
Bram Moolenaar071d4272004-06-13 20:20:40 +000047
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000048syn keyword zshConditional if then elif else fi case in esac select
Bram Moolenaar071d4272004-06-13 20:20:40 +000049
Bram Moolenaare37d50a2008-08-06 17:06:04 +000050syn keyword zshRepeat while until repeat
51
52syn keyword zshRepeat for foreach nextgroup=zshVariable skipwhite
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000054syn keyword zshException always
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000056syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite
Bram Moolenaar071d4272004-06-13 20:20:40 +000057
Bram Moolenaarf3913272016-02-25 00:00:01 +010058syn match zshKSHFunction contained '\w\S\+'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000059syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000067syn region zshHereDoc matchgroup=zshRedir
Bram Moolenaare37d50a2008-08-06 17:06:04 +000068 \ start='<\@<!<<\s*\z([^<]\S*\)'
69 \ end='^\z1\>'
Bram Moolenaar7db25fe2018-05-13 00:02:36 +020070 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000071syn region zshHereDoc matchgroup=zshRedir
Bram Moolenaare37d50a2008-08-06 17:06:04 +000072 \ start='<\@<!<<\s*\\\z(\S\+\)'
73 \ end='^\z1\>'
Bram Moolenaar7db25fe2018-05-13 00:02:36 +020074 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString
Bram Moolenaare37d50a2008-08-06 17:06:04 +000075syn region zshHereDoc matchgroup=zshRedir
76 \ start='<\@<!<<-\s*\\\=\z(\S\+\)'
77 \ end='^\s*\z1\>'
Bram Moolenaar7db25fe2018-05-13 00:02:36 +020078 \ contains=@zshSubst,@zshDerefs,zshQuoted,zshPOSIXString
Bram Moolenaare37d50a2008-08-06 17:06:04 +000079syn region zshHereDoc matchgroup=zshRedir
Bram Moolenaarf2571c62015-06-09 19:44:55 +020080 \ start=+<\@<!<<\s*\(["']\)\z(\S\+\)\1+
Bram Moolenaare37d50a2008-08-06 17:06:04 +000081 \ end='^\z1\>'
82syn region zshHereDoc matchgroup=zshRedir
83 \ start=+<\@<!<<-\s*\(["']\)\z(\S\+\)\1+
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000084 \ end='^\s*\z1\>'
85
Bram Moolenaare37d50a2008-08-06 17:06:04 +000086syn match zshVariable '\<\h\w*' contained
87
88syn match zshVariableDef '\<\h\w*\ze+\=='
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000089" XXX: how safe is this?
Bram Moolenaare37d50a2008-08-06 17:06:04 +000090syn region zshVariableDef oneline
Bram Moolenaar94237492017-04-23 18:40:21 +020091 \ start='\$\@<!\<\h\w*\[' end='\]\ze+\?=\?'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000092 \ contains=@zshSubst
93
Bram Moolenaar94237492017-04-23 18:40:21 +020094syn cluster zshDerefs contains=zshShortDeref,zshLongDeref,zshDeref,zshDollarVar
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000095
Bram Moolenaar94237492017-04-23 18:40:21 +020096syn match zshShortDeref '\$[!#$*@?_-]\w\@!'
97syn match zshShortDeref '\$[=^~]*[#+]*\d\+\>'
Bram Moolenaar071d4272004-06-13 20:20:40 +000098
Bram Moolenaar94237492017-04-23 18:40:21 +020099syn 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\)'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000102
Bram Moolenaar94237492017-04-23 18:40:21 +0200103syn match zshDollarVar '\$\h\w*'
104syn match zshDeref '\$[=^~]*[#+]*\h\w*\>'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000105
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
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200115 \ printf pushd pushln pwd r read
Bram Moolenaar94237492017-04-23 18:40:21 +0200116 \ rehash return sched set setcap shift
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000117 \ source stat suspend test times trap true
118 \ ttyctl type ulimit umask unalias unfunction
Bram Moolenaar94237492017-04-23 18:40:21 +0200119 \ unhash unlimit unset vared wait
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000120 \ whence where which zcompile zformat zftp zle
Bram Moolenaar7db25fe2018-05-13 00:02:36 +0200121 \ zmodload zparseopts zprof zpty zrecompile
122 \ zregexparse zsocket zstyle ztcp
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000123
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200124" Options, generated by: echo ${(j:\n:)options[(I)*]} | sort
Bram Moolenaarfa735342016-01-03 22:14:44 +0100125" Create a list of option names from zsh source dir:
126" #!/bin/zsh
127" topdir=/path/to/zsh-xxx
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200128" grep '^pindex([A-Za-z_]*)$' $topdir/Doc/Zsh/options.yo |
Bram Moolenaarfa735342016-01-03 22:14:44 +0100129" while read opt
130" do
131" echo ${${(L)opt#pindex\(}%\)}
132" done
133
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200134syn case ignore
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200135
Bram Moolenaar94237492017-04-23 18:40:21 +0200136syn match zshOptStart /^\s*\%(\%(\%(un\)\?setopt\)\|set\s+[-+]o\)/ nextgroup=zshOption skipwhite
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200137syn match zshOption /
138 \ \%(\%(\<no_\?\)\?aliases\>\)\|
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200139 \ \%(\%(\<no_\?\)\?aliasfuncdef\>\)\|\%(\%(no_\?\)\?alias_func_def\>\)\|
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200140 \ \%(\%(\<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\>\)\|
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200172 \ \%(\%(\<no_\?\)\?checkrunningjobs\>\)\|\%(\%(no_\?\)\?check_running_jobs\>\)\|
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200173 \ \%(\%(\<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\>\)\|
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200193 \ \%(\%(\<no_\?\)\?evallineno\>\)\|\%(\%(no_\?\)\?eval_lineno\>\)\|
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200194 \ \%(\%(\<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\>\)\|
Bram Moolenaar96f45c02019-10-26 19:53:45 +0200327 \ \%(\%(\<no_\?\)\?warnnestedvar\>\)\|\%(\%(no_\?\)\?warn_nested_var\>\)\|
Bram Moolenaarf55e4c82017-08-01 20:44:53 +0200328 \ \%(\%(\<no_\?\)\?warncreateglobal\>\)\|\%(\%(no_\?\)\?warn_create_global\>\)\|
329 \ \%(\%(\<no_\?\)\?xtrace\>\)\|
Bram Moolenaar2f058492017-11-30 20:27:52 +0100330 \ \%(\%(\<no_\?\)\?zle\>\)/ nextgroup=zshOption,zshComment skipwhite contained
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200331
Bram Moolenaar2f058492017-11-30 20:27:52 +0100332syn keyword zshTypes float integer local typeset declare private readonly
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000333
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
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000343" TODO: $[...] is the same as $((...)), so add that as well.
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000344syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst
345syn region zshSubst matchgroup=zshSubstDelim transparent
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100346 \ start='\$(' skip='\\)' end=')' contains=TOP fold
347syn region zshParentheses transparent start='(' skip='\\)' end=')' fold
Bram Moolenaar94237492017-04-23 18:40:21 +0200348syn region zshGlob start='(#' end=')'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000349syn region zshMathSubst matchgroup=zshSubstDelim transparent
Bram Moolenaar94237492017-04-23 18:40:21 +0200350 \ start='\$((' skip='\\)' end='))'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000351 \ contains=zshParentheses,@zshSubst,zshNumber,
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100352 \ @zshDerefs,zshString keepend fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000353syn region zshBrackets contained transparent start='{' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100354 \ end='}' fold
Bram Moolenaarf3913272016-02-25 00:00:01 +0100355syn region zshBrackets transparent start='{' skip='\\}'
356 \ end='}' contains=TOP fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000357syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100358 \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000359syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100360 \ end=+`+ contains=TOP,zshOldSubst fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000361
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200362syn sync minlines=50 maxlines=90
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000363syn sync match zshHereDocSync grouphere NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
364syn sync match zshHereDocEndSync groupthere NONE '^\s*EO\a\+\>'
365
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000366hi 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
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200383hi def link zshOperator None
384hi def link zshRedir Operator
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000385hi def link zshVariable None
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000386hi def link zshVariableDef zshVariable
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000387hi def link zshDereferencing PreProc
Bram Moolenaar94237492017-04-23 18:40:21 +0200388hi def link zshShortDeref zshDereferencing
389hi def link zshLongDeref zshDereferencing
390hi def link zshDeref zshDereferencing
391hi def link zshDollarVar zshDereferencing
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000392hi def link zshCommands Keyword
Bram Moolenaar94237492017-04-23 18:40:21 +0200393hi def link zshOptStart Keyword
394hi def link zshOption Constant
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000395hi 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
Bram Moolenaar94237492017-04-23 18:40:21 +0200402hi def link zshGlob zshSubst
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000403
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404let b:current_syntax = "zsh"
405
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000406let &cpo = s:cpo_save
407unlet s:cpo_save