xref: /vim-8.2.3635/runtime/syntax/csh.vim (revision 89bcfda6)
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