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