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