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