xref: /vim-8.2.3635/runtime/syntax/csh.vim (revision 00a927d6)
1" Vim syntax file
2" Language:	C-shell (csh)
3" Maintainer:	Dr. Charles E. Campbell, Jr. <[email protected]>
4" Version:	10
5" Last Change:	Sep 11, 2006
6" URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
7
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
38syn 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
44syn 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
161