1" Vim syntax file 2" Language: C-shell (csh) 3" Maintainer: Charles E. Campbell <[email protected]> 4" Last Change: Oct 23, 2014 5" Version: 11 6" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH 7 8" quit when a syntax file was already loaded 9if exists("b:current_syntax") 10 finish 11endif 12 13" clusters: 14syn cluster cshQuoteList contains=cshDblQuote,cshSnglQuote,cshBckQuote 15syn cluster cshVarList contains=cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst 16 17" Variables which affect the csh itself 18syn match cshSetVariables contained "argv\|histchars\|ignoreeof\|noglob\|prompt\|status" 19syn match cshSetVariables contained "cdpath\|history\|mail\|nonomatch\|savehist\|time" 20syn match cshSetVariables contained "cwd\|home\|noclobber\|path\|shell\|verbose" 21syn match cshSetVariables contained "echo" 22 23syn case ignore 24syn keyword cshTodo contained todo 25syn case match 26 27" Variable Name Expansion Modifiers 28syn match cshModifier contained ":\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 29 30" Strings and Comments 31syn match cshNoEndlineDQ contained "[^\"]\(\\\\\)*$" 32syn match cshNoEndlineSQ contained "[^\']\(\\\\\)*$" 33syn match cshNoEndlineBQ contained "[^\`]\(\\\\\)*$" 34 35syn region cshDblQuote start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote,@Spell 36syn region cshSnglQuote start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell 37syn region cshBckQuote start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell 38syn region cshDblQuote start=+^"+ skip=+\\\\\|\\"+ end=+"+ contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,@Spell 39syn region cshSnglQuote start=+^'+ skip=+\\\\\|\\'+ end=+'+ contains=cshNoEndlineSQ,@Spell 40syn region cshBckQuote start=+^`+ skip=+\\\\\|\\`+ end=+`+ contains=cshNoEndlineBQ,@Spell 41syn cluster cshCommentGroup contains=cshTodo,@Spell 42syn match cshComment "#.*$" contains=@cshCommentGroup 43 44" A bunch of useful csh keywords 45syn keyword cshStatement alias end history onintr setenv unalias 46syn keyword cshStatement cd eval kill popd shift unhash 47syn keyword cshStatement chdir exec login pushd source 48syn keyword cshStatement continue exit logout rehash time unsetenv 49syn keyword cshStatement dirs glob nice repeat umask wait 50syn keyword cshStatement echo goto nohup 51 52syn keyword cshConditional break case else endsw switch 53syn keyword cshConditional breaksw default endif 54syn keyword cshRepeat foreach 55 56" Special environment variables 57syn keyword cshShellVariables HOME LOGNAME PATH TERM USER 58 59" Modifiable Variables without {} 60syn match cshExtVar "\$[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 61syn match cshSelector "\$[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 62syn match cshQtyWord "\$#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 63syn match cshArgv "\$\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 64syn match cshArgv "\$\*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=" contains=cshModifier 65 66" Modifiable Variables with {} 67syn match cshExtVar "\${[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 68syn match cshSelector "\${[a-zA-Z_][a-zA-Z0-9_]*\[[a-zA-Z_]\+\]\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 69syn match cshQtyWord "\${#[a-zA-Z_][a-zA-Z0-9_]*\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 70syn match cshArgv "\${\d\+\(:h\|:t\|:r\|:q\|:x\|:gh\|:gt\|:gr\)\=}" contains=cshModifier 71 72" UnModifiable Substitutions 73syn match cshSubstError "\$?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 74syn match cshSubstError "\${?[a-zA-Z_][a-zA-Z0-9_]*:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)}" 75syn match cshSubstError "\$?[0$<]:\(h\|t\|r\|q\|x\|gh\|gt\|gr\)" 76syn match cshSubst "\$?[a-zA-Z_][a-zA-Z0-9_]*" 77syn match cshSubst "\${?[a-zA-Z_][a-zA-Z0-9_]*}" 78syn match cshSubst "\$?[0$<]" 79 80" I/O redirection 81syn match cshRedir ">>&!\|>&!\|>>&\|>>!\|>&\|>!\|>>\|<<\|>\|<" 82 83" Handle set expressions 84syn region cshSetExpr matchgroup=cshSetStmt start="\<set\>\|\<unset\>" end="$\|;" contains=cshComment,cshSetStmt,cshSetVariables,@cshQuoteList 85 86" Operators and Expression-Using constructs 87"syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|\|%\|&\|+\|-\|/\|<\|>\||" 88syn match cshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||" 89syn match cshOperator contained "[(){}]" 90syn region cshTest matchgroup=cshStatement start="\<if\>\|\<while\>" skip="\\$" matchgroup=cshStatement end="\<then\>\|$" contains=cshComment,cshOperator,@cshQuoteList,@cshVarLIst 91 92" Highlight special characters (those which have a backslash) differently 93syn match cshSpecial contained "\\\d\d\d\|\\[abcfnrtv\\]" 94syn match cshNumber "-\=\<\d\+\>" 95 96" All other identifiers 97"syn match cshIdentifier "\<[a-zA-Z._][a-zA-Z0-9._]*\>" 98 99" Shell Input Redirection (Here Documents) 100syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**\z(\h\w*\)\**" matchgroup=cshRedir end="^\z1$" 101 102" Define the default highlighting. 103" Only when an item doesn't have highlighting yet 104command -nargs=+ HiLink hi def link <args> 105 106HiLink cshArgv cshVariables 107HiLink cshBckQuote cshCommand 108HiLink cshDblQuote cshString 109HiLink cshExtVar cshVariables 110HiLink cshHereDoc cshString 111HiLink cshNoEndlineBQ cshNoEndline 112HiLink cshNoEndlineDQ cshNoEndline 113HiLink cshNoEndlineSQ cshNoEndline 114HiLink cshQtyWord cshVariables 115HiLink cshRedir cshOperator 116HiLink cshSelector cshVariables 117HiLink cshSetStmt cshStatement 118HiLink cshSetVariables cshVariables 119HiLink cshSnglQuote cshString 120HiLink cshSubst cshVariables 121 122HiLink cshCommand Statement 123HiLink cshComment Comment 124HiLink cshConditional Conditional 125HiLink cshIdentifier Error 126HiLink cshModifier Special 127HiLink cshNoEndline Error 128HiLink cshNumber Number 129HiLink cshOperator Operator 130HiLink cshRedir Statement 131HiLink cshRepeat Repeat 132HiLink cshShellVariables Special 133HiLink cshSpecial Special 134HiLink cshStatement Statement 135HiLink cshString String 136HiLink cshSubstError Error 137HiLink cshTodo Todo 138HiLink cshVariables Type 139 140delcommand HiLink 141 142let b:current_syntax = "csh" 143 144" vim: ts=18 145