blob: 973a3550dc909823e3fcf74f0640146283680d43 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: C-shell (csh)
Bram Moolenaare2719092015-01-10 15:09:25 +01003" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
Bram Moolenaare2719092015-01-10 15:09:25 +01004" Last Change: Oct 23, 2014
Bram Moolenaar83d1b192015-04-13 14:22:40 +02005" Version: 11
Bram Moolenaare2719092015-01-10 15:09:25 +01006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02008" quit when a syntax file was already loaded
9if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000010 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
Bram Moolenaar9964e462007-05-05 17:54:07 +000035syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000041syn 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)
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200100syn region cshHereDoc matchgroup=cshRedir start="<<-\=\s*\**\z(\h\w*\)\**" matchgroup=cshRedir end="^\z1$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
102" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200103" Only when an item doesn't have highlighting yet
104command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200106HiLink 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200122HiLink 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200140delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
142let b:current_syntax = "csh"
143
144" vim: ts=18