Mercurial > vim
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 |