" Vim indent file " Language: Makefile " Maintainer: Nikolai Weibull " Latest Revision: 2006-04-19 if exists("b:did_indent") finish endif let b:did_indent = 1 setlocal indentexpr=GetMakeIndent() setlocal indentkeys=!^F,o,O if exists("*GetMakeIndent") finish endif let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)' let s:continuation_rx = '\\$' let s:assignment_rx = '^\s*\h\w*\s*+\==\s*\zs.*\\$' function GetMakeIndent() let lnum = v:lnum - 1 if lnum == 0 return 0 endif let line = getline(lnum) let ind = indent(lnum) if line =~ s:rule_rx return ind + &ts elseif line =~ s:continuation_rx while lnum > 0 && line =~ s:continuation_rx && line !~ s:assignment_rx let lnum -= 1 let line = getline(lnum) endwhile if line =~ s:assignment_rx call cursor(lnum, 1) return search(s:assignment_rx, 'W') != 0 ? virtcol('.') - 1 : 0 else return 0 endif else let pnum = lnum - 1 if pnum == 0 return ind endif return getline(pnum) =~ s:continuation_rx ? 0 : ind endif endfunction