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