summaryrefslogtreecommitdiff
path: root/runtime/indent/make.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/indent/make.vim')
-rw-r--r--runtime/indent/make.vim57
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: