comparison runtime/syntax/sh.vim @ 9737:35ce559b8553

commit https://github.com/vim/vim/commit/bc8801c9317eb721a2ee91322669f2dd5d136380 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 2 21:04:33 2016 +0200 Updated runtime files.
author Christian Brabandt <cb@256bit.org>
date Tue, 02 Aug 2016 21:15:06 +0200
parents 33c1b85d408c
children 03fa8a51e9dc
comparison
equal deleted inserted replaced
9736:d963b7420aa2 9737:35ce559b8553
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: Jun 10, 2016 5 " Last Change: Jul 29, 2016
6 " Version: 152 6 " Version: 155
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 " For version 5.x: Clear all syntax items {{{1 11 " For version 5.x: Clear all syntax items {{{1
129 endif 129 endif
130 syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor 130 syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor
131 syn cluster shArithList contains=@shArithParenList,shParenError 131 syn cluster shArithList contains=@shArithParenList,shParenError
132 syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange 132 syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
133 syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq 133 syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
134 syn cluster shCommandSubList contains=shAlias,shArithmetic,shComment,shCmdParenRegion,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shNumber,shOperator,shOption,shPosnParm,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable 134 syn cluster shCommandSubList contains=shAlias,shArithmetic,shComment,shCmdParenRegion,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable
135 syn cluster shCurlyList contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial 135 syn cluster shCurlyList contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
136 syn cluster shDblQuoteList contains=shCommandSub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial 136 syn cluster shDblQuoteList contains=shCommandSub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial
137 syn cluster shDerefList contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPSR,shDerefPPS 137 syn cluster shDerefList contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPSR,shDerefPPS
138 syn cluster shDerefVarList contains=shDerefOp,shDerefVarArray,shDerefOpError 138 syn cluster shDerefVarList contains=shDerefOff,shDerefOp,shDerefVarArray,shDerefOpError
139 syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shEscape,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote 139 syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shEscape,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
140 syn cluster shExprList1 contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq 140 syn cluster shExprList1 contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
141 syn cluster shExprList2 contains=@shExprList1,@shCaseList,shTest 141 syn cluster shExprList2 contains=@shExprList1,@shCaseList,shTest
142 syn cluster shFunctionList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq 142 syn cluster shFunctionList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
143 if exists("b:is_kornshell") || exists("b:is_bash") 143 if exists("b:is_kornshell") || exists("b:is_bash")
330 endif 330 endif
331 331
332 " String And Character Constants: {{{1 332 " String And Character Constants: {{{1
333 "================================ 333 "================================
334 syn match shNumber "\<\d\+\>#\=" 334 syn match shNumber "\<\d\+\>#\="
335 syn match shNumber "-\=\.\=\d\+\>#\=" 335 syn match shNumber "\<-\=\.\=\d\+\>#\="
336 syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained 336 syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained
337 if exists("b:is_bash") 337 if exists("b:is_bash")
338 syn match shSpecial "[^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained 338 syn match shSpecial "[^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained
339 syn match shSpecial "^\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained 339 syn match shSpecial "^\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained
340 endif 340 endif
364 syn match shComment contained "#.*$" contains=@shCommentGroup 364 syn match shComment contained "#.*$" contains=@shCommentGroup
365 syn match shQuickComment contained "#.*$" 365 syn match shQuickComment contained "#.*$"
366 366
367 " Here Documents: {{{1 367 " Here Documents: {{{1
368 " ========================================= 368 " =========================================
369 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\\\=\z([^ \t|]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList 369 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\\\=\z([^ \t|>]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList
370 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<\s*\"\z([^ \t|]\+\)\"" matchgroup=shHereDoc02 end="^\z1\s*$" 370 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<\s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc02 end="^\z1\s*$"
371 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<-\s*\z([^ \t|]\+\)" matchgroup=shHereDoc03 end="^\s*\z1\s*$" contains=@shDblQuoteList 371 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<-\s*\z([^ \t|>]\+\)" matchgroup=shHereDoc03 end="^\s*\z1\s*$" contains=@shDblQuoteList
372 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*'\z([^ \t|]\+\)'" matchgroup=shHereDoc04 end="^\s*\z1\s*$" 372 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc04 end="^\s*\z1\s*$"
373 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^ \t|]\+\)'" matchgroup=shHereDoc05 end="^\z1\s*$" 373 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc05 end="^\z1\s*$"
374 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^ \t|]\+\)\"" matchgroup=shHereDoc06 end="^\s*\z1\s*$" 374 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc06 end="^\s*\z1\s*$"
375 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t|]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList 375 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" contains=@shDblQuoteList
376 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t|]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$" 376 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$"
377 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t|]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$" 377 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$"
378 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$" 378 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$"
379 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$" 379 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$"
380 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t|]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$" 380 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^ \t|>]\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$"
381 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t|]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$" 381 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^ \t|>]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$"
382 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$" 382 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$"
383 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \t|]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$" 383 ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$"
384 384
385 " Here Strings: {{{1 385 " Here Strings: {{{1
386 " ============= 386 " =============
387 " available for: bash; ksh (really should be ksh93 only) but not if its a posix 387 " available for: bash; ksh (really should be ksh93 only) but not if its a posix
388 if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix")) 388 if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
425 " Parameter Dereferencing: {{{1 425 " Parameter Dereferencing: {{{1
426 " ======================== 426 " ========================
427 if !exists("g:sh_no_error") 427 if !exists("g:sh_no_error")
428 syn match shDerefWordError "[^}$[~]" contained 428 syn match shDerefWordError "[^}$[~]" contained
429 endif 429 endif
430 syn match shDerefSimple "\$\%(\k\+\|\d\)" 430 syn match shDerefSimple "\$\%(\h\w*\|\d\)"
431 syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray 431 syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray
432 syn match shDerefSimple "\$[-#*@!?]" 432 syn match shDerefSimple "\$[-#*@!?]"
433 syn match shDerefSimple "\$\$" 433 syn match shDerefSimple "\$\$"
434 if exists("b:is_bash") || exists("b:is_kornshell") 434 if exists("b:is_bash") || exists("b:is_kornshell")
435 syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList 435 syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList
443 endif 443 endif
444 444
445 " bash: ${!prefix*} and ${#parameter}: {{{1 445 " bash: ${!prefix*} and ${#parameter}: {{{1
446 " ==================================== 446 " ====================================
447 if exists("b:is_bash") 447 if exists("b:is_bash")
448 syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOp 448 syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOff
449 syn match shDerefVar contained "{\@<=!\k\+" nextgroup=@shDerefVarList 449 syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList
450 endif 450 endif
451 if exists("b:is_kornshell") 451 if exists("b:is_kornshell")
452 syn match shDerefVar contained "{\@<=!\k[[:alnum:]_.]*" nextgroup=@shDerefVarList 452 syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
453 endif 453 endif
454 454
455 syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError 455 syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError
456 syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp 456 syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
457 syn match shDerefVar contained "{\@<=\k\+" nextgroup=@shDerefVarList 457 syn match shDerefVar contained "{\@<=\h\w*" nextgroup=@shDerefVarList
458 if exists("b:is_kornshell") 458 if exists("b:is_kornshell")
459 syn match shDerefVar contained "{\@<=\k[[:alnum:]_.]*" nextgroup=@shDerefVarList 459 syn match shDerefVar contained "{\@<=\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
460 endif 460 endif
461 461
462 " sh ksh bash : ${var[... ]...} array reference: {{{1 462 " sh ksh bash : ${var[... ]...} array reference: {{{1
463 syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError 463 syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
464 464
496 syn match shDerefString contained "\\["']" nextgroup=shDerefPattern 496 syn match shDerefString contained "\\["']" nextgroup=shDerefPattern
497 497
498 if exists("b:is_bash") 498 if exists("b:is_bash")
499 " bash : ${parameter:offset} 499 " bash : ${parameter:offset}
500 " bash : ${parameter:offset:length} 500 " bash : ${parameter:offset:length}
501 syn region shDerefOp contained start=":[$[:alnum:]_]"me=e-1 end=":"me=e-1 end="}"me=e-1 contains=@shCommandSubList nextgroup=shDerefPOL 501 syn region shDerefOff contained start=':' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple nextgroup=shDerefLen,shDeref,shDerefSimple
502 syn match shDerefPOL contained ":[^}]\+" contains=@shCommandSubList 502 syn region shDerefOff contained start=':\s-' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple nextgroup=shDerefLen,shDeref,shDerefSimple
503 syn match shDerefLen contained ":[^}]\+" contains=shDeref,shDerefSimple
503 504
504 " bash : ${parameter//pattern/string} 505 " bash : ${parameter//pattern/string}
505 " bash : ${parameter//pattern} 506 " bash : ${parameter//pattern}
506 syn match shDerefPPS contained '/\{1,2}' nextgroup=shDerefPPSleft 507 syn match shDerefPPS contained '/\{1,2}' nextgroup=shDerefPPSleft
507 syn region shDerefPPSleft contained start='.' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList 508 syn region shDerefPPSleft contained start='.' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
634 if exists("b:is_bash") 635 if exists("b:is_bash")
635 hi def link bashAdminStatement shStatement 636 hi def link bashAdminStatement shStatement
636 hi def link bashSpecialVariables shShellVariables 637 hi def link bashSpecialVariables shShellVariables
637 hi def link bashStatement shStatement 638 hi def link bashStatement shStatement
638 hi def link shCharClass shSpecial 639 hi def link shCharClass shSpecial
640 hi def link shDerefOff shDerefOp
641 hi def link shDerefLen shDerefOff
639 endif 642 endif
640 if exists("b:is_kornshell") 643 if exists("b:is_kornshell")
641 hi def link kshSpecialVariables shShellVariables 644 hi def link kshSpecialVariables shShellVariables
642 hi def link kshStatement shStatement 645 hi def link kshStatement shStatement
643 endif 646 endif