55" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim
66" Last Change: 2022 Nov 06
77" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089)
8+ " 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403)
89
910" quit when a syntax file was already loaded
1011if exists (" b:current_syntax" )
@@ -23,7 +24,7 @@ syn match makeNextLine "\\\n\s*"
2324
2425" catch unmatched define/endef keywords. endef only matches it is by itself on a line, possibly followed by a commend
2526syn region makeDefine start =" ^\s *define\s " end =" ^\s *endef\s *\( #.*\)\? $"
26- \ contains= makeStatement,makeIdent,makePreCondit,makeDefine
27+ \ contains= makeStatement,makeIdent,makePreCondit,makeDefine,makeComment,makeTargetinDefine
2728
2829if get (b: , ' make_flavor' , s: make_flavor ) == ' microsoft'
2930 " Microsoft Makefile specials
@@ -33,20 +34,26 @@ if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
3334 syn case match
3435endif
3536
36- " identifiers
37+ " identifiers; treat $$X like $X inside makeDefine
38+ syn match makeIdent " \$\$\w *"
39+ syn match makeIdent " \$\$\$\$\w *" containedin =makeDefine
40+ syn match makeIdent " \$ [^({]"
41+ syn match makeIdent " \$\$ [^({]" containedin =makeDefine
42+ syn match makeIdent " ^ *[^:#= \t ]*\s *[:+?!*]=" me =e - 2
43+ syn match makeIdent " ^ *[^:#= \t ]*\s *::=" me =e - 3
44+ syn match makeIdent " ^ *[^:#= \t ]*\s *=" me =e - 1
45+ syn match makeIdent " %"
3746if get (b: , ' make_flavor' , s: make_flavor ) == ' microsoft'
3847 syn region makeIdent start =" \$ (" end =" )" contains =makeStatement,makeIdent
3948 syn region makeIdent start =" \$ {" end =" }" contains =makeStatement,makeIdent
49+ syn region makeIdent start =" \$\$ (" end =" )" containedin =makeDefine contains =makeStatement,makeIdent
50+ syn region makeIdent start =" \$\$ {" end =" }" containedin =makeDefine contains =makeStatement,makeIdent
4051else
4152 syn region makeIdent start =" \$ (" skip =" \\ )\|\\\\ " end =" )" contains =makeStatement,makeIdent
4253 syn region makeIdent start =" \$ {" skip =" \\ }\|\\\\ " end =" }" contains =makeStatement,makeIdent
54+ syn region makeIdent start =" \$\$ (" skip =" \\ )\|\\\\ " end =" )" containedin =makeDefine contains =makeStatement,makeIdent
55+ syn region makeIdent start =" \$\$ {" skip =" \\ }\|\\\\ " end =" }" containedin =makeDefine contains =makeStatement,makeIdent
4356endif
44- syn match makeIdent " \$\$\w *"
45- syn match makeIdent " \$ [^({]"
46- syn match makeIdent " ^ *[^:#= \t ]*\s *[:+?!*]=" me =e - 2
47- syn match makeIdent " ^ *[^:#= \t ]*\s *::=" me =e - 3
48- syn match makeIdent " ^ *[^:#= \t ]*\s *=" me =e - 1
49- syn match makeIdent " %"
5057
5158" Makefile.in variables
5259syn match makeConfig " @[A-Za-z0-9_]\+ @"
@@ -55,6 +62,12 @@ syn match makeConfig "@[A-Za-z0-9_]\+@"
5562syn match makeImplicit " ^\. [A-Za-z0-9_./\t -]\+\s *:$" me =e - 1
5663syn match makeImplicit " ^\. [A-Za-z0-9_./\t -]\+\s *:[^=]" me =e - 2
5764
65+ syn region makeTargetinDefine transparent matchgroup =makeTargetinDefine
66+ \ start = " ^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\? :\? :\{ 1,2}[^:=]" rs = e - 1
67+ \ end = " [^\\ ]$"
68+ syn match makeTargetinDefine " ^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%*@-]*&\? ::\=\s *$"
69+ \ contains= makeIdent,makeSpecTarget,makeComment
70+
5871syn region makeTarget transparent matchgroup =makeTarget
5972 \ start = " ^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\? :\? :\{ 1,2}[^:=]" rs = e - 1
6073 \ end = " [^\\ ]$"
@@ -155,6 +168,7 @@ hi def link makeCommands Number
155168endif
156169hi def link makeImplicit Function
157170hi def link makeTarget Function
171+ hi def link makeTargetinDefine Function
158172hi def link makeInclude Include
159173hi def link makePreCondit PreCondit
160174hi def link makeStatement Statement
0 commit comments