7
|
1 " Vim syntax file
|
1125
|
2 " Language: Zsh shell script
|
|
3 " Maintainer: Nikolai Weibull <now@bitwi.se>
|
2072
|
4 " Latest Revision: 2010-01-23
|
7
|
5
|
1125
|
6 if exists("b:current_syntax")
|
7
|
7 finish
|
|
8 endif
|
|
9
|
1125
|
10 let s:cpo_save = &cpo
|
|
11 set cpo&vim
|
|
12
|
1624
|
13 setlocal iskeyword+=-
|
1125
|
14
|
|
15 syn keyword zshTodo contained TODO FIXME XXX NOTE
|
|
16
|
2072
|
17 syn region zshComment oneline start='\%(^\|\s\)#' end='$'
|
1125
|
18 \ contains=zshTodo,@Spell
|
|
19
|
|
20 syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$'
|
|
21
|
|
22 syn match zshQuoted '\\.'
|
|
23 syn region zshString matchgroup=zshStringDelimiter start=+"+ end=+"+
|
|
24 \ contains=zshQuoted,@zshDerefs,@zshSubst
|
|
25 syn region zshString matchgroup=zshStringDelimiter start=+'+ end=+'+
|
|
26 " XXX: This should probably be more precise, but Zsh seems a bit confused about it itself
|
|
27 syn region zshPOSIXString matchgroup=zshStringDelimiter start=+\$'+
|
|
28 \ end=+'+ contains=zshQuoted
|
|
29 syn match zshJobSpec '%\(\d\+\|?\=\w\+\|[%+-]\)'
|
|
30
|
|
31 syn keyword zshPrecommand noglob nocorrect exec command builtin - time
|
|
32
|
|
33 syn keyword zshDelimiter do done
|
|
34
|
|
35 syn keyword zshConditional if then elif else fi case in esac select
|
|
36
|
1698
|
37 syn keyword zshRepeat while until repeat
|
|
38
|
|
39 syn keyword zshRepeat for foreach nextgroup=zshVariable skipwhite
|
1125
|
40
|
|
41 syn keyword zshException always
|
|
42
|
|
43 syn keyword zshKeyword function nextgroup=zshKSHFunction skipwhite
|
|
44
|
|
45 syn match zshKSHFunction contained '\k\+'
|
|
46 syn match zshFunction '^\s*\k\+\ze\s*()'
|
|
47
|
|
48 syn match zshOperator '||\|&&\|;\|&!\='
|
7
|
49
|
1125
|
50 syn match zshRedir '\d\=\(<\|<>\|<<<\|<&\s*[0-9p-]\=\)'
|
|
51 syn match zshRedir '\d\=\(>\|>>\|>&\s*[0-9p-]\=\|&>\|>>&\|&>>\)[|!]\='
|
|
52 syn match zshRedir '|&\='
|
|
53
|
1698
|
54 syn region zshHereDoc matchgroup=zshRedir
|
|
55 \ start='<\@<!<<\s*\z([^<]\S*\)'
|
|
56 \ end='^\z1\>'
|
|
57 \ contains=@zshSubst
|
|
58 syn region zshHereDoc matchgroup=zshRedir
|
|
59 \ start='<\@<!<<\s*\\\z(\S\+\)'
|
|
60 \ end='^\z1\>'
|
|
61 \ contains=@zshSubst
|
1125
|
62 syn region zshHereDoc matchgroup=zshRedir
|
1698
|
63 \ start='<\@<!<<-\s*\\\=\z(\S\+\)'
|
|
64 \ end='^\s*\z1\>'
|
|
65 \ contains=@zshSubst
|
1125
|
66 syn region zshHereDoc matchgroup=zshRedir
|
1698
|
67 \ start=+<\@<!<<\s*\(["']\)\z(\S\+\)\1+
|
|
68 \ end='^\z1\>'
|
|
69 syn region zshHereDoc matchgroup=zshRedir
|
|
70 \ start=+<\@<!<<-\s*\(["']\)\z(\S\+\)\1+
|
1125
|
71 \ end='^\s*\z1\>'
|
|
72
|
1698
|
73 syn match zshVariable '\<\h\w*' contained
|
|
74
|
|
75 syn match zshVariableDef '\<\h\w*\ze+\=='
|
1125
|
76 " XXX: how safe is this?
|
1698
|
77 syn region zshVariableDef oneline
|
1125
|
78 \ start='\$\@<!\<\h\w*\[' end='\]\ze+\=='
|
|
79 \ contains=@zshSubst
|
|
80
|
|
81 syn cluster zshDerefs contains=zshShortDeref,zshLongDeref,zshDeref
|
7
|
82
|
1125
|
83 if !exists("g:zsh_syntax_variables")
|
|
84 let s:zsh_syntax_variables = 'all'
|
|
85 else
|
|
86 let s:zsh_syntax_variables = g:zsh_syntax_variables
|
|
87 endif
|
|
88
|
|
89 if s:zsh_syntax_variables =~ 'short\|all'
|
|
90 syn match zshShortDeref '\$[!#$*@?_-]\w\@!'
|
|
91 syn match zshShortDeref '\$[=^~]*[#+]*\d\+\>'
|
|
92 endif
|
7
|
93
|
1125
|
94 if s:zsh_syntax_variables =~ 'long\|all'
|
|
95 syn match zshLongDeref '\$\%(ARGC\|argv\|status\|pipestatus\|CPUTYPE\|EGID\|EUID\|ERRNO\|GID\|HOST\|LINENO\|LOGNAME\)'
|
|
96 syn match zshLongDeref '\$\%(MACHTYPE\|OLDPWD OPTARG\|OPTIND\|OSTYPE\|PPID\|PWD\|RANDOM\|SECONDS\|SHLVL\|signals\)'
|
|
97 syn match zshLongDeref '\$\%(TRY_BLOCK_ERROR\|TTY\|TTYIDLE\|UID\|USERNAME\|VENDOR\|ZSH_NAME\|ZSH_VERSION\|REPLY\|reply\|TERM\)'
|
|
98 endif
|
|
99
|
|
100 if s:zsh_syntax_variables =~ 'all'
|
|
101 syn match zshDeref '\$[=^~]*[#+]*\h\w*\>'
|
|
102 else
|
1698
|
103 syn match zshDeref transparent contains=NONE '\$[=^~]*[#+]*\h\w*\>'
|
1125
|
104 endif
|
7
|
105
|
1125
|
106 syn match zshCommands '\%(^\|\s\)[.:]\ze\s'
|
|
107 syn 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
|
|
116 \ rehash return sched set setcap setopt shift
|
|
117 \ source stat suspend test times trap true
|
|
118 \ ttyctl type ulimit umask unalias unfunction
|
|
119 \ unhash unlimit unset unsetopt vared wait
|
|
120 \ whence where which zcompile zformat zftp zle
|
|
121 \ zmodload zparseopts zprof zpty zregexparse
|
|
122 \ zsocket zstyle ztcp
|
|
123
|
|
124 syn keyword zshTypes float integer local typeset declare
|
7
|
125
|
1125
|
126 " XXX: this may be too much
|
|
127 " syn match zshSwitches '\s\zs--\=[a-zA-Z0-9-]\+'
|
7
|
128
|
1125
|
129 syn match zshNumber '[+-]\=\<\d\+\>'
|
|
130 syn match zshNumber '[+-]\=\<0x\x\+\>'
|
|
131 syn match zshNumber '[+-]\=\<0\o\+\>'
|
|
132 syn match zshNumber '[+-]\=\d\+#[-+]\=\w\+\>'
|
|
133 syn match zshNumber '[+-]\=\d\+\.\d\+\>'
|
7
|
134
|
1698
|
135 " TODO: $[...] is the same as $((...)), so add that as well.
|
1125
|
136 syn cluster zshSubst contains=zshSubst,zshOldSubst,zshMathSubst
|
|
137 syn region zshSubst matchgroup=zshSubstDelim transparent
|
|
138 \ start='\$(' skip='\\)' end=')' contains=TOP
|
|
139 syn region zshParentheses transparent start='(' skip='\\)' end=')'
|
|
140 syn region zshMathSubst matchgroup=zshSubstDelim transparent
|
|
141 \ start='\$((' skip='\\)'
|
|
142 \ matchgroup=zshSubstDelim end='))'
|
|
143 \ contains=zshParentheses,@zshSubst,zshNumber,
|
|
144 \ @zshDerefs,zshString
|
|
145 syn region zshBrackets contained transparent start='{' skip='\\}'
|
|
146 \ end='}'
|
|
147 syn region zshSubst matchgroup=zshSubstDelim start='\${' skip='\\}'
|
1698
|
148 \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString
|
1125
|
149 syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+
|
|
150 \ end=+`+ contains=TOP,zshOldSubst
|
7
|
151
|
1698
|
152 syn sync minlines=50
|
|
153 syn sync match zshHereDocSync grouphere NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
|
|
154 syn sync match zshHereDocEndSync groupthere NONE '^\s*EO\a\+\>'
|
|
155
|
1125
|
156 hi def link zshTodo Todo
|
|
157 hi def link zshComment Comment
|
|
158 hi def link zshPreProc PreProc
|
|
159 hi def link zshQuoted SpecialChar
|
|
160 hi def link zshString String
|
|
161 hi def link zshStringDelimiter zshString
|
|
162 hi def link zshPOSIXString zshString
|
|
163 hi def link zshJobSpec Special
|
|
164 hi def link zshPrecommand Special
|
|
165 hi def link zshDelimiter Keyword
|
|
166 hi def link zshConditional Conditional
|
|
167 hi def link zshException Exception
|
|
168 hi def link zshRepeat Repeat
|
|
169 hi def link zshKeyword Keyword
|
|
170 hi def link zshFunction None
|
|
171 hi def link zshKSHFunction zshFunction
|
|
172 hi def link zshHereDoc String
|
|
173 if 0
|
|
174 hi def link zshOperator Operator
|
|
175 else
|
|
176 hi def link zshOperator None
|
7
|
177 endif
|
1125
|
178 if 1
|
|
179 hi def link zshRedir Operator
|
|
180 else
|
|
181 hi def link zshRedir None
|
|
182 endif
|
|
183 hi def link zshVariable None
|
1698
|
184 hi def link zshVariableDef zshVariable
|
1125
|
185 hi def link zshDereferencing PreProc
|
|
186 if s:zsh_syntax_variables =~ 'short\|all'
|
|
187 hi def link zshShortDeref zshDereferencing
|
|
188 else
|
|
189 hi def link zshShortDeref None
|
|
190 endif
|
|
191 if s:zsh_syntax_variables =~ 'long\|all'
|
|
192 hi def link zshLongDeref zshDereferencing
|
|
193 else
|
|
194 hi def link zshLongDeref None
|
|
195 endif
|
|
196 if s:zsh_syntax_variables =~ 'all'
|
|
197 hi def link zshDeref zshDereferencing
|
|
198 else
|
|
199 hi def link zshDeref None
|
|
200 endif
|
|
201 hi def link zshCommands Keyword
|
|
202 hi def link zshTypes Type
|
|
203 hi def link zshSwitches Special
|
|
204 hi def link zshNumber Number
|
|
205 hi def link zshSubst PreProc
|
|
206 hi def link zshMathSubst zshSubst
|
|
207 hi def link zshOldSubst zshSubst
|
|
208 hi def link zshSubstDelim zshSubst
|
7
|
209
|
|
210 let b:current_syntax = "zsh"
|
|
211
|
1125
|
212 let &cpo = s:cpo_save
|
|
213 unlet s:cpo_save
|