blob: aba073ee5dd787c7824b0c024a8c4a3be880076b [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Makefile
3" Maintainer: Claudio Fleiner <claudio@fleiner.com>
4" URL: http://www.fleiner.com/vim/syntax/make.vim
Bram Moolenaar0e21a3f2005-04-17 20:28:32 +00005" Last Change: 2005 Apr 17
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" For version 5.x: Clear all syntax items
8" For version 6.x: Quit when a syntax file was already loaded
9if version < 600
10 syntax clear
11elseif exists("b:current_syntax")
12 finish
13endif
14
15" some special characters
16syn match makeSpecial "^\s*[@-]\+"
17syn match makeNextLine "\\\n\s*"
18
19" some directives
20syn match makePreCondit "^\s*\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)"
21syn match makeInclude "^\s*[-s]\=include"
22syn match makeStatement "^\s*vpath"
23syn match makeExport "^\s*\(export\|unexport\)\>"
24syn match makeOverride "^\s*override"
25hi link makeOverride makeStatement
26hi link makeExport makeStatement
27
28" Koehler: catch unmatched define/endef keywords. endef only matches it is by itself on a line
29syn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
30
31" Microsoft Makefile specials
32syn case ignore
33syn match makeInclude "^!\s*include"
34syn match makePreCondit "!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
35syn case match
36
37" identifiers
38syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString
39syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString
40syn match makeIdent "\$\$\w*"
41syn match makeIdent "\$[^({]"
42syn match makeIdent "^\s*\a\w*\s*[:+?!*]="me=e-2
43syn match makeIdent "^\s*\a\w*\s*="me=e-1
44syn match makeIdent "%"
45
46" Makefile.in variables
47syn match makeConfig "@[A-Za-z0-9_]\+@"
48
49" make targets
50" syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
51syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
52syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
53
54syn region makeTarget transparent matchgroup=makeTarget start="^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
55syn match makeTarget "^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError
56
57syn region makeSpecTarget transparent matchgroup=makeSpecTarget start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>:\{1,2}[^:=]"rs=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
58syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>::\=\s*$" contains=makeIdent skipnl nextgroup=makeCommands,makeCommandError
59
60syn match makeCommandError "^\s\+\S.*" contained
61syn region makeCommands start=";"hs=s+1 start="^\t" end="^[^\t#]"me=e-1,re=e-1 end="^$" contained contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString nextgroup=makeCommandError
62syn match makeCmdNextLine "\\\n."he=e-1 contained
63
64
65" Statements / Functions (GNU make)
66syn match makeStatement contained "(\(subst\|addprefix\|addsuffix\|basename\|call\|dir\|error\|filter-out\|filter\|findstring\|firstword\|foreach\|if\|join\|notdir\|origin\|patsubst\|shell\|sort\|strip\|suffix\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
67
68" Comment
69if exists("make_microsoft")
Bram Moolenaar0e21a3f2005-04-17 20:28:32 +000070 syn match makeComment "#.*" contains=makeTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000071else
Bram Moolenaar0e21a3f2005-04-17 20:28:32 +000072 syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=makeTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 syn match makeComment "#$"
74endif
75syn keyword makeTodo TODO FIXME XXX contained
76
77" match escaped quotes and any other escaped character
78" except for $, as a backslash in front of a $ does
79" not make it a standard character, but instead it will
80" still act as the beginning of a variable
81" The escaped char is not highlightet currently
82syn match makeEscapedChar "\\[^$]"
83
84
85syn region makeDString start=+\(\\\)\@<!"+ skip=+\\.+ end=+"+ contains=makeIdent
86syn region makeSString start=+\(\\\)\@<!'+ skip=+\\.+ end=+'+ contains=makeIdent
87syn region makeBString start=+\(\\\)\@<!`+ skip=+\\.+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine
88
89" Syncing
90syn sync minlines=20 maxlines=200
91
92" Sync on Make command block region: When searching backwards hits a line that
93" can't be a command or a comment, use makeCommands if it looks like a target,
94" NONE otherwise.
95syn sync match makeCommandSync groupthere NONE "^[^\t#]"
96syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"
97syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$"
98
99" Define the default highlighting.
100" For version 5.7 and earlier: only when not done already
101" For version 5.8 and later: only when an item doesn't have highlighting yet
102if version >= 508 || !exists("did_make_syn_inits")
103 if version < 508
104 let did_make_syn_inits = 1
105 command -nargs=+ HiLink hi link <args>
106 else
107 command -nargs=+ HiLink hi def link <args>
108 endif
109
110 HiLink makeNextLine makeSpecial
111 HiLink makeCmdNextLine makeSpecial
112 HiLink makeSpecTarget Statement
113 if !exists("make_no_commands")
114 HiLink makeCommands Number
115 endif
116 HiLink makeImplicit Function
117 HiLink makeTarget Function
118 HiLink makeInclude Include
119 HiLink makePreCondit PreCondit
120 HiLink makeStatement Statement
121 HiLink makeIdent Identifier
122 HiLink makeSpecial Special
123 HiLink makeComment Comment
124 HiLink makeDString String
125 HiLink makeSString String
126 HiLink makeBString Function
127 HiLink makeError Error
128 HiLink makeTodo Todo
129 HiLink makeDefine Define
130 HiLink makeCommandError Error
131 HiLink makeConfig PreCondit
132 delcommand HiLink
133endif
134
135let b:current_syntax = "make"
136
137" vim: ts=8