comparison runtime/syntax/sh.vim @ 13589:1073225cb749

Update runtime files commit https://github.com/vim/vim/commit/51ad4eaa22e15cf1fe6c45d82c7e1371e00401a4 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Apr 6 11:14:11 2018 +0200 Update runtime files
author Christian Brabandt <cb@256bit.org>
date Fri, 06 Apr 2018 11:15:07 +0200
parents 65d7fd8381a3
children 172f18a3a6cd
comparison
equal deleted inserted replaced
13588:01965f9ccc7a 13589:1073225cb749
1 " Vim syntax file 1 " Vim syntax file
2 " Language: shell (sh) Korn shell (ksh) bash (sh) 2 " Language: shell (sh) Korn shell (ksh) bash (sh)
3 " Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> 3 " Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int> 4 " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
5 " Last Change: Oct 02, 2017 5 " Last Change: Mar 19, 2018
6 " Version: 172 6 " Version: 174
7 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH 7 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
8 " For options and settings, please use: :help ft-sh-syntax 8 " For options and settings, please use: :help ft-sh-syntax
9 " This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) 9 " This file includes many ideas from Eric Brunet (eric.brunet@ens.fr)
10 10
11 " quit when a syntax file was already loaded {{{1 11 " quit when a syntax file was already loaded {{{1
119 syn case match 119 syn case match
120 120
121 " Clusters: contains=@... clusters {{{1 121 " Clusters: contains=@... clusters {{{1
122 "================================== 122 "==================================
123 syn cluster shErrorList contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError,shOK 123 syn cluster shErrorList contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError,shOK
124 if exists("b:is_kornshell") 124 if exists("b:is_kornshell") || exists("b:is_bash")
125 syn cluster ErrorList add=shDTestError 125 syn cluster ErrorList add=shDTestError
126 endif 126 endif
127 syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shHereString,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor 127 syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shHereString,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor
128 syn cluster shArithList contains=@shArithParenList,shParenError 128 syn cluster shArithList contains=@shArithParenList,shParenError
129 syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange 129 syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
162 " This must be after the strings, so that ... \" will be correct 162 " This must be after the strings, so that ... \" will be correct
163 syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shExDoubleQuote,shDoubleQuote,shCharClass,shCtrlSeq 163 syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shExDoubleQuote,shDoubleQuote,shCharClass,shCtrlSeq
164 164
165 " Alias: {{{1 165 " Alias: {{{1
166 " ===== 166 " =====
167 if exists("b:is_kornshell") || exists("b:is_bash") 167 if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
168 syn match shStatement "\<alias\>" 168 syn match shStatement "\<alias\>"
169 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@=" skip="\\$" end="\>\|`" 169 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@=" skip="\\$" end="\>\|`"
170 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="=" 170 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
171 171
172 " Touch: {{{1 172 " Touch: {{{1
184 syn match shCaseError ";;" 184 syn match shCaseError ";;"
185 syn match shEsacError "\<esac\>" 185 syn match shEsacError "\<esac\>"
186 syn match shCurlyError "}" 186 syn match shCurlyError "}"
187 syn match shParenError ")" 187 syn match shParenError ")"
188 syn match shOK '\.\(done\|fi\|in\|esac\)' 188 syn match shOK '\.\(done\|fi\|in\|esac\)'
189 if exists("b:is_kornshell") 189 if exists("b:is_kornshell") || exists("b:is_bash")
190 syn match shDTestError "]]" 190 syn match shDTestError "]]"
191 endif 191 endif
192 syn match shTestError "]" 192 syn match shTestError "]"
193 endif 193 endif
194 194
243 ShFoldIfDoFor syn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList 243 ShFoldIfDoFor syn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
244 ShFoldIfDoFor syn region shIf transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>" contains=@shIfList 244 ShFoldIfDoFor syn region shIf transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>" contains=@shIfList
245 ShFoldIfDoFor syn region shFor matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn 245 ShFoldIfDoFor syn region shFor matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
246 ShFoldIfDoFor syn region shForPP matchgroup=shLoop start='\<for\>\_s*((' end='))' contains=shTestOpr 246 ShFoldIfDoFor syn region shForPP matchgroup=shLoop start='\<for\>\_s*((' end='))' contains=shTestOpr
247 247
248 if exists("b:is_kornshell") || exists("b:is_bash") 248 if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
249 syn cluster shCaseList add=shRepeat 249 syn cluster shCaseList add=shRepeat
250 syn cluster shFunctionList add=shRepeat 250 syn cluster shFunctionList add=shRepeat
251 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<in\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace 251 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace
252 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<in\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace 252 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace
253 syn region shCaseEsac matchgroup=shConditional start="\<select\s" matchgroup=shConditional end="\<in\>" end="\<do\>" contains=@shLoopList 253 if !exists("b:is_posix")
254 syn region shCaseEsac matchgroup=shConditional start="\<select\s" matchgroup=shConditional end="\<in\>" end="\<do\>" contains=@shLoopList
255 endif
254 else 256 else
255 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<do\>"me=e-2 contains=@shLoopList 257 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<do\>"me=e-2 contains=@shLoopList
256 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<do\>"me=e-2 contains=@shLoopList 258 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<do\>"me=e-2 contains=@shLoopList
257 endif 259 endif
258 syn region shCurlyIn contained matchgroup=Delimiter start="{" end="}" contains=@shCurlyList 260 syn region shCurlyIn contained matchgroup=Delimiter start="{" end="}" contains=@shCurlyList
285 syn region shCaseRange matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+ contained 287 syn region shCaseRange matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+ contained
286 endif 288 endif
287 " Misc: {{{1 289 " Misc: {{{1
288 "====== 290 "======
289 syn match shWrapLineOperator "\\$" 291 syn match shWrapLineOperator "\\$"
290 syn region shCommandSub start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList 292 syn region shCommandSub start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList
291 syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' 293 syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.'
292 294
293 " $() and $(()): {{{1 295 " $() and $(()): {{{1
294 " $(..) is not supported by sh (Bourne shell). However, apparently 296 " $(..) is not supported by sh (Bourne shell). However, apparently
295 " some systems (HP?) have as their /bin/sh a (link to) Korn shell 297 " some systems (HP?) have as their /bin/sh a (link to) Korn shell
313 syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail 315 syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail
314 syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop 316 syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
315 syn keyword bashStatement command compgen 317 syn keyword bashStatement command compgen
316 endif 318 endif
317 319
318 if exists("b:is_kornshell") 320 if exists("b:is_kornshell") || exists("b:is_posix")
319 syn cluster shCommandSubList add=kshSpecialVariables,kshStatement 321 syn cluster shCommandSubList add=kshSpecialVariables,kshStatement
320 syn cluster shCaseList add=kshStatement 322 syn cluster shCaseList add=kshStatement
321 syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL 323 syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL
322 syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail tput 324 syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail tput
323 syn keyword kshStatement command setgroups setsenv 325 syn keyword kshStatement command setgroups setsenv
325 327
326 syn match shSource "^\.\s" 328 syn match shSource "^\.\s"
327 syn match shSource "\s\.\s" 329 syn match shSource "\s\.\s"
328 "syn region shColon start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList 330 "syn region shColon start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
329 "syn region shColon start="^\s*\zs:" end="$" end="\s#"me=e-2 331 "syn region shColon start="^\s*\zs:" end="$" end="\s#"me=e-2
330 if exists("b:is_kornshell") 332 if exists("b:is_kornshell") || exists("b:is_posix")
331 syn match shColon '^\s*\zs:' 333 syn match shColon '^\s*\zs:'
332 endif 334 endif
333 335
334 " String And Character Constants: {{{1 336 " String And Character Constants: {{{1
335 "================================ 337 "================================
337 syn match shNumber "\<-\=\.\=\d\+\>#\=" 339 syn match shNumber "\<-\=\.\=\d\+\>#\="
338 syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained 340 syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained
339 if exists("b:is_bash") 341 if exists("b:is_bash")
340 syn match shSpecial "[^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained 342 syn match shSpecial "[^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained
341 syn match shSpecial "^\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained 343 syn match shSpecial "^\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained
342 endif
343 if exists("b:is_bash")
344 syn region shExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial nextgroup=shSpecialNxt 344 syn region shExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial nextgroup=shSpecialNxt
345 syn region shExDoubleQuote matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,shSpecial nextgroup=shSpecialNxt 345 syn region shExDoubleQuote matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,shSpecial nextgroup=shSpecialNxt
346 elseif !exists("g:sh_no_error") 346 elseif !exists("g:sh_no_error")
347 syn region shExSingleQuote matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial 347 syn region shExSingleQuote matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial
348 syn region shExDoubleQuote matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+ contains=shStringSpecial 348 syn region shExDoubleQuote matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+ contains=shStringSpecial
349 endif 349 endif
350 syn region shSingleQuote matchgroup=shQuote start=+'+ end=+'+ contains=@Spell 350 syn region shSingleQuote matchgroup=shQuote start=+'+ end=+'+ contains=@Spell nextgroup=shSpecialStart
351 syn region shDoubleQuote matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell 351 syn region shDoubleQuote matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart
352 syn match shStringSpecial "[^[:print:] \t]" contained 352 syn match shStringSpecial "[^[:print:] \t]" contained
353 syn match shStringSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" 353 syn match shStringSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"
354 syn match shSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shBkslshSnglQuote,shBkslshDblQuote,@shNoZSList 354 syn match shSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shBkslshSnglQuote,shBkslshDblQuote,@shNoZSList
355 syn match shSpecialStart "\%(\\\\\)*\\[\\"'`$()#]" contained nextgroup=shBkslshSnglQuote,shBkslshDblQuote,@shNoZSList
355 syn match shSpecial "^\%(\\\\\)*\\[\\"'`$()#]" 356 syn match shSpecial "^\%(\\\\\)*\\[\\"'`$()#]"
356 syn match shSpecialNoZS contained "\%(\\\\\)*\\[\\"'`$()#]" 357 syn match shSpecialNoZS contained "\%(\\\\\)*\\[\\"'`$()#]"
357 syn match shSpecialNxt contained "\\[\\"'`$()#]" 358 syn match shSpecialNxt contained "\\[\\"'`$()#]"
358 syn region shBkslshSnglQuote contained matchgroup=shQuote start=+'+ end=+'+ contains=@Spell 359 syn region shBkslshSnglQuote contained matchgroup=shQuote start=+'+ end=+'+ contains=@Spell
359 syn region shBkslshDblQuote contained matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell 360 syn region shBkslshDblQuote contained matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell
371 syn match shComment contained "#.*$" contains=@shCommentGroup 372 syn match shComment contained "#.*$" contains=@shCommentGroup
372 syn match shQuickComment contained "#.*$" 373 syn match shQuickComment contained "#.*$"
373 374
374 " Here Documents: {{{1 375 " Here Documents: {{{1
375 " ========================================= 376 " =========================================
376 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\\\=\z([^ \t|>]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList 377 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\\\=\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList
377 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<\s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc02 end="^\z1\s*$" 378 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<\s*\"\z([^ \t0-9|>]\+\)\"" matchgroup=shHereDoc02 end="^\z1\s*$"
378 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<-\s*\z([^ \t|>]\+\)" matchgroup=shHereDoc03 end="^\s*\z1\s*$" contains=@shDblQuoteList 379 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<-\s*\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc03 end="^\s*\z1\s*$" contains=@shDblQuoteList
379 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*'\z([^']\+\)'" matchgroup=shHereDoc04 end="^\s*\z1\s*$" 380 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*'\z([^'0-9]\+\)'" matchgroup=shHereDoc04 end="^\s*\z1\s*$"
380 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^']\+\)'" matchgroup=shHereDoc05 end="^\z1\s*$" 381 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^'0-9]\+\)'" matchgroup=shHereDoc05 end="^\z1\s*$"
381 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc06 end="^\s*\z1\s*$" 382 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^ \t0-9|>]\+\)\"" matchgroup=shHereDoc06 end="^\s*\z1\s*$"
382 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList 383 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList
383 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$" 384 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t0-9|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$"
384 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$" 385 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t0-9|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$"
385 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$" 386 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$"
386 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$" 387 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$"
387 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$" 388 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t0-9|>]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$"
388 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$" 389 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t0-9|>]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$"
389 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$" 390 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$"
390 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$" 391 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \t0-9|>]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$"
391 392
392 " Here Strings: {{{1 393 " Here Strings: {{{1
393 " ============= 394 " =============
394 " available for: bash; ksh (really should be ksh93 only) but not if its a posix 395 " available for: bash; ksh (really should be ksh93 only) but not if its a posix
395 if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_posix")) 396 if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_posix"))
403 syn match shVarAssign "=" contained nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote 404 syn match shVarAssign "=" contained nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
404 syn region shAtExpr contained start="@(" end=")" contains=@shIdList 405 syn region shAtExpr contained start="@(" end=")" contains=@shIdList
405 if exists("b:is_bash") 406 if exists("b:is_bash")
406 syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList 407 syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList
407 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+=" contains=@shIdList 408 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+=" contains=@shIdList
408 elseif exists("b:is_kornshell") 409 elseif exists("b:is_kornshell") || exists("b:is_posix")
409 syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList 410 syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
410 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList 411 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
411 else 412 else
412 syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList 413 syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
413 endif 414 endif
437 syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList 438 syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList
438 syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray 439 syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray
439 syn match shDerefSimple "\$[-#*@!?]" nextgroup=@shNoZSList 440 syn match shDerefSimple "\$[-#*@!?]" nextgroup=@shNoZSList
440 syn match shDerefSimple "\$\$" nextgroup=@shNoZSList 441 syn match shDerefSimple "\$\$" nextgroup=@shNoZSList
441 syn match shDerefSimple "\${\d}" nextgroup=@shNoZSList 442 syn match shDerefSimple "\${\d}" nextgroup=@shNoZSList
442 if exists("b:is_bash") || exists("b:is_kornshell") 443 if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
443 syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS 444 syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS
444 syn region shDeref matchgroup=PreProc start="\${\$\$" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS 445 syn region shDeref matchgroup=PreProc start="\${\$\$" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS
445 endif 446 endif
446 447
447 " ksh: ${!var[*]} array index list syntax: {{{1 448 " ksh: ${!var[*]} array index list syntax: {{{1
448 " ======================================== 449 " ========================================
449 if exists("b:is_kornshell") 450 if exists("b:is_kornshell") || exists("b:is_posix")
450 syn region shDeref matchgroup=PreProc start="\${!" end="}" contains=@shDerefVarArray 451 syn region shDeref matchgroup=PreProc start="\${!" end="}" contains=@shDerefVarArray
451 endif 452 endif
452 453
453 " bash: ${!prefix*} and ${#parameter}: {{{1 454 " bash: ${!prefix*} and ${#parameter}: {{{1
454 " ==================================== 455 " ====================================
462 463
463 syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError 464 syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError
464 syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp 465 syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
465 syn match shDerefVar contained "{\@<=\h\w*" nextgroup=@shDerefVarList 466 syn match shDerefVar contained "{\@<=\h\w*" nextgroup=@shDerefVarList
466 syn match shDerefVar contained '\d' nextgroup=@shDerefVarList 467 syn match shDerefVar contained '\d' nextgroup=@shDerefVarList
467 if exists("b:is_kornshell") 468 if exists("b:is_kornshell") || exists("b:is_posix")
468 syn match shDerefVar contained "{\@<=\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList 469 syn match shDerefVar contained "{\@<=\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
469 endif 470 endif
470 471
471 " sh ksh bash : ${var[... ]...} array reference: {{{1 472 " sh ksh bash : ${var[... ]...} array reference: {{{1
472 syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError 473 syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
488 if !exists("g:sh_no_error") 489 if !exists("g:sh_no_error")
489 syn match shDerefOpError contained ":[[:punct:]]" 490 syn match shDerefOpError contained ":[[:punct:]]"
490 endif 491 endif
491 syn match shDerefOp contained ":\=[-=?]" nextgroup=@shDerefPatternList 492 syn match shDerefOp contained ":\=[-=?]" nextgroup=@shDerefPatternList
492 syn match shDerefOp contained ":\=+" nextgroup=@shDerefPatternList 493 syn match shDerefOp contained ":\=+" nextgroup=@shDerefPatternList
493 if exists("b:is_bash") || exists("b:is_kornshell") 494 if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
494 syn match shDerefOp contained "#\{1,2}" nextgroup=@shDerefPatternList 495 syn match shDerefOp contained "#\{1,2}" nextgroup=@shDerefPatternList
495 syn match shDerefOp contained "%\{1,2}" nextgroup=@shDerefPatternList 496 syn match shDerefOp contained "%\{1,2}" nextgroup=@shDerefPatternList
496 syn match shDerefPattern contained "[^{}]\+" contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern 497 syn match shDerefPattern contained "[^{}]\+" contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern
497 syn region shDerefPattern contained start="{" end="}" contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern 498 syn region shDerefPattern contained start="{" end="}" contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
498 syn match shDerefEscape contained '\%(\\\\\)*\\.' 499 syn match shDerefEscape contained '\%(\\\\\)*\\.'
535 syn keyword shCondError elif else then 536 syn keyword shCondError elif else then
536 endif 537 endif
537 538
538 " Useful ksh Keywords: {{{1 539 " Useful ksh Keywords: {{{1
539 " ==================== 540 " ====================
540 if exists("b:is_kornshell") || exists("b:is_bash") 541 if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
541 syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup printf r stop suspend times true type unalias whence 542 syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup printf r stop suspend times true type unalias whence
542 if exists("b:is_posix") 543 if exists("b:is_posix")
543 syn keyword shStatement command 544 syn keyword shStatement command
544 else 545 else
545 syn keyword shStatement time 546 syn keyword shStatement time
633 hi def link shSetListDelim shOperator 634 hi def link shSetListDelim shOperator
634 hi def link shSetOption shOption 635 hi def link shSetOption shOption
635 hi def link shSingleQuote shString 636 hi def link shSingleQuote shString
636 hi def link shSource shOperator 637 hi def link shSource shOperator
637 hi def link shStringSpecial shSpecial 638 hi def link shStringSpecial shSpecial
639 hi def link shSpecialStart shSpecial
638 hi def link shSubShRegion shOperator 640 hi def link shSubShRegion shOperator
639 hi def link shTestOpr shConditional 641 hi def link shTestOpr shConditional
640 hi def link shTestPattern shString 642 hi def link shTestPattern shString
641 hi def link shTestDoubleQuote shString 643 hi def link shTestDoubleQuote shString
642 hi def link shTestSingleQuote shString 644 hi def link shTestSingleQuote shString
650 hi def link bashStatement shStatement 652 hi def link bashStatement shStatement
651 hi def link shCharClass shSpecial 653 hi def link shCharClass shSpecial
652 hi def link shDerefOff shDerefOp 654 hi def link shDerefOff shDerefOp
653 hi def link shDerefLen shDerefOff 655 hi def link shDerefLen shDerefOff
654 endif 656 endif
655 if exists("b:is_kornshell") 657 if exists("b:is_kornshell") || exists("b:is_posix")
656 hi def link kshSpecialVariables shShellVariables 658 hi def link kshSpecialVariables shShellVariables
657 hi def link kshStatement shStatement 659 hi def link kshStatement shStatement
658 endif 660 endif
659 661
660 if !exists("g:sh_no_error") 662 if !exists("g:sh_no_error")
667 hi def link shEsacError Error 669 hi def link shEsacError Error
668 hi def link shIfError Error 670 hi def link shIfError Error
669 hi def link shInError Error 671 hi def link shInError Error
670 hi def link shParenError Error 672 hi def link shParenError Error
671 hi def link shTestError Error 673 hi def link shTestError Error
672 if exists("b:is_kornshell") 674 if exists("b:is_kornshell") || exists("b:is_posix")
673 hi def link shDTestError Error 675 hi def link shDTestError Error
674 endif 676 endif
675 endif 677 endif
676 678
677 hi def link shArithmetic Special 679 hi def link shArithmetic Special
723 " =================== 725 " ===================
724 if exists("b:is_bash") 726 if exists("b:is_bash")
725 let b:current_syntax = "bash" 727 let b:current_syntax = "bash"
726 elseif exists("b:is_kornshell") 728 elseif exists("b:is_kornshell")
727 let b:current_syntax = "ksh" 729 let b:current_syntax = "ksh"
730 elseif exists("b:is_posix")
731 let b:current_syntax = "posix"
728 else 732 else
729 let b:current_syntax = "sh" 733 let b:current_syntax = "sh"
730 endif 734 endif
731 735
732 " vim: ts=16 fdm=marker 736 " vim: ts=16 fdm=marker