| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim indent file | 
					
						
							| 
									
										
										
										
											2006-04-30 18:54:39 +00:00
										 |  |  | " Language:	    Shell Script | 
					
						
							| 
									
										
										
										
											2006-04-21 22:12:41 +00:00
										 |  |  | " Maintainer:       Nikolai Weibull <now@bitwi.se> | 
					
						
							|  |  |  | " Latest Revision:  2006-04-19 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=GetShIndent() | 
					
						
							|  |  |  | setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done | 
					
						
							|  |  |  | setlocal indentkeys-=:,0# | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if exists("*GetShIndent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | function GetShIndent() | 
					
						
							|  |  |  |   let lnum = prevnonblank(v:lnum - 1) | 
					
						
							|  |  |  |   if lnum == 0 | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " Add a 'shiftwidth' after if, while, else, case, until, for, function() | 
					
						
							|  |  |  |   " Skip if the line also contains the closure for the above | 
					
						
							|  |  |  |   let ind = indent(lnum) | 
					
						
							|  |  |  |   let line = getline(lnum) | 
					
						
							|  |  |  |   if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>' | 
					
						
							| 
									
										
										
										
											2006-04-30 18:54:39 +00:00
										 |  |  | 	\ || line =~ '^\s*\<\k\+\>\s*()\s*{' | 
					
						
							|  |  |  | 	\ || line =~ '^\s*{' | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$' | 
					
						
							|  |  |  |       let ind = ind + &sw | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " Subtract a 'shiftwidth' on a then, do, else, esac, fi, done | 
					
						
							|  |  |  |   " Retain the indentation level if line matches fin (for find) | 
					
						
							|  |  |  |   let line = getline(v:lnum) | 
					
						
							|  |  |  |   if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}') | 
					
						
							| 
									
										
										
										
											2006-04-30 18:54:39 +00:00
										 |  |  | 	\ && line !~ '^\s*fi[ln]\>' | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     let ind = ind - &sw | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ind | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-29 22:40:58 +00:00
										 |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  | unlet s:cpo_save |