blob: c69ef153a080c55841d3e538847d65d2e6e05081 [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 Moolenaar94237492017-04-23 18:40:21 +02005" Latest Revision: 2017-04-10
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\>'
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 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
115 \ printf pushd pushln pwd r read readonly
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
121 \ zmodload zparseopts zprof zpty zregexparse
122 \ zsocket zstyle ztcp
123
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
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
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
137syn match zshOption /\%(\%(no_\?\)\?aliases\)\|\%(\%(no_\?\)\?allexport\)\|\%(\%(no_\?\)\?all_export\)\|\%(\%(no_\?\)\?alwayslastprompt\)\|\%(\%(no_\?\)\?always_last_prompt\)\|\%(\%(no_\?\)\?always_lastprompt\)\|\%(\%(no_\?\)\?alwaystoend\)\|\%(\%(no_\?\)\?always_to_end\)\|\%(\%(no_\?\)\?appendcreate\)\|\%(\%(no_\?\)\?append_create\)\|\%(\%(no_\?\)\?appendhistory\)\|\%(\%(no_\?\)\?append_history\)\|\%(\%(no_\?\)\?autocd\)\|\%(\%(no_\?\)\?auto_cd\)\|\%(\%(no_\?\)\?autocontinue\)\|\%(\%(no_\?\)\?auto_continue\)\|\%(\%(no_\?\)\?autolist\)\|\%(\%(no_\?\)\?auto_list\)\|\%(\%(no_\?\)\?automenu\)\|\%(\%(no_\?\)\?auto_menu\)\|\%(\%(no_\?\)\?autonamedirs\)\|\%(\%(no_\?\)\?auto_name_dirs\)\|\%(\%(no_\?\)\?autoparamkeys\)\|\%(\%(no_\?\)\?auto_param_keys\)\|\%(\%(no_\?\)\?autoparamslash\)\|\%(\%(no_\?\)\?auto_param_slash\)\|\%(\%(no_\?\)\?autopushd\)\|\%(\%(no_\?\)\?auto_pushd\)\|\%(\%(no_\?\)\?autoremoveslash\)\|\%(\%(no_\?\)\?auto_remove_slash\)\|\%(\%(no_\?\)\?autoresume\)\|\%(\%(no_\?\)\?auto_resume\)\|\%(\%(no_\?\)\?badpattern\)\|\%(\%(no_\?\)\?bad_pattern\)\|\%(\%(no_\?\)\?banghist\)\|\%(\%(no_\?\)\?bang_hist\)\|\%(\%(no_\?\)\?bareglobqual\)\|\%(\%(no_\?\)\?bare_glob_qual\)\|\%(\%(no_\?\)\?bashautolist\)\|\%(\%(no_\?\)\?bash_auto_list\)\|\%(\%(no_\?\)\?bashrematch\)\|\%(\%(no_\?\)\?bash_rematch\)\|\%(\%(no_\?\)\?beep\)\|\%(\%(no_\?\)\?bgnice\)\|\%(\%(no_\?\)\?bg_nice\)\|\%(\%(no_\?\)\?braceccl\)\|\%(\%(no_\?\)\?brace_ccl\)\|\%(\%(no_\?\)\?braceexpand\)\|\%(\%(no_\?\)\?brace_expand\)\|\%(\%(no_\?\)\?bsdecho\)\|\%(\%(no_\?\)\?bsd_echo\)\|\%(\%(no_\?\)\?caseglob\)\|\%(\%(no_\?\)\?case_glob\)\|\%(\%(no_\?\)\?casematch\)\|\%(\%(no_\?\)\?case_match\)\|\%(\%(no_\?\)\?cbases\)\|\%(\%(no_\?\)\?c_bases\)\|\%(\%(no_\?\)\?cdablevars\)\|\%(\%(no_\?\)\?cdable_vars\)\|\%(\%(no_\?\)\?cd_able_vars\)\|\%(\%(no_\?\)\?chasedots\)\|\%(\%(no_\?\)\?chase_dots\)\|\%(\%(no_\?\)\?chaselinks\)\|\%(\%(no_\?\)\?chase_links\)\|\%(\%(no_\?\)\?checkjobs\)\|\%(\%(no_\?\)\?check_jobs\)\|\%(\%(no_\?\)\?clobber\)\|\%(\%(no_\?\)\?combiningchars\)\|\%(\%(no_\?\)\?combining_chars\)\|\%(\%(no_\?\)\?completealiases\)\|\%(\%(no_\?\)\?complete_aliases\)\|\%(\%(no_\?\)\?completeinword\)\|\%(\%(no_\?\)\?complete_in_word\)\|\%(\%(no_\?\)\?continueonerror\)\|\%(\%(no_\?\)\?continue_on_error\)\|\%(\%(no_\?\)\?correct\)\|\%(\%(no_\?\)\?correctall\)\|\%(\%(no_\?\)\?correct_all\)\|\%(\%(no_\?\)\?cprecedences\)\|\%(\%(no_\?\)\?c_precedences\)\|\%(\%(no_\?\)\?cshjunkiehistory\)\|\%(\%(no_\?\)\?csh_junkie_history\)\|\%(\%(no_\?\)\?cshjunkieloops\)\|\%(\%(no_\?\)\?csh_junkie_loops\)\|\%(\%(no_\?\)\?cshjunkiequotes\)\|\%(\%(no_\?\)\?csh_junkie_quotes\)\|\%(\%(no_\?\)\?csh_nullcmd\)\|\%(\%(no_\?\)\?csh_null_cmd\)\|\%(\%(no_\?\)\?cshnullcmd\)\|\%(\%(no_\?\)\?csh_null_cmd\)\|\%(\%(no_\?\)\?cshnullglob\)\|\%(\%(no_\?\)\?csh_null_glob\)\|\%(\%(no_\?\)\?debugbeforecmd\)\|\%(\%(no_\?\)\?debug_before_cmd\)\|\%(\%(no_\?\)\?dotglob\)\|\%(\%(no_\?\)\?dot_glob\)\|\%(\%(no_\?\)\?dvorak\)\|\%(\%(no_\?\)\?emacs\)\|\%(\%(no_\?\)\?equals\)\|\%(\%(no_\?\)\?errexit\)\|\%(\%(no_\?\)\?err_exit\)\|\%(\%(no_\?\)\?errreturn\)\|\%(\%(no_\?\)\?err_return\)\|\%(\%(no_\?\)\?evallineno\)\|\%(\%(no_\?\)\?eval_lineno\)\|\%(\%(no_\?\)\?exec\)\|\%(\%(no_\?\)\?extendedglob\)\|\%(\%(no_\?\)\?extended_glob\)\|\%(\%(no_\?\)\?extendedhistory\)\|\%(\%(no_\?\)\?extended_history\)\|\%(\%(no_\?\)\?flowcontrol\)\|\%(\%(no_\?\)\?flow_control\)\|\%(\%(no_\?\)\?forcefloat\)\|\%(\%(no_\?\)\?force_float\)\|\%(\%(no_\?\)\?functionargzero\)\|\%(\%(no_\?\)\?function_argzero\)\|\%(\%(no_\?\)\?function_arg_zero\)\|\%(\%(no_\?\)\?glob\)\|\%(\%(no_\?\)\?globalexport\)\|\%(\%(no_\?\)\?global_export\)\|\%(\%(no_\?\)\?globalrcs\)\|\%(\%(no_\?\)\?global_rcs\)\|\%(\%(no_\?\)\?globassign\)\|\%(\%(no_\?\)\?glob_assign\)\|\%(\%(no_\?\)\?globcomplete\)\|\%(\%(no_\?\)\?glob_complete\)\|\%(\%(no_\?\)\?globdots\)\|\%(\%(no_\?\)\?glob_dots\)\|\%(\%(no_\?\)\?glob_subst\)\|\%(\%(no_\?\)\?globsubst\)\|\%(\%(no_\?\)\?globstarshort\)\|\%(\%(no_\?\)\?glob_star_short\)\|\%(\%(no_\?\)\?hashall\)\|\%(\%(no_\?\)\?hash_all\)\|\%(\%(no_\?\)\?hashcmds\)\|\%(\%(no_\?\)\?hash_cmds\)\|\%(\%(no_\?\)\?hashdirs\)\|\%(\%(no_\?\)\?hash_dirs\)\|\%(\%(no_\?\)\?hashexecutablesonly\)\|\%(\%(no_\?\)\?hash_executables_only\)\|\%(\%(no_\?\)\?hashlistall\)\|\%(\%(no_\?\)\?hash_list_all\)\|\%(\%(no_\?\)\?histallowclobber\)\|\%(\%(no_\?\)\?hist_allow_clobber\)\|\%(\%(no_\?\)\?histappend\)\|\%(\%(no_\?\)\?hist_append\)\|\%(\%(no_\?\)\?histbeep\)\|\%(\%(no_\?\)\?hist_beep\)\|\%(\%(no_\?\)\?hist_expand\)\|\%(\%(no_\?\)\?hist_expire_dups_first\)\|\%(\%(no_\?\)\?histexpand\)\|\%(\%(no_\?\)\?histexpiredupsfirst\)\|\%(\%(no_\?\)\?histfcntllock\)\|\%(\%(no_\?\)\?hist_fcntl_lock\)\|\%(\%(no_\?\)\?histfindnodups\)\|\%(\%(no_\?\)\?hist_find_no_dups\)\|\%(\%(no_\?\)\?histignorealldups\)\|\%(\%(no_\?\)\?hist_ignore_all_dups\)\|\%(\%(no_\?\)\?histignoredups\)\|\%(\%(no_\?\)\?hist_ignore_dups\)\|\%(\%(no_\?\)\?histignorespace\)\|\%(\%(no_\?\)\?hist_ignore_space\)\|\%(\%(no_\?\)\?histlexwords\)\|\%(\%(no_\?\)\?hist_lex_words\)\|\%(\%(no_\?\)\?histnofunctions\)\|\%(\%(no_\?\)\?hist_no_functions\)\|\%(\%(no_\?\)\?histnostore\)\|\%(\%(no_\?\)\?hist_no_store\)\|\%(\%(no_\?\)\?histreduceblanks\)\|\%(\%(no_\?\)\?hist_reduce_blanks\)\|\%(\%(no_\?\)\?histsavebycopy\)\|\%(\%(no_\?\)\?hist_save_by_copy\)\|\%(\%(no_\?\)\?histsavenodups\)\|\%(\%(no_\?\)\?hist_save_no_dups\)\|\%(\%(no_\?\)\?histsubstpattern\)\|\%(\%(no_\?\)\?hist_subst_pattern\)\|\%(\%(no_\?\)\?histverify\)\|\%(\%(no_\?\)\?hist_verify\)\|\%(\%(no_\?\)\?hup\)\|\%(\%(no_\?\)\?ignorebraces\)\|\%(\%(no_\?\)\?ignore_braces\)\|\%(\%(no_\?\)\?ignoreclosebraces\)\|\%(\%(no_\?\)\?ignore_close_braces\)\|\%(\%(no_\?\)\?ignoreeof\)\|\%(\%(no_\?\)\?ignore_eof\)\|\%(\%(no_\?\)\?incappendhistory\)\|\%(\%(no_\?\)\?inc_append_history\)\|\%(\%(no_\?\)\?incappendhistorytime\)\|\%(\%(no_\?\)\?inc_append_history_time\)\|\%(\%(no_\?\)\?interactive\)\|\%(\%(no_\?\)\?interactivecomments\)\|\%(\%(no_\?\)\?interactive_comments\)\|\%(\%(no_\?\)\?ksharrays\)\|\%(\%(no_\?\)\?ksh_arrays\)\|\%(\%(no_\?\)\?kshautoload\)\|\%(\%(no_\?\)\?ksh_autoload\)\|\%(\%(no_\?\)\?kshglob\)\|\%(\%(no_\?\)\?ksh_glob\)\|\%(\%(no_\?\)\?kshoptionprint\)\|\%(\%(no_\?\)\?ksh_option_print\)\|\%(\%(no_\?\)\?kshtypeset\)\|\%(\%(no_\?\)\?ksh_typeset\)\|\%(\%(no_\?\)\?kshzerosubscript\)\|\%(\%(no_\?\)\?ksh_zero_subscript\)\|\%(\%(no_\?\)\?listambiguous\)\|\%(\%(no_\?\)\?list_ambiguous\)\|\%(\%(no_\?\)\?listbeep\)\|\%(\%(no_\?\)\?list_beep\)\|\%(\%(no_\?\)\?listpacked\)\|\%(\%(no_\?\)\?list_packed\)\|\%(\%(no_\?\)\?listrowsfirst\)\|\%(\%(no_\?\)\?list_rows_first\)\|\%(\%(no_\?\)\?listtypes\)\|\%(\%(no_\?\)\?list_types\)\|\%(\%(no_\?\)\?localloops\)\|\%(\%(no_\?\)\?local_loops\)\|\%(\%(no_\?\)\?localoptions\)\|\%(\%(no_\?\)\?local_options\)\|\%(\%(no_\?\)\?localpatterns\)\|\%(\%(no_\?\)\?local_patterns\)\|\%(\%(no_\?\)\?localtraps\)\|\%(\%(no_\?\)\?local_traps\)\|\%(\%(no_\?\)\?log\)\|\%(\%(no_\?\)\?login\)\|\%(\%(no_\?\)\?longlistjobs\)\|\%(\%(no_\?\)\?long_list_jobs\)\|\%(\%(no_\?\)\?magicequalsubst\)\|\%(\%(no_\?\)\?magic_equal_subst\)\|\%(\%(no_\?\)\?mailwarn\)\|\%(\%(no_\?\)\?mail_warn\)\|\%(\%(no_\?\)\?mail_warning\)\|\%(\%(no_\?\)\?mark_dirs\)\|\%(\%(no_\?\)\?mailwarning\)\|\%(\%(no_\?\)\?markdirs\)\|\%(\%(no_\?\)\?menucomplete\)\|\%(\%(no_\?\)\?menu_complete\)\|\%(\%(no_\?\)\?monitor\)\|\%(\%(no_\?\)\?multibyte\)\|\%(\%(no_\?\)\?multi_byte\)\|\%(\%(no_\?\)\?multifuncdef\)\|\%(\%(no_\?\)\?multi_func_def\)\|\%(\%(no_\?\)\?multios\)\|\%(\%(no_\?\)\?multi_os\)\|\%(\%(no_\?\)\?nomatch\)\|\%(\%(no_\?\)\?no_match\)\|\%(\%(no_\?\)\?notify\)\|\%(\%(no_\?\)\?nullglob\)\|\%(\%(no_\?\)\?null_glob\)\|\%(\%(no_\?\)\?numericglobsort\)\|\%(\%(no_\?\)\?numeric_glob_sort\)\|\%(\%(no_\?\)\?octalzeroes\)\|\%(\%(no_\?\)\?octal_zeroes\)\|\%(\%(no_\?\)\?onecmd\)\|\%(\%(no_\?\)\?one_cmd\)\|\%(\%(no_\?\)\?overstrike\)\|\%(\%(no_\?\)\?over_strike\)\|\%(\%(no_\?\)\?pathdirs\)\|\%(\%(no_\?\)\?path_dirs\)\|\%(\%(no_\?\)\?pathscript\)\|\%(\%(no_\?\)\?path_script\)\|\%(\%(no_\?\)\?physical\)\|\%(\%(no_\?\)\?pipefail\)\|\%(\%(no_\?\)\?pipe_fail\)\|\%(\%(no_\?\)\?posixaliases\)\|\%(\%(no_\?\)\?posix_aliases\)\|\%(\%(no_\?\)\?posixargzero\)\|\%(\%(no_\?\)\?posix_arg_zero\)\|\%(\%(no_\?\)\?posix_argzero\)\|\%(\%(no_\?\)\?posixbuiltins\)\|\%(\%(no_\?\)\?posix_builtins\)\|\%(\%(no_\?\)\?posixcd\)\|\%(\%(no_\?\)\?posix_cd\)\|\%(\%(no_\?\)\?posixidentifiers\)\|\%(\%(no_\?\)\?posix_identifiers\)\|\%(\%(no_\?\)\?posixjobs\)\|\%(\%(no_\?\)\?posix_jobs\)\|\%(\%(no_\?\)\?posixstrings\)\|\%(\%(no_\?\)\?posix_strings\)\|\%(\%(no_\?\)\?posixtraps\)\|\%(\%(no_\?\)\?posix_traps\)\|\%(\%(no_\?\)\?printeightbit\)\|\%(\%(no_\?\)\?print_eight_bit\)\|\%(\%(no_\?\)\?printexitvalue\)\|\%(\%(no_\?\)\?print_exit_value\)\|\%(\%(no_\?\)\?privileged\)\|\%(\%(no_\?\)\?promptbang\)\|\%(\%(no_\?\)\?prompt_bang\)\|\%(\%(no_\?\)\?promptcr\)\|\%(\%(no_\?\)\?prompt_cr\)\|\%(\%(no_\?\)\?promptpercent\)\|\%(\%(no_\?\)\?prompt_percent\)\|\%(\%(no_\?\)\?promptsp\)\|\%(\%(no_\?\)\?prompt_sp\)\|\%(\%(no_\?\)\?promptsubst\)\|\%(\%(no_\?\)\?prompt_subst\)\|\%(\%(no_\?\)\?promptvars\)\|\%(\%(no_\?\)\?prompt_vars\)\|\%(\%(no_\?\)\?pushdignoredups\)\|\%(\%(no_\?\)\?pushd_ignore_dups\)\|\%(\%(no_\?\)\?pushdminus\)\|\%(\%(no_\?\)\?pushd_minus\)\|\%(\%(no_\?\)\?pushdsilent\)\|\%(\%(no_\?\)\?pushd_silent\)\|\%(\%(no_\?\)\?pushdtohome\)\|\%(\%(no_\?\)\?pushd_to_home\)\|\%(\%(no_\?\)\?rcexpandparam\)\|\%(\%(no_\?\)\?rc_expandparam\)\|\%(\%(no_\?\)\?rc_expand_param\)\|\%(\%(no_\?\)\?rcquotes\)\|\%(\%(no_\?\)\?rc_quotes\)\|\%(\%(no_\?\)\?rcs\)\|\%(\%(no_\?\)\?recexact\)\|\%(\%(no_\?\)\?rec_exact\)\|\%(\%(no_\?\)\?rematchpcre\)\|\%(\%(no_\?\)\?re_match_pcre\)\|\%(\%(no_\?\)\?rematch_pcre\)\|\%(\%(no_\?\)\?restricted\)\|\%(\%(no_\?\)\?rmstarsilent\)\|\%(\%(no_\?\)\?rm_star_silent\)\|\%(\%(no_\?\)\?rmstarwait\)\|\%(\%(no_\?\)\?rm_star_wait\)\|\%(\%(no_\?\)\?sharehistory\)\|\%(\%(no_\?\)\?share_history\)\|\%(\%(no_\?\)\?shfileexpansion\)\|\%(\%(no_\?\)\?sh_file_expansion\)\|\%(\%(no_\?\)\?shglob\)\|\%(\%(no_\?\)\?sh_glob\)\|\%(\%(no_\?\)\?shinstdin\)\|\%(\%(no_\?\)\?shin_stdin\)\|\%(\%(no_\?\)\?shnullcmd\)\|\%(\%(no_\?\)\?sh_nullcmd\)\|\%(\%(no_\?\)\?shoptionletters\)\|\%(\%(no_\?\)\?sh_option_letters\)\|\%(\%(no_\?\)\?shortloops\)\|\%(\%(no_\?\)\?short_loops\)\|\%(\%(no_\?\)\?shwordsplit\)\|\%(\%(no_\?\)\?sh_word_split\)\|\%(\%(no_\?\)\?singlecommand\)\|\%(\%(no_\?\)\?single_command\)\|\%(\%(no_\?\)\?singlelinezle\)\|\%(\%(no_\?\)\?single_line_zle\)\|\%(\%(no_\?\)\?sourcetrace\)\|\%(\%(no_\?\)\?source_trace\)\|\%(\%(no_\?\)\?stdin\)\|\%(\%(no_\?\)\?sunkeyboardhack\)\|\%(\%(no_\?\)\?sun_keyboard_hack\)\|\%(\%(no_\?\)\?trackall\)\|\%(\%(no_\?\)\?track_all\)\|\%(\%(no_\?\)\?transientrprompt\)\|\%(\%(no_\?\)\?transient_rprompt\)\|\%(\%(no_\?\)\?trapsasync\)\|\%(\%(no_\?\)\?traps_async\)\|\%(\%(no_\?\)\?typesetsilent\)\|\%(\%(no_\?\)\?type_set_silent\)\|\%(\%(no_\?\)\?typeset_silent\)\|\%(\%(no_\?\)\?unset\)\|\%(\%(no_\?\)\?verbose\)\|\%(\%(no_\?\)\?vi\)\|\%(\%(no_\?\)\?warncreateglobal\)\|\%(\%(no_\?\)\?warn_create_global\)\|\%(\%(no_\?\)\?xtrace\)\|\%(\%(no_\?\)\?zle\)/ nextgroup=zshOption skipwhite contained
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200138
Bram Moolenaarfa735342016-01-03 22:14:44 +0100139syn keyword zshTypes float integer local typeset declare private
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000140
141" XXX: this may be too much
142" syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+'
143
144syn match zshNumber '[+-]\=\<\d\+\>'
145syn match zshNumber '[+-]\=\<0x\x\+\>'
146syn match zshNumber '[+-]\=\<0\o\+\>'
147syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>'
148syn match zshNumber '[+-]\=\d\+\.\d\+\>'
149
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000150" TODO: $[...] is the same as $((...)), so add that as well.
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000151syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst
152syn region zshSubst matchgroup=zshSubstDelim transparent
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100153 \ start='\$(' skip='\\)' end=')' contains=TOP fold
154syn region zshParentheses transparent start='(' skip='\\)' end=')' fold
Bram Moolenaar94237492017-04-23 18:40:21 +0200155syn region zshGlob start='(#' end=')'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000156syn region zshMathSubst matchgroup=zshSubstDelim transparent
Bram Moolenaar94237492017-04-23 18:40:21 +0200157 \ start='\$((' skip='\\)' end='))'
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000158 \ contains=zshParentheses,@zshSubst,zshNumber,
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100159 \ @zshDerefs,zshString keepend fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000160syn region zshBrackets contained transparent start='{' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100161 \ end='}' fold
Bram Moolenaarf3913272016-02-25 00:00:01 +0100162syn region zshBrackets transparent start='{' skip='\\}'
163 \ end='}' contains=TOP fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000164syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}'
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100165 \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000166syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100167 \ end=+`+ contains=TOP,zshOldSubst fold
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000168
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200169syn sync minlines=50 maxlines=90
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000170syn sync match zshHereDocSync grouphere NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
171syn sync match zshHereDocEndSync groupthere NONE '^\s*EO\a\+\>'
172
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000173hi def link zshTodo Todo
174hi def link zshComment Comment
175hi def link zshPreProc PreProc
176hi def link zshQuoted SpecialChar
177hi def link zshString String
178hi def link zshStringDelimiter zshString
179hi def link zshPOSIXString zshString
180hi def link zshJobSpec Special
181hi def link zshPrecommand Special
182hi def link zshDelimiter Keyword
183hi def link zshConditional Conditional
184hi def link zshException Exception
185hi def link zshRepeat Repeat
186hi def link zshKeyword Keyword
187hi def link zshFunction None
188hi def link zshKSHFunction zshFunction
189hi def link zshHereDoc String
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200190hi def link zshOperator None
191hi def link zshRedir Operator
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000192hi def link zshVariable None
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000193hi def link zshVariableDef zshVariable
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000194hi def link zshDereferencing PreProc
Bram Moolenaar94237492017-04-23 18:40:21 +0200195hi def link zshShortDeref zshDereferencing
196hi def link zshLongDeref zshDereferencing
197hi def link zshDeref zshDereferencing
198hi def link zshDollarVar zshDereferencing
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000199hi def link zshCommands Keyword
Bram Moolenaar94237492017-04-23 18:40:21 +0200200hi def link zshOptStart Keyword
201hi def link zshOption Constant
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000202hi def link zshTypes Type
203hi def link zshSwitches Special
204hi def link zshNumber Number
205hi def link zshSubst PreProc
206hi def link zshMathSubst zshSubst
207hi def link zshOldSubst zshSubst
208hi def link zshSubstDelim zshSubst
Bram Moolenaar94237492017-04-23 18:40:21 +0200209hi def link zshGlob zshSubst
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000210
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211let b:current_syntax = "zsh"
212
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000213let &cpo = s:cpo_save
214unlet s:cpo_save