diff options
Diffstat (limited to 'runtime/indent/make.vim')
-rw-r--r-- | runtime/indent/make.vim | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim new file mode 100644 index 000000000..f376424ad --- /dev/null +++ b/runtime/indent/make.vim @@ -0,0 +1,57 @@ +" Vim indent file +" Language: Makefile +" Maintainer: Nikolai Weibull <source@pcppopper.org> +" URL: http://www.pcppopper.org/vim/indent/pcp/make/ +" Latest Revision: 2004-04-25 +" arch-tag: b539e147-a05c-4860-98af-1d2436db2f4b + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +let b:did_indent = 1 + +setlocal indentexpr=GetMakeIndent() +setlocal indentkeys=!^F,o,O + +" Only define the function once. +if exists("*GetMakeIndent") + finish +endif + +function s:GetStringWidth(line, str) + let end = matchend(a:line, a:str) + let width = 0 + let i = 0 + while i < end + if a:line[i] != "\t" + let width = width + 1 + else + let width = width + &ts - (width % &ts) + endif + let i = i + 1 + endwhile + return width +endfunction + +function GetMakeIndent() + if v:lnum == 1 + return 0 + endif + + let ind = indent(v:lnum - 1) + let line = getline(v:lnum - 1) + + if line == '' + let ind = 0 + elseif line =~ '^[^ \t#:][^#:]*:\{1,2}\([^=:]\|$\)' + let ind = ind + &ts + elseif line =~ '^\s*\h\w*\s*=\s*.\+\\$' + let ind = s:GetStringWidth(line, '=\s*') + endif + + return ind +endfunction + +" vim: set sts=2 sw=2: |