blob: 0d385a35d03f73f6a5acf39f698d5ce75ec664f0 [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 Moolenaarf3913272016-02-25 00:00:01 +01005" Latest Revision: 2016-02-15
Bram Moolenaarf2571c62015-06-09 19:44:55 +02006" License: Vim (see :h license)
7" 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 Moolenaarf2571c62015-06-09 19:44:55 +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\>'
70 \ contains=@zshSubst
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\>'
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
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 Moolenaarc81e5e72007-05-05 18:24:42 +000091 \ start='\$\@<!\<\h\w*\[' end='\]\ze+\=='
92 \ contains=@zshSubst
93
94syn cluster zshDerefs contains=zshShortDeref,zshLongDeref,zshDeref
95
96if !exists("g:zsh_syntax_variables")
97 let s:zsh_syntax_variables = 'all'
98else
99 let s:zsh_syntax_variables = g:zsh_syntax_variables
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100endif
101
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000102if s:zsh_syntax_variables =~ 'short\|all'
103 syn match zshShortDeref '\$[!#$*@?_-]\w\@!'
104 syn match zshShortDeref '\$[=^~]*[#+]*\d\+\>'
105endif
106
107if s:zsh_syntax_variables =~ 'long\|all'
108 syn match zshLongDeref '\$\%(ARGC\|argv\|status\|pipestatus\|CPUTYPE\|EGID\|EUID\|ERRNO\|GID\|HOST\|LINENO\|LOGNAME\)'
109 syn match zshLongDeref '\$\%(MACHTYPE\|OLDPWD OPTARG\|OPTIND\|OSTYPE\|PPID\|PWD\|RANDOM\|SECONDS\|SHLVL\|signals\)'
110 syn match zshLongDeref '\$\%(TRY_BLOCK_ERROR\|TTY\|TTYIDLE\|UID\|USERNAME\|VENDOR\|ZSH_NAME\|ZSH_VERSION\|REPLY\|reply\|TERM\)'
111endif
112
113if s:zsh_syntax_variables =~ 'all'
114 syn match zshDeref '\$[=^~]*[#+]*\h\w*\>'
115else
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000116 syn match zshDeref transparent contains=NONE '\$[=^~]*[#+]*\h\w*\>'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000117endif
118
119syn match zshCommands '\%(^\|\s\)[.:]\ze\s'
120syn keyword zshCommands alias autoload bg bindkey break bye cap cd
121 \ chdir clone comparguments compcall compctl
122 \ compdescribe compfiles compgroups compquote
123 \ comptags comptry compvalues continue dirs
124 \ disable disown echo echotc echoti emulate
125 \ enable eval exec exit export false fc fg
126 \ functions getcap getln getopts hash history
127 \ jobs kill let limit log logout popd print
128 \ printf pushd pushln pwd r read readonly
129 \ rehash return sched set setcap setopt shift
130 \ source stat suspend test times trap true
131 \ ttyctl type ulimit umask unalias unfunction
132 \ unhash unlimit unset unsetopt vared wait
133 \ whence where which zcompile zformat zftp zle
134 \ zmodload zparseopts zprof zpty zregexparse
135 \ zsocket zstyle ztcp
136
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200137" Options, generated by: echo ${(j:\n:)options[(I)*]} | sort
Bram Moolenaarfa735342016-01-03 22:14:44 +0100138" Create a list of option names from zsh source dir:
139" #!/bin/zsh
140" topdir=/path/to/zsh-xxx
141" grep '^pindex([A-Za-z_]*)$' $topdir/Src/Doc/Zsh/optionsyo |
142" while read opt
143" do
144" echo ${${(L)opt#pindex\(}%\)}
145" done
146
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200147syn case ignore
148syn keyword zshOptions aliases allexport all_export alwayslastprompt
Bram Moolenaarfa735342016-01-03 22:14:44 +0100149 \ always_last_prompt always_lastprompt alwaystoend always_to_end appendcreate
150 \ append_create appendhistory append_history autocd auto_cd autocontinue
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200151 \ auto_continue autolist auto_list
152 \ automenu auto_menu autonamedirs auto_name_dirs
153 \ autoparamkeys auto_param_keys autoparamslash
154 \ auto_param_slash autopushd auto_pushd autoremoveslash
Bram Moolenaarfa735342016-01-03 22:14:44 +0100155 \ auto_remove_slash autoresume auto_resume badpattern bad_pattern
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200156 \ banghist bang_hist bareglobqual bare_glob_qual
157 \ bashautolist bash_auto_list bashrematch bash_rematch
Bram Moolenaarfa735342016-01-03 22:14:44 +0100158 \ beep bgnice bg_nice braceccl brace_ccl braceexpand brace_expand
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200159 \ bsdecho bsd_echo caseglob case_glob casematch case_match
Bram Moolenaarfa735342016-01-03 22:14:44 +0100160 \ cbases c_bases cdablevars cdable_vars cd_able_vars chasedots chase_dots
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200161 \ chaselinks chase_links checkjobs check_jobs
162 \ clobber combiningchars combining_chars completealiases
163 \ complete_aliases completeinword complete_in_word
164 \ continueonerror continue_on_error correct
165 \ correctall correct_all cprecedences c_precedences
166 \ cshjunkiehistory csh_junkie_history cshjunkieloops
167 \ csh_junkie_loops cshjunkiequotes csh_junkie_quotes
Bram Moolenaarfa735342016-01-03 22:14:44 +0100168 \ csh_nullcmd csh_null_cmd cshnullcmd csh_null_cmd cshnullglob csh_null_glob
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200169 \ debugbeforecmd debug_before_cmd dotglob dot_glob dvorak
170 \ emacs equals errexit err_exit errreturn err_return evallineno
171 \ eval_lineno exec extendedglob extended_glob extendedhistory
172 \ extended_history flowcontrol flow_control forcefloat
Bram Moolenaarfa735342016-01-03 22:14:44 +0100173 \ force_float functionargzero function_argzero function_arg_zero glob globalexport
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200174 \ global_export globalrcs global_rcs globassign glob_assign
175 \ globcomplete glob_complete globdots glob_dots glob_subst
Bram Moolenaarfa735342016-01-03 22:14:44 +0100176 \ globsubst globstarshort glob_star_short hashall hash_all hashcmds
177 \ hash_cmds hashdirs hash_dirs hashexecutablesonly hash_executables_only
178 \ hashlistall hash_list_all histallowclobber hist_allow_clobber histappend
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200179 \ hist_append histbeep hist_beep hist_expand hist_expire_dups_first
180 \ histexpand histexpiredupsfirst histfcntllock hist_fcntl_lock
181 \ histfindnodups hist_find_no_dups histignorealldups
182 \ hist_ignore_all_dups histignoredups hist_ignore_dups
183 \ histignorespace hist_ignore_space histlexwords hist_lex_words
184 \ histnofunctions hist_no_functions histnostore hist_no_store
185 \ histreduceblanks hist_reduce_blanks histsavebycopy
186 \ hist_save_by_copy histsavenodups hist_save_no_dups
187 \ histsubstpattern hist_subst_pattern histverify hist_verify
188 \ hup ignorebraces ignore_braces ignoreclosebraces ignore_close_braces
189 \ ignoreeof ignore_eof incappendhistory inc_append_history
190 \ incappendhistorytime inc_append_history_time interactive
191 \ interactivecomments interactive_comments ksharrays ksh_arrays
192 \ kshautoload ksh_autoload kshglob ksh_glob kshoptionprint
193 \ ksh_option_print kshtypeset ksh_typeset kshzerosubscript
194 \ ksh_zero_subscript listambiguous list_ambiguous listbeep
195 \ list_beep listpacked list_packed listrowsfirst list_rows_first
196 \ listtypes list_types localloops local_loops localoptions
197 \ local_options localpatterns local_patterns localtraps
198 \ local_traps log login longlistjobs long_list_jobs magicequalsubst
199 \ magic_equal_subst mailwarn mail_warn mail_warning mark_dirs
200 \ mailwarning markdirs menucomplete menu_complete monitor
201 \ multibyte multi_byte multifuncdef multi_func_def multios
202 \ multi_os nomatch no_match notify nullglob null_glob numericglobsort
203 \ numeric_glob_sort octalzeroes octal_zeroes onecmd one_cmd
204 \ overstrike over_strike pathdirs path_dirs pathscript
205 \ path_script physical pipefail pipe_fail posixaliases
Bram Moolenaarfa735342016-01-03 22:14:44 +0100206 \ posix_aliases posixargzero posix_arg_zero posix_argzero posixbuiltins
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200207 \ posix_builtins posixcd posix_cd posixidentifiers posix_identifiers
208 \ posixjobs posix_jobs posixstrings posix_strings posixtraps
209 \ posix_traps printeightbit print_eight_bit printexitvalue
210 \ print_exit_value privileged promptbang prompt_bang promptcr
211 \ prompt_cr promptpercent prompt_percent promptsp prompt_sp
212 \ promptsubst prompt_subst promptvars prompt_vars pushdignoredups
213 \ pushd_ignore_dups pushdminus pushd_minus pushdsilent pushd_silent
Bram Moolenaarfa735342016-01-03 22:14:44 +0100214 \ pushdtohome pushd_to_home rcexpandparam rc_expandparam rc_expand_param rcquotes
215 \ rc_quotes rcs recexact rec_exact rematchpcre re_match_pcre rematch_pcre
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200216 \ restricted rmstarsilent rm_star_silent rmstarwait rm_star_wait
217 \ sharehistory share_history shfileexpansion sh_file_expansion
218 \ shglob sh_glob shinstdin shin_stdin shnullcmd sh_nullcmd
219 \ shoptionletters sh_option_letters shortloops short_loops shwordsplit
220 \ sh_word_split singlecommand single_command singlelinezle single_line_zle
221 \ sourcetrace source_trace stdin sunkeyboardhack sun_keyboard_hack
222 \ trackall track_all transientrprompt transient_rprompt
Bram Moolenaarfa735342016-01-03 22:14:44 +0100223 \ trapsasync traps_async typesetsilent type_set_silent typeset_silent unset verbose vi
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200224 \ warncreateglobal warn_create_global xtrace zle
225
226syn keyword zshOptions noaliases no_aliases noallexport no_allexport noall_export no_all_export noalwayslastprompt no_alwayslastprompt
Bram Moolenaarfa735342016-01-03 22:14:44 +0100227 \ noalways_lastprompt no_always_lastprompt no_always_last_prompt noalwaystoend no_alwaystoend noalways_to_end no_always_to_end
228 \ noappendcreate no_appendcreate no_append_create noappendhistory no_appendhistory noappend_history no_append_history noautocd
229 \ no_autocd no_auto_cd noautocontinue no_autocontinue noauto_continue no_auto_continue noautolist no_autolist noauto_list
230 \ no_auto_list noautomenu no_automenu noauto_menu no_auto_menu noautonamedirs no_autonamedirs noauto_name_dirs
231 \ no_auto_name_dirs noautoparamkeys no_autoparamkeys noauto_param_keys no_auto_param_keys noautoparamslash no_autoparamslash
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200232 \ noauto_param_slash no_auto_param_slash noautopushd no_autopushd noauto_pushd no_auto_pushd noautoremoveslash no_autoremoveslash
Bram Moolenaarfa735342016-01-03 22:14:44 +0100233 \ noauto_remove_slash no_auto_remove_slash noautoresume no_autoresume noauto_resume no_auto_resume nobadpattern no_badpattern no_bad_pattern
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200234 \ nobanghist no_banghist nobang_hist no_bang_hist nobareglobqual no_bareglobqual nobare_glob_qual no_bare_glob_qual
235 \ nobashautolist no_bashautolist nobash_auto_list no_bash_auto_list nobashrematch no_bashrematch nobash_rematch no_bash_rematch
Bram Moolenaarfa735342016-01-03 22:14:44 +0100236 \ nobeep no_beep nobgnice no_bgnice no_bg_nice nobraceccl no_braceccl nobrace_ccl no_brace_ccl nobraceexpand no_braceexpand nobrace_expand no_brace_expand
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200237 \ nobsdecho no_bsdecho nobsd_echo no_bsd_echo nocaseglob no_caseglob nocase_glob no_case_glob nocasematch no_casematch nocase_match no_case_match
Bram Moolenaarfa735342016-01-03 22:14:44 +0100238 \ nocbases no_cbases no_c_bases nocdablevars no_cdablevars no_cdable_vars nocd_able_vars no_cd_able_vars nochasedots no_chasedots nochase_dots no_chase_dots
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200239 \ nochaselinks no_chaselinks nochase_links no_chase_links nocheckjobs no_checkjobs nocheck_jobs no_check_jobs
240 \ noclobber no_clobber nocombiningchars no_combiningchars nocombining_chars no_combining_chars nocompletealiases no_completealiases
241 \ nocomplete_aliases no_complete_aliases nocompleteinword no_completeinword nocomplete_in_word no_complete_in_word
242 \ nocontinueonerror no_continueonerror nocontinue_on_error no_continue_on_error nocorrect no_correct
243 \ nocorrectall no_correctall nocorrect_all no_correct_all nocprecedences no_cprecedences noc_precedences no_c_precedences
244 \ nocshjunkiehistory no_cshjunkiehistory nocsh_junkie_history no_csh_junkie_history nocshjunkieloops no_cshjunkieloops
245 \ nocsh_junkie_loops no_csh_junkie_loops nocshjunkiequotes no_cshjunkiequotes nocsh_junkie_quotes no_csh_junkie_quotes
Bram Moolenaarfa735342016-01-03 22:14:44 +0100246 \ nocshnullcmd no_cshnullcmd no_csh_nullcmd nocsh_null_cmd no_csh_null_cmd nocshnullglob no_cshnullglob nocsh_null_glob no_csh_null_glob
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200247 \ nodebugbeforecmd no_debugbeforecmd nodebug_before_cmd no_debug_before_cmd nodotglob no_dotglob nodot_glob no_dot_glob nodvorak no_dvorak
248 \ noemacs no_emacs noequals no_equals noerrexit no_errexit noerr_exit no_err_exit noerrreturn no_errreturn noerr_return no_err_return noevallineno no_evallineno
249 \ noeval_lineno no_eval_lineno noexec no_exec noextendedglob no_extendedglob noextended_glob no_extended_glob noextendedhistory no_extendedhistory
250 \ noextended_history no_extended_history noflowcontrol no_flowcontrol noflow_control no_flow_control noforcefloat no_forcefloat
Bram Moolenaarfa735342016-01-03 22:14:44 +0100251 \ noforce_float no_force_float nofunctionargzero no_functionargzero nofunction_arg_zero no_function_argzero no_function_arg_zero noglob no_glob noglobalexport no_globalexport
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200252 \ noglobal_export no_global_export noglobalrcs no_globalrcs noglobal_rcs no_global_rcs noglobassign no_globassign noglob_assign no_glob_assign
Bram Moolenaarfa735342016-01-03 22:14:44 +0100253 \ noglobcomplete no_globcomplete noglob_complete no_glob_complete noglobdots no_globdots noglob_dots no_glob_dots
254 \ noglobstarshort no_glob_star_short noglob_subst no_glob_subst
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200255 \ noglobsubst no_globsubst nohashall no_hashall nohash_all no_hash_all nohashcmds no_hashcmds nohash_cmds no_hash_cmds nohashdirs no_hashdirs
256 \ nohash_dirs no_hash_dirs nohashexecutablesonly no_hashexecutablesonly nohash_executables_only no_hash_executables_only nohashlistall no_hashlistall
257 \ nohash_list_all no_hash_list_all nohistallowclobber no_histallowclobber nohist_allow_clobber no_hist_allow_clobber nohistappend no_histappend
258 \ nohist_append no_hist_append nohistbeep no_histbeep nohist_beep no_hist_beep nohist_expand no_hist_expand nohist_expire_dups_first no_hist_expire_dups_first
259 \ nohistexpand no_histexpand nohistexpiredupsfirst no_histexpiredupsfirst nohistfcntllock no_histfcntllock nohist_fcntl_lock no_hist_fcntl_lock
260 \ nohistfindnodups no_histfindnodups nohist_find_no_dups no_hist_find_no_dups nohistignorealldups no_histignorealldups
261 \ nohist_ignore_all_dups no_hist_ignore_all_dups nohistignoredups no_histignoredups nohist_ignore_dups no_hist_ignore_dups
262 \ nohistignorespace no_histignorespace nohist_ignore_space no_hist_ignore_space nohistlexwords no_histlexwords nohist_lex_words no_hist_lex_words
263 \ nohistnofunctions no_histnofunctions nohist_no_functions no_hist_no_functions nohistnostore no_histnostore nohist_no_store no_hist_no_store
264 \ nohistreduceblanks no_histreduceblanks nohist_reduce_blanks no_hist_reduce_blanks nohistsavebycopy no_histsavebycopy
265 \ nohist_save_by_copy no_hist_save_by_copy nohistsavenodups no_histsavenodups nohist_save_no_dups no_hist_save_no_dups
266 \ nohistsubstpattern no_histsubstpattern nohist_subst_pattern no_hist_subst_pattern nohistverify no_histverify nohist_verify no_hist_verify
267 \ nohup no_hup noignorebraces no_ignorebraces noignore_braces no_ignore_braces noignoreclosebraces no_ignoreclosebraces noignore_close_braces no_ignore_close_braces
268 \ noignoreeof no_ignoreeof noignore_eof no_ignore_eof noincappendhistory no_incappendhistory noinc_append_history no_inc_append_history
269 \ noincappendhistorytime no_incappendhistorytime noinc_append_history_time no_inc_append_history_time nointeractive no_interactive
270 \ nointeractivecomments no_interactivecomments nointeractive_comments no_interactive_comments noksharrays no_ksharrays noksh_arrays no_ksh_arrays
271 \ nokshautoload no_kshautoload noksh_autoload no_ksh_autoload nokshglob no_kshglob noksh_glob no_ksh_glob nokshoptionprint no_kshoptionprint
272 \ noksh_option_print no_ksh_option_print nokshtypeset no_kshtypeset noksh_typeset no_ksh_typeset nokshzerosubscript no_kshzerosubscript
273 \ noksh_zero_subscript no_ksh_zero_subscript nolistambiguous no_listambiguous nolist_ambiguous no_list_ambiguous nolistbeep no_listbeep
274 \ nolist_beep no_list_beep nolistpacked no_listpacked nolist_packed no_list_packed nolistrowsfirst no_listrowsfirst nolist_rows_first no_list_rows_first
275 \ nolisttypes no_listtypes nolist_types no_list_types nolocalloops no_localloops nolocal_loops no_local_loops nolocaloptions no_localoptions
276 \ nolocal_options no_local_options nolocalpatterns no_localpatterns nolocal_patterns no_local_patterns nolocaltraps no_localtraps
277 \ nolocal_traps no_local_traps nolog no_log nologin no_login nolonglistjobs no_longlistjobs nolong_list_jobs no_long_list_jobs nomagicequalsubst no_magicequalsubst
278 \ nomagic_equal_subst no_magic_equal_subst nomailwarn no_mailwarn nomail_warn no_mail_warn nomail_warning no_mail_warning nomark_dirs no_mark_dirs
279 \ nomailwarning no_mailwarning nomarkdirs no_markdirs nomenucomplete no_menucomplete nomenu_complete no_menu_complete nomonitor no_monitor
280 \ nomultibyte no_multibyte nomulti_byte no_multi_byte nomultifuncdef no_multifuncdef nomulti_func_def no_multi_func_def nomultios no_multios
281 \ nomulti_os no_multi_os nonomatch no_nomatch nono_match no_no_match nonotify no_notify nonullglob no_nullglob nonull_glob no_null_glob nonumericglobsort no_numericglobsort
282 \ nonumeric_glob_sort no_numeric_glob_sort nooctalzeroes no_octalzeroes nooctal_zeroes no_octal_zeroes noonecmd no_onecmd noone_cmd no_one_cmd
283 \ nooverstrike no_overstrike noover_strike no_over_strike nopathdirs no_pathdirs nopath_dirs no_path_dirs nopathscript no_pathscript
284 \ nopath_script no_path_script nophysical no_physical nopipefail no_pipefail nopipe_fail no_pipe_fail noposixaliases no_posixaliases
Bram Moolenaarfa735342016-01-03 22:14:44 +0100285 \ noposix_aliases no_posix_aliases noposixargzero no_posixargzero no_posix_argzero noposix_arg_zero no_posix_arg_zero noposixbuiltins no_posixbuiltins
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200286 \ noposix_builtins no_posix_builtins noposixcd no_posixcd noposix_cd no_posix_cd noposixidentifiers no_posixidentifiers noposix_identifiers no_posix_identifiers
287 \ noposixjobs no_posixjobs noposix_jobs no_posix_jobs noposixstrings no_posixstrings noposix_strings no_posix_strings noposixtraps no_posixtraps
288 \ noposix_traps no_posix_traps noprinteightbit no_printeightbit noprint_eight_bit no_print_eight_bit noprintexitvalue no_printexitvalue
289 \ noprint_exit_value no_print_exit_value noprivileged no_privileged nopromptbang no_promptbang noprompt_bang no_prompt_bang nopromptcr no_promptcr
290 \ noprompt_cr no_prompt_cr nopromptpercent no_promptpercent noprompt_percent no_prompt_percent nopromptsp no_promptsp noprompt_sp no_prompt_sp
291 \ nopromptsubst no_promptsubst noprompt_subst no_prompt_subst nopromptvars no_promptvars noprompt_vars no_prompt_vars nopushdignoredups no_pushdignoredups
292 \ nopushd_ignore_dups no_pushd_ignore_dups nopushdminus no_pushdminus nopushd_minus no_pushd_minus nopushdsilent no_pushdsilent nopushd_silent no_pushd_silent
Bram Moolenaarfa735342016-01-03 22:14:44 +0100293 \ nopushdtohome no_pushdtohome nopushd_to_home no_pushd_to_home norcexpandparam no_rcexpandparam norc_expandparam no_rc_expandparam no_rc_expand_param norcquotes no_rcquotes
294 \ norc_quotes no_rc_quotes norcs no_rcs norecexact no_recexact norec_exact no_rec_exact norematchpcre no_rematchpcre nore_match_pcre no_re_match_pcre no_rematch_pcre
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200295 \ norestricted no_restricted normstarsilent no_rmstarsilent norm_star_silent no_rm_star_silent normstarwait no_rmstarwait norm_star_wait no_rm_star_wait
296 \ nosharehistory no_sharehistory noshare_history no_share_history noshfileexpansion no_shfileexpansion nosh_file_expansion no_sh_file_expansion
297 \ noshglob no_shglob nosh_glob no_sh_glob noshinstdin no_shinstdin noshin_stdin no_shin_stdin noshnullcmd no_shnullcmd nosh_nullcmd no_sh_nullcmd
298 \ noshoptionletters no_shoptionletters nosh_option_letters no_sh_option_letters noshortloops no_shortloops noshort_loops no_short_loops noshwordsplit no_shwordsplit
299 \ nosh_word_split no_sh_word_split nosinglecommand no_singlecommand nosingle_command no_single_command nosinglelinezle no_singlelinezle nosingle_line_zle no_single_line_zle
300 \ nosourcetrace no_sourcetrace nosource_trace no_source_trace nostdin no_stdin nosunkeyboardhack no_sunkeyboardhack nosun_keyboard_hack no_sun_keyboard_hack
301 \ notrackall no_trackall notrack_all no_track_all notransientrprompt no_transientrprompt notransient_rprompt no_transient_rprompt
Bram Moolenaarfa735342016-01-03 22:14:44 +0100302 \ notrapsasync no_trapsasync notrapasync no_trapasync no_traps_async notypesetsilent no_typesetsilent notype_set_silent no_type_set_silent no_typeset_silent \nounset no_unset
303 \ noverbose no_verbose novi no_vi nowarncreateglobal no_warncreateglobal nowarn_create_global no_warn_create_global noxtrace no_xtrace nozle no_zle
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200304syn case match
305
Bram Moolenaarfa735342016-01-03 22:14:44 +0100306syn keyword zshTypes float integer local typeset declare private
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000307
308" XXX: this may be too much
309" syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+'
310
311syn match zshNumber '[+-]\=\<\d\+\>'
312syn match zshNumber '[+-]\=\<0x\x\+\>'
313syn match zshNumber '[+-]\=\<0\o\+\>'
314syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>'
315syn match zshNumber '[+-]\=\d\+\.\d\+\>'
316
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000317" TODO: $[...] is the same as $((...)), so add that as well.
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000318syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst
319syn region zshSubst matchgroup=zshSubstDelim transparent
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100320 \ start='\$(' skip='\\)' end=')' contains=TOP fold
321syn region zshParentheses transparent start='(' skip='\\)' end=')' fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000322syn region zshMathSubst matchgroup=zshSubstDelim transparent
323 \ start='\$((' skip='\\)'
324 \ matchgroup=zshSubstDelim end='))'
325 \ contains=zshParentheses,@zshSubst,zshNumber,
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100326 \ @zshDerefs,zshString keepend fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000327syn region zshBrackets contained transparent start='{' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100328 \ end='}' fold
Bram Moolenaarf3913272016-02-25 00:00:01 +0100329syn region zshBrackets transparent start='{' skip='\\}'
330 \ end='}' contains=TOP fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000331syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100332 \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000333syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100334 \ end=+`+ contains=TOP,zshOldSubst fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000335
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200336syn sync minlines=50 maxlines=90
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000337syn sync match zshHereDocSync grouphere NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
338syn sync match zshHereDocEndSync groupthere NONE '^\s*EO\a\+\>'
339
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000340hi def link zshTodo Todo
341hi def link zshComment Comment
342hi def link zshPreProc PreProc
343hi def link zshQuoted SpecialChar
344hi def link zshString String
345hi def link zshStringDelimiter zshString
346hi def link zshPOSIXString zshString
347hi def link zshJobSpec Special
348hi def link zshPrecommand Special
349hi def link zshDelimiter Keyword
350hi def link zshConditional Conditional
351hi def link zshException Exception
352hi def link zshRepeat Repeat
353hi def link zshKeyword Keyword
354hi def link zshFunction None
355hi def link zshKSHFunction zshFunction
356hi def link zshHereDoc String
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200357hi def link zshOperator None
358hi def link zshRedir Operator
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000359hi def link zshVariable None
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000360hi def link zshVariableDef zshVariable
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000361hi def link zshDereferencing PreProc
362if s:zsh_syntax_variables =~ 'short\|all'
363 hi def link zshShortDeref zshDereferencing
364else
365 hi def link zshShortDeref None
366endif
367if s:zsh_syntax_variables =~ 'long\|all'
368 hi def link zshLongDeref zshDereferencing
369else
370 hi def link zshLongDeref None
371endif
372if s:zsh_syntax_variables =~ 'all'
373 hi def link zshDeref zshDereferencing
374else
375 hi def link zshDeref None
376endif
377hi def link zshCommands Keyword
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200378hi def link zshOptions Constant
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000379hi def link zshTypes Type
380hi def link zshSwitches Special
381hi def link zshNumber Number
382hi def link zshSubst PreProc
383hi def link zshMathSubst zshSubst
384hi def link zshOldSubst zshSubst
385hi def link zshSubstDelim zshSubst
386
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387let b:current_syntax = "zsh"
388
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000389let &cpo = s:cpo_save
390unlet s:cpo_save