make.vim 6.1 KB

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