2004-06-13 20:20:40 +00:00
" Vim syntax file
" Language: Makefile
" Maintainer: Claudio Fleiner <claudio@fleiner.com>
" URL: http://www.fleiner.com/vim/syntax/make.vim
2012-10-05 22:26:30 +02:00
" Last Change: 2012 Oct 05
2004-06-13 20:20:40 +00:00
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists ( "b:current_syntax" )
finish
endif
2012-10-05 22:26:30 +02:00
let s :cpo_save = &cpo
set cpo &vim
2004-06-13 20:20:40 +00:00
" some special characters
2006-04-06 20:18:50 +00:00
syn match makeSpecial "^\s*[@+-]\+"
2004-06-13 20:20:40 +00:00
syn match makeNextLine "\\\n\s*"
" some directives
2006-04-06 20:18:50 +00:00
syn match makePreCondit "^ *\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)"
syn match makeInclude "^ *[-s]\=include"
syn match makeStatement "^ *vpath"
syn match makeExport "^ *\(export\|unexport\)\>"
syn match makeOverride "^ *override"
2004-06-13 20:20:40 +00:00
hi link makeOverride makeStatement
hi link makeExport makeStatement
2012-10-05 22:26:30 +02:00
" catch unmatched define/endef keywords. endef only matches it is by itself on a line, possibly followed by a commend
syn region makeDefine start = "^\s*define\s" end = "^\s*endef\s*\(#.*\)\?$" contains = makeStatement , makeIdent , makePreCondit , makeDefine
2004-06-13 20:20:40 +00:00
" Microsoft Makefile specials
syn case ignore
2006-04-06 20:18:50 +00:00
syn match makeInclude "^! *include"
syn match makePreCondit "! *\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
2004-06-13 20:20:40 +00:00
syn case match
" identifiers
syn region makeIdent start = "\$(" skip = "\\)\|\\\\" end = ")" contains = makeStatement , makeIdent , makeSString , makeDString
syn region makeIdent start = "\${" skip = "\\}\|\\\\" end = "}" contains = makeStatement , makeIdent , makeSString , makeDString
syn match makeIdent "\$\$\w*"
syn match makeIdent "\$[^({]"
2006-04-06 20:18:50 +00:00
syn match makeIdent "^ *\a\w*\s*[:+?!*]=" me = e -2
syn match makeIdent "^ *\a\w*\s*=" me = e -1
2004-06-13 20:20:40 +00:00
syn match makeIdent "%"
" Makefile.in variables
syn match makeConfig "@[A-Za-z0-9_]\+@"
" make targets
" syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$" me = e -1 nextgroup = makeSource
2012-10-05 22:26:30 +02:00
syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]" me = e -2 nextgroup = makeSource
2004-06-13 20:20:40 +00:00
syn 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
syn match makeTarget "^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains = makeIdent , makeSpecTarget skipnl nextgroup = makeCommands , makeCommandError
2006-04-06 20:18:50 +00:00
syn 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
syn 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
2004-06-13 20:20:40 +00:00
syn match makeCommandError "^\s\+\S.*" contained
syn 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
syn match makeCmdNextLine "\\\n." he = e -1 contained
" Statements / Functions (GNU make)
2008-08-06 17:06:04 +00:00
syn 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
2004-06-13 20:20:40 +00:00
" Comment
if exists ( "make_microsoft" )
2007-05-05 17:54:07 +00:00
syn match makeComment "#.*" contains = @Spell , makeTodo
2006-04-06 20:18:50 +00:00
elseif ! exists ( "make_no_comments" )
2007-05-05 17:54:07 +00:00
syn region makeComment start = "#" end = "^$" end = "[^\\]$" keepend contains = @Spell , makeTodo
syn match makeComment "#$" contains = @Spell
2004-06-13 20:20:40 +00:00
endif
syn keyword makeTodo TODO FIXME XXX contained
" match escaped quotes and any other escaped character
" except for $, as a backslash in front of a $ does
" not make it a standard character, but instead it will
" still act as the beginning of a variable
" The escaped char is not highlightet currently
syn match makeEscapedChar "\\[^$]"
syn region makeDString start = + \( \\\) \@< ! "+ skip=+\\.+ end=+" + contains = makeIdent
syn region makeSString start = + \( \\\) \@< ! '+ skip=+\\.+ end=+' + contains = makeIdent
syn region makeBString start = + \( \\\) \@< ! `+ skip = + \\.+ end = + `+ contains = makeIdent , makeSString , makeDString , makeNextLine
" Syncing
syn sync minlines = 20 maxlines = 200
" Sync on Make command block region: When searching backwards hits a line that
" can't be a command or a comment, use makeCommands if it looks like a target,
" NONE otherwise.
syn sync match makeCommandSync groupthere NONE "^[^\t#]"
syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"
syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$"
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version > = 508 | | ! exists ( "did_make_syn_inits" )
if version < 508
let did_make_syn_inits = 1
command - nargs = + HiLink hi link < args >
else
command - nargs = + HiLink hi def link < args >
endif
HiLink makeNextLine makeSpecial
HiLink makeCmdNextLine makeSpecial
HiLink makeSpecTarget Statement
if ! exists ( "make_no_commands" )
HiLink makeCommands Number
endif
HiLink makeImplicit Function
HiLink makeTarget Function
HiLink makeInclude Include
HiLink makePreCondit PreCondit
HiLink makeStatement Statement
HiLink makeIdent Identifier
HiLink makeSpecial Special
HiLink makeComment Comment
HiLink makeDString String
HiLink makeSString String
HiLink makeBString Function
HiLink makeError Error
HiLink makeTodo Todo
HiLink makeDefine Define
HiLink makeCommandError Error
HiLink makeConfig PreCondit
delcommand HiLink
endif
let b :current_syntax = "make"
2012-10-05 22:26:30 +02:00
let &cpo = s :cpo_save
unlet s :cpo_save
2004-06-13 20:20:40 +00:00
" vim: ts=8