make.vim 6.1 KB

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