xref: /vim-8.2.3635/runtime/syntax/csh.vim (revision beae4084)
1" Vim syntax file
2" Language:	C-shell (csh)
3" Maintainer:	Charles E. Campbell <[email protected]>
4" Last Change:	Aug 31, 2016
5" Version:	14
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.
103if !exists("skip_csh_syntax_inits")
104
105  hi def link cshArgv		cshVariables
106  hi def link cshBckQuote	cshCommand
107  hi def link cshDblQuote	cshString
108  hi def link cshExtVar	cshVariables
109  hi def link cshHereDoc	cshString
110  hi def link cshNoEndlineBQ	cshNoEndline
111  hi def link cshNoEndlineDQ	cshNoEndline
112  hi def link cshNoEndlineSQ	cshNoEndline
113  hi def link cshQtyWord	cshVariables
114  hi def link cshRedir		cshOperator
115  hi def link cshSelector	cshVariables
116  hi def link cshSetStmt	cshStatement
117  hi def link cshSetVariables	cshVariables
118  hi def link cshSnglQuote	cshString
119  hi def link cshSubst		cshVariables
120
121  hi def link cshCommand	Statement
122  hi def link cshComment	Comment
123  hi def link cshConditional	Conditional
124  hi def link cshIdentifier	Error
125  hi def link cshModifier	Special
126  hi def link cshNoEndline	Error
127  hi def link cshNumber	Number
128  hi def link cshOperator	Operator
129  hi def link cshRedir		Statement
130  hi def link cshRepeat	Repeat
131  hi def link cshShellVariables	Special
132  hi def link cshSpecial	Special
133  hi def link cshStatement	Statement
134  hi def link cshString	String
135  hi def link cshSubstError	Error
136  hi def link cshTodo		Todo
137  hi def link cshVariables	Type
138
139endif
140
141let b:current_syntax = "csh"
142
143" vim: ts=18
144