1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Makefile 3071d4279SBram Moolenaar" Maintainer: Claudio Fleiner <[email protected]> 4071d4279SBram Moolenaar" URL: http://www.fleiner.com/vim/syntax/make.vim 5*8dff818eSBram Moolenaar" Last Change: 2006 Apr 5 6071d4279SBram Moolenaar 7071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 8071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 9071d4279SBram Moolenaarif version < 600 10071d4279SBram Moolenaar syntax clear 11071d4279SBram Moolenaarelseif exists("b:current_syntax") 12071d4279SBram Moolenaar finish 13071d4279SBram Moolenaarendif 14071d4279SBram Moolenaar 15071d4279SBram Moolenaar" some special characters 16*8dff818eSBram Moolenaarsyn match makeSpecial "^\s*[@+-]\+" 17071d4279SBram Moolenaarsyn match makeNextLine "\\\n\s*" 18071d4279SBram Moolenaar 19071d4279SBram Moolenaar" some directives 20*8dff818eSBram Moolenaarsyn match makePreCondit "^ *\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)" 21*8dff818eSBram Moolenaarsyn match makeInclude "^ *[-s]\=include" 22*8dff818eSBram Moolenaarsyn match makeStatement "^ *vpath" 23*8dff818eSBram Moolenaarsyn match makeExport "^ *\(export\|unexport\)\>" 24*8dff818eSBram Moolenaarsyn match makeOverride "^ *override" 25071d4279SBram Moolenaarhi link makeOverride makeStatement 26071d4279SBram Moolenaarhi link makeExport makeStatement 27071d4279SBram Moolenaar 28071d4279SBram Moolenaar" Koehler: catch unmatched define/endef keywords. endef only matches it is by itself on a line 29071d4279SBram Moolenaarsyn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine 30071d4279SBram Moolenaar 31071d4279SBram Moolenaar" Microsoft Makefile specials 32071d4279SBram Moolenaarsyn case ignore 33*8dff818eSBram Moolenaarsyn match makeInclude "^! *include" 34*8dff818eSBram Moolenaarsyn match makePreCondit "! *\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>" 35071d4279SBram Moolenaarsyn case match 36071d4279SBram Moolenaar 37071d4279SBram Moolenaar" identifiers 38071d4279SBram Moolenaarsyn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString 39071d4279SBram Moolenaarsyn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString 40071d4279SBram Moolenaarsyn match makeIdent "\$\$\w*" 41071d4279SBram Moolenaarsyn match makeIdent "\$[^({]" 42*8dff818eSBram Moolenaarsyn match makeIdent "^ *\a\w*\s*[:+?!*]="me=e-2 43*8dff818eSBram Moolenaarsyn match makeIdent "^ *\a\w*\s*="me=e-1 44071d4279SBram Moolenaarsyn match makeIdent "%" 45071d4279SBram Moolenaar 46071d4279SBram Moolenaar" Makefile.in variables 47071d4279SBram Moolenaarsyn match makeConfig "@[A-Za-z0-9_]\+@" 48071d4279SBram Moolenaar 49071d4279SBram Moolenaar" make targets 50071d4279SBram Moolenaar" syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>" 51071d4279SBram Moolenaarsyn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource 52071d4279SBram Moolenaarsyn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource 53071d4279SBram Moolenaar 54071d4279SBram Moolenaarsyn 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 55071d4279SBram Moolenaarsyn match makeTarget "^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError 56071d4279SBram Moolenaar 57*8dff818eSBram Moolenaarsyn 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\)\>\s*:\{1,2}[^:=]"rs=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands 58*8dff818eSBram Moolenaarsyn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*::\=\s*$" contains=makeIdent skipnl nextgroup=makeCommands,makeCommandError 59071d4279SBram Moolenaar 60071d4279SBram Moolenaarsyn match makeCommandError "^\s\+\S.*" contained 61071d4279SBram Moolenaarsyn 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 62071d4279SBram Moolenaarsyn match makeCmdNextLine "\\\n."he=e-1 contained 63071d4279SBram Moolenaar 64071d4279SBram Moolenaar 65071d4279SBram Moolenaar" Statements / Functions (GNU make) 66071d4279SBram Moolenaarsyn 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 67071d4279SBram Moolenaar 68071d4279SBram Moolenaar" Comment 69071d4279SBram Moolenaarif exists("make_microsoft") 70*8dff818eSBram Moolenaar syn match makeComment "#.*" contains=makeTodo 71*8dff818eSBram Moolenaarelseif !exists("make_no_comments") 72*8dff818eSBram Moolenaar syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=makeTodo 73071d4279SBram Moolenaar syn match makeComment "#$" 74071d4279SBram Moolenaarendif 75071d4279SBram Moolenaarsyn keyword makeTodo TODO FIXME XXX contained 76071d4279SBram Moolenaar 77071d4279SBram Moolenaar" match escaped quotes and any other escaped character 78071d4279SBram Moolenaar" except for $, as a backslash in front of a $ does 79071d4279SBram Moolenaar" not make it a standard character, but instead it will 80071d4279SBram Moolenaar" still act as the beginning of a variable 81071d4279SBram Moolenaar" The escaped char is not highlightet currently 82071d4279SBram Moolenaarsyn match makeEscapedChar "\\[^$]" 83071d4279SBram Moolenaar 84071d4279SBram Moolenaar 85071d4279SBram Moolenaarsyn region makeDString start=+\(\\\)\@<!"+ skip=+\\.+ end=+"+ contains=makeIdent 86071d4279SBram Moolenaarsyn region makeSString start=+\(\\\)\@<!'+ skip=+\\.+ end=+'+ contains=makeIdent 87071d4279SBram Moolenaarsyn region makeBString start=+\(\\\)\@<!`+ skip=+\\.+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine 88071d4279SBram Moolenaar 89071d4279SBram Moolenaar" Syncing 90071d4279SBram Moolenaarsyn sync minlines=20 maxlines=200 91071d4279SBram Moolenaar 92071d4279SBram Moolenaar" Sync on Make command block region: When searching backwards hits a line that 93071d4279SBram Moolenaar" can't be a command or a comment, use makeCommands if it looks like a target, 94071d4279SBram Moolenaar" NONE otherwise. 95071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere NONE "^[^\t#]" 96071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]" 97071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$" 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar" Define the default highlighting. 100071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 101071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 102071d4279SBram Moolenaarif version >= 508 || !exists("did_make_syn_inits") 103071d4279SBram Moolenaar if version < 508 104071d4279SBram Moolenaar let did_make_syn_inits = 1 105071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 106071d4279SBram Moolenaar else 107071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 108071d4279SBram Moolenaar endif 109071d4279SBram Moolenaar 110071d4279SBram Moolenaar HiLink makeNextLine makeSpecial 111071d4279SBram Moolenaar HiLink makeCmdNextLine makeSpecial 112071d4279SBram Moolenaar HiLink makeSpecTarget Statement 113071d4279SBram Moolenaar if !exists("make_no_commands") 114071d4279SBram Moolenaar HiLink makeCommands Number 115071d4279SBram Moolenaar endif 116071d4279SBram Moolenaar HiLink makeImplicit Function 117071d4279SBram Moolenaar HiLink makeTarget Function 118071d4279SBram Moolenaar HiLink makeInclude Include 119071d4279SBram Moolenaar HiLink makePreCondit PreCondit 120071d4279SBram Moolenaar HiLink makeStatement Statement 121071d4279SBram Moolenaar HiLink makeIdent Identifier 122071d4279SBram Moolenaar HiLink makeSpecial Special 123071d4279SBram Moolenaar HiLink makeComment Comment 124071d4279SBram Moolenaar HiLink makeDString String 125071d4279SBram Moolenaar HiLink makeSString String 126071d4279SBram Moolenaar HiLink makeBString Function 127071d4279SBram Moolenaar HiLink makeError Error 128071d4279SBram Moolenaar HiLink makeTodo Todo 129071d4279SBram Moolenaar HiLink makeDefine Define 130071d4279SBram Moolenaar HiLink makeCommandError Error 131071d4279SBram Moolenaar HiLink makeConfig PreCondit 132071d4279SBram Moolenaar delcommand HiLink 133071d4279SBram Moolenaarendif 134071d4279SBram Moolenaar 135071d4279SBram Moolenaarlet b:current_syntax = "make" 136071d4279SBram Moolenaar 137071d4279SBram Moolenaar" vim: ts=8 138