46 lines
		
	
	
		
			892 B
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			892 B
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim indent file
 | |
| " Language:         Makefile
 | |
| " Maintainer:       Nikolai Weibull <nikolai+work.vim@bitwi.se>
 | |
| " Latest Revision:  2005-06-29
 | |
| 
 | |
| 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
 | |
| 
 | |
| function s:GetStringWidth(line, str)
 | |
|   let end = matchend(a:line, a:str)
 | |
|   let width = 0
 | |
|   for c in a:line
 | |
|     if c == "\t"
 | |
|       let width += &ts - (width % &ts)
 | |
|     else
 | |
|       let width += 1
 | |
|     endif
 | |
|   endfor
 | |
|   return width
 | |
| endfunction
 | |
| 
 | |
| function GetMakeIndent()
 | |
|   let lnum = v:lnum - 1
 | |
|   if lnum == 0
 | |
|     return 0
 | |
|   endif
 | |
| 
 | |
|   let line = getline(lnum)
 | |
|   if line == ''
 | |
|     return 0
 | |
|   elseif line =~ '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
 | |
|     return indent(lnum) + &ts
 | |
|   elseif line =~ '^\s*\h\w*\s*+\==\s*.\+\\$'
 | |
|     return s:GetStringWidth(line, '+\==\s*')
 | |
|   endif
 | |
| endfunction
 |