2 " Language: Z shell (zsh)
3 " Maintainer: Felix von Leitner <leitner@math.fu-berlin.de>
4 " Heavily based on sh.vim by Lennart Schultz
5 " Last Change: 2001 May 09
7 " For version 5.x: Clear all syntax items
8 " For version 6.x: Quit when a syntax file was already loaded
11 elseif exists("b:current_syntax")
15 syn region zshSinglequote start=+'+ skip=+\\'+ end=+'+
16 " A bunch of useful zsh keywords
17 " syn keyword zshFunction function
18 syn keyword zshStatement bg break cd chdir continue echo eval exec
19 syn keyword zshStatement exit export fg getopts hash jobs kill
20 syn keyword zshStatement pwd read readonly return set zshift function
21 syn keyword zshStatement stop suspend test times trap type ulimit
22 syn keyword zshStatement umask unset wait setopt compctl source
23 syn keyword zshStatement whence disown shift which unhash unalias
24 syn keyword zshStatement alias functions unfunction getln disable
25 syn keyword zshStatement vared getopt enable unsetopt autoload
26 syn keyword zshStatement bindkey pushln command limit unlimit fc
27 syn keyword zshStatement print builtin noglob sched r time
28 syn keyword zshStatement typeset declare local integer
30 syn keyword zshConditional if else esac case then elif fi in
31 syn keyword zshRepeat while for do done
33 " Following is worth to notice: command substitution, file redirection and functions (so these features turns red)
34 syn match zshFunctionName "\h\w*\s*()"
35 syn region zshCommandSub start=+`+ skip=+\\`+ end=+`+
36 " contains=ALLBUT,zshFunction
37 syn match zshRedir "\d\=\(<\|<<\|>\|>>\)\(|\|&\d\)\="
39 syn keyword zshTodo contained TODO
41 syn keyword zshShellVariables USER LOGNAME HOME PATH CDPATH SHELL
42 syn keyword zshShellVariables LC_TYPE LC_MESSAGE MAIL MAILCHECK
43 syn keyword zshShellVariables PS1 PS2 IFS EGID EUID ERRNO GID UID
44 syn keyword zshShellVariables HOST LINENO MACHTYPE OLDPWD OPTARG
45 syn keyword zshShellVariables OPTIND OSTYPE PPID PWD RANDOM SECONDS
46 syn keyword zshShellVariables SHLVL TTY signals TTYIDLE USERNAME
47 syn keyword zshShellVariables VENDOR ZSH_NAME ZSH_VERSION ARGV0
48 syn keyword zshShellVariables BAUD COLUMNS cdpath DIRSTACKSIZE
49 syn keyword zshShellVariables FCEDIT fignore fpath histchars HISTCHARS
50 syn keyword zshShellVariables HISTFILE HISTSIZE KEYTIMEOUT LANG
51 syn keyword zshShellVariables LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
52 syn keyword zshShellVariables LC_TIME LINES LISTMAX LOGCHECK mailpath
53 syn keyword zshShellVariables MAILPATH MANPATH manpath module_path
54 syn keyword zshShellVariables MODULE_PATH NULLCMD path POSTEDIT
55 syn keyword zshShellVariables PS3 PS4 PROMPT PROMPT2 PROMPT3 PROMPT4
56 syn keyword zshShellVariables psvar PSVAR prompt READNULLCMD
57 syn keyword zshShellVariables REPORTTIME RPROMPT RPS1 SAVEHIST
58 syn keyword zshShellVariables SPROMPT STTY TIMEFMT TMOUT TMPPREFIX
59 syn keyword zshShellVariables watch WATCH WATCHFMT WORDCHARS ZDOTDIR
60 syn match zshSpecialShellVar "\$[-#@*$?!0-9]"
61 syn keyword zshSetVariables ignoreeof noclobber
62 syn region zshDerefOpr start="\${" end="}" contains=zshShellVariables
63 syn match zshDerefIdentifier "\$[a-zA-Z_][a-zA-Z0-9_]*\>"
64 syn match zshOperator "[][}{&;|)(]"
66 " String and Character contstants
67 " Highlight special characters (those which have a backslash) differently
68 syn match zshSpecial contained "\\\d\d\d\|\\[abcfnrtv\\]"
71 syn match zshNumber "-\=\<\d\+\>"
72 syn match zshComment "#.*$" contains=zshNumber,zshTodo
75 syn match zshTestOpr "-\<[oeaznlg][tfqet]\=\>\|!\==\|-\<[b-gkLprsStuwjxOG]\>"
76 "syn region zshTest start="\[" skip="\\$" end="\]" contains=zshString,zshTestOpr,zshDerefIdentifier,zshDerefOpr
77 syn region zshString start=+"+ skip=+\\"+ end=+"+ contains=zshSpecial,zshOperator,zshDerefIdentifier,zshDerefOpr,zshSpecialShellVar,zshSinglequote,zshCommandSub
79 " Define the default highlighting.
80 " For version 5.7 and earlier: only when not done already
81 " For version 5.8 and later: only when an item doesn't have highlighting yet
82 if version >= 508 || !exists("did_zsh_syntax_inits")
84 let did_zsh_syntax_inits = 1
85 command -nargs=+ HiLink hi link <args>
87 command -nargs=+ HiLink hi def link <args>
90 HiLink zshSinglequote zshString
91 HiLink zshConditional zshStatement
92 HiLink zshRepeat zshStatement
93 HiLink zshFunctionName zshFunction
94 HiLink zshCommandSub zshOperator
95 HiLink zshRedir zshOperator
96 HiLink zshSetVariables zshShellVariables
97 HiLink zshSpecialShellVar zshShellVariables
98 HiLink zshTestOpr zshOperator
99 HiLink zshDerefOpr zshSpecial
100 HiLink zshDerefIdentifier zshShellVariables
101 HiLink zshOperator Operator
102 HiLink zshStatement Statement
103 HiLink zshNumber Number
104 HiLink zshString String
105 HiLink zshComment Comment
106 HiLink zshSpecial Special
108 HiLink zshShellVariables Special
109 " hi zshOperator term=underline ctermfg=6 guifg=Purple gui=bold
110 " hi zshShellVariables term=underline ctermfg=2 guifg=SeaGreen gui=bold
111 " hi zshFunction term=bold ctermbg=1 guifg=Red
116 let b:current_syntax = "zsh"