1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: C-shell (csh) 3*1d9215b9SBram Moolenaar" Maintainer: Charles E. Campbell <[email protected]> 4f37506f6SBram Moolenaar" Last Change: Aug 31, 2016 5*1d9215b9SBram Moolenaar" Version: 14 6e2719096SBram Moolenaar" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH 7071d4279SBram Moolenaar 889bcfda6SBram Moolenaar" quit when a syntax file was already loaded 989bcfda6SBram Moolenaarif exists("b:current_syntax") 10071d4279SBram Moolenaar finish 11071d4279SBram Moolenaarendif 12071d4279SBram Moolenaar 13071d4279SBram Moolenaar" clusters: 14071d4279SBram Moolenaarsyn cluster cshQuoteList contains=cshDblQuote,cshSnglQuote,cshBckQuote 15071d4279SBram Moolenaarsyn cluster cshVarList contains=cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst 16071d4279SBram Moolenaar 17071d4279SBram Moolenaar" Variables which affect the csh itself 18071d4279SBram Moolenaarsyn match cshSetVariables contained "argv\|histchars\|ignoreeof\|noglob\|prompt\|status" 19071d4279SBram Moolenaarsyn match cshSetVariables contained "cdpath\|history\|mail\|nonomatch\|savehist\|time" 20071d4279SBram Moolenaarsyn match cshSetVariables contained "cwd\|home\|noclobber\|path\|shell\|verbose" 21071d4279SBram Moolenaarsyn match cshSetVariables contained "echo" 22071d4279SBram Moolenaar 23071d4279SBram Moolenaarsyn case ignore 24071d4279SBram Moolenaarsyn keyword cshTodo contained todo 25071d4279SBram Moolenaarsyn case match 26071d4279SBram Moolenaar 27071d4279SBram Moolenaar" Variable Name Expansion Modifiers 28071d4279SBram Moolenaarsyn match cshModifier contained ":\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 29071d4279SBram Moolenaar 30071d4279SBram Moolenaar" Strings and Comments 31071d4279SBram Moolenaarsyn match cshNoEndlineDQ contained "[^\"]\(\\\\\)*$" 32071d4279SBram Moolenaarsyn match cshNoEndlineSQ contained "[^\']\(\\\\\)*$" 33071d4279SBram Moolenaarsyn match cshNoEndlineBQ contained "[^\`]\(\\\\\)*$" 34071d4279SBram Moolenaar 359964e468SBram Moolenaarsyn region cshDblQuote start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote,@Spell 369964e468SBram Moolenaarsyn region cshSnglQuote start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell 379964e468SBram Moolenaarsyn region cshBckQuote start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell 389964e468SBram Moolenaarsyn region cshDblQuote start=+^"+ skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,@Spell 399964e468SBram Moolenaarsyn region cshSnglQuote start=+^'+ skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell 409964e468SBram Moolenaarsyn region cshBckQuote start=+^`+ skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell 41071d4279SBram Moolenaarsyn cluster cshCommentGroup contains=cshTodo,@Spell 42071d4279SBram Moolenaarsyn match cshComment "#.*$" contains=@cshCommentGroup 43071d4279SBram Moolenaar 44071d4279SBram Moolenaar" A bunch of useful csh keywords 45071d4279SBram Moolenaarsyn keyword cshStatement alias end history onintr setenv unalias 46071d4279SBram Moolenaarsyn keyword cshStatement cd eval kill popd shift unhash 47071d4279SBram Moolenaarsyn keyword cshStatement chdir exec login pushd source 48071d4279SBram Moolenaarsyn keyword cshStatement continue exit logout rehash time unsetenv 49071d4279SBram Moolenaarsyn keyword cshStatement dirs glob nice repeat umask wait 50071d4279SBram Moolenaarsyn keyword cshStatement echo goto nohup 51071d4279SBram Moolenaar 52071d4279SBram Moolenaarsyn keyword cshConditional break case else endsw switch 53071d4279SBram Moolenaarsyn keyword cshConditional breaksw default endif 54071d4279SBram Moolenaarsyn keyword cshRepeat foreach 55071d4279SBram Moolenaar 56071d4279SBram Moolenaar" Special environment variables 57071d4279SBram Moolenaarsyn keyword cshShellVariables HOME LOGNAME PATH TERM USER 58071d4279SBram Moolenaar 59071d4279SBram Moolenaar" Modifiable Variables without {} 60071d4279SBram Moolenaarsyn match cshExtVar "\$[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 61071d4279SBram Moolenaarsyn match cshSelector "\$[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 62071d4279SBram Moolenaarsyn match cshQtyWord "\$#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 63071d4279SBram Moolenaarsyn match cshArgv "\$\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 64071d4279SBram Moolenaarsyn match cshArgv "\$\*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 65071d4279SBram Moolenaar 66071d4279SBram Moolenaar" Modifiable Variables with {} 67071d4279SBram Moolenaarsyn match cshExtVar "\${[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 68071d4279SBram Moolenaarsyn match cshSelector "\${[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 69071d4279SBram Moolenaarsyn match cshQtyWord "\${#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 70071d4279SBram Moolenaarsyn match cshArgv "\${\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 71071d4279SBram Moolenaar 72071d4279SBram Moolenaar" UnModifiable Substitutions 73071d4279SBram Moolenaarsyn match cshSubstError "\$?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 74071d4279SBram Moolenaarsyn match cshSubstError "\${?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)}" 75071d4279SBram Moolenaarsyn match cshSubstError "\$?[0$<]:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 76071d4279SBram Moolenaarsyn match cshSubst "\$?[a-zA-Z_][a-zA-Z0-9_]*" 77071d4279SBram Moolenaarsyn match cshSubst "\${?[a-zA-Z_][a-zA-Z0-9_]*}" 78071d4279SBram Moolenaarsyn match cshSubst "\$?[0$<]" 79071d4279SBram Moolenaar 80071d4279SBram Moolenaar" I/O redirection 81071d4279SBram Moolenaarsyn match cshRedir ">>&!\|>&!\|>>&\|>>!\|>&\|>!\|>>\|<<\|>\|<" 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar" Handle set expressions 84071d4279SBram Moolenaarsyn region cshSetExpr matchgroup=cshSetStmt start="\<set\>\|\<unset\>" end="$\|;" contains=cshComment,cshSetStmt,cshSetVariables,@cshQuoteList 85071d4279SBram Moolenaar 86071d4279SBram Moolenaar" Operators and Expression-Using constructs 87071d4279SBram Moolenaar"syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|\|%\|&\|+\|-\|/\|<\|>\||" 88071d4279SBram Moolenaarsyn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||" 89071d4279SBram Moolenaarsyn match cshOperator contained "[(){}]" 90071d4279SBram Moolenaarsyn region cshTest matchgroup=cshStatement start="\<if\>\|\<while\>" skip="\\$" matchgroup=cshStatement end="\<then\>\|$" contains=cshComment,cshOperator,@cshQuoteList,@cshVarLIst 91071d4279SBram Moolenaar 92071d4279SBram Moolenaar" Highlight special characters (those which have a backslash) differently 93071d4279SBram Moolenaarsyn match cshSpecial contained "\\\d\d\d\|\\[abcfnrtv\\]" 94071d4279SBram Moolenaarsyn match cshNumber "-\=\<\d\+\>" 95071d4279SBram Moolenaar 96071d4279SBram Moolenaar" All other identifiers 97071d4279SBram Moolenaar"syn match cshIdentifier "\<[a-zA-Z._][a-zA-Z0-9._]*\>" 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar" Shell Input Redirection (Here Documents) 100071d4279SBram Moolenaarsyn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**\z(\h\w*\)\**" matchgroup=cshRedir end="^\z1$" 101071d4279SBram Moolenaar 102071d4279SBram Moolenaar" Define the default highlighting. 103f37506f6SBram Moolenaarif !exists("skip_csh_syntax_inits") 104071d4279SBram Moolenaar 105f37506f6SBram Moolenaar hi def link cshArgv cshVariables 106f37506f6SBram Moolenaar hi def link cshBckQuote cshCommand 107f37506f6SBram Moolenaar hi def link cshDblQuote cshString 108f37506f6SBram Moolenaar hi def link cshExtVar cshVariables 109f37506f6SBram Moolenaar hi def link cshHereDoc cshString 110f37506f6SBram Moolenaar hi def link cshNoEndlineBQ cshNoEndline 111f37506f6SBram Moolenaar hi def link cshNoEndlineDQ cshNoEndline 112f37506f6SBram Moolenaar hi def link cshNoEndlineSQ cshNoEndline 113f37506f6SBram Moolenaar hi def link cshQtyWord cshVariables 114f37506f6SBram Moolenaar hi def link cshRedir cshOperator 115f37506f6SBram Moolenaar hi def link cshSelector cshVariables 116f37506f6SBram Moolenaar hi def link cshSetStmt cshStatement 117f37506f6SBram Moolenaar hi def link cshSetVariables cshVariables 118f37506f6SBram Moolenaar hi def link cshSnglQuote cshString 119f37506f6SBram Moolenaar hi def link cshSubst cshVariables 120071d4279SBram Moolenaar 121f37506f6SBram Moolenaar hi def link cshCommand Statement 122f37506f6SBram Moolenaar hi def link cshComment Comment 123f37506f6SBram Moolenaar hi def link cshConditional Conditional 124f37506f6SBram Moolenaar hi def link cshIdentifier Error 125f37506f6SBram Moolenaar hi def link cshModifier Special 126f37506f6SBram Moolenaar hi def link cshNoEndline Error 127f37506f6SBram Moolenaar hi def link cshNumber Number 128f37506f6SBram Moolenaar hi def link cshOperator Operator 129f37506f6SBram Moolenaar hi def link cshRedir Statement 130f37506f6SBram Moolenaar hi def link cshRepeat Repeat 131f37506f6SBram Moolenaar hi def link cshShellVariables Special 132f37506f6SBram Moolenaar hi def link cshSpecial Special 133f37506f6SBram Moolenaar hi def link cshStatement Statement 134f37506f6SBram Moolenaar hi def link cshString String 135f37506f6SBram Moolenaar hi def link cshSubstError Error 136f37506f6SBram Moolenaar hi def link cshTodo Todo 137f37506f6SBram Moolenaar hi def link cshVariables Type 138071d4279SBram Moolenaar 139f37506f6SBram Moolenaarendif 140071d4279SBram Moolenaar 141071d4279SBram Moolenaarlet b:current_syntax = "csh" 142071d4279SBram Moolenaar 143071d4279SBram Moolenaar" vim: ts=18 144