1" Vim indent file 2" Language: Objective-C 3" Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com> 4" Last Change: 2004 May 16 5" 6 7 8" Only load this indent file when no other was loaded. 9if exists("b:did_indent") 10 finish 11endif 12let b:did_indent = 1 13setlocal cindent 14 15" Set the function to do the work. 16setlocal indentexpr=GetObjCIndent() 17 18" To make a colon (:) suggest an indentation other than a goto/swich label, 19setlocal indentkeys-=: 20setlocal indentkeys+=<:> 21 22" Only define the function once. 23if exists("*GetObjCIndent") 24 finish 25endif 26 27function s:GetWidth(line, regexp) 28 let end = matchend(a:line, a:regexp) 29 let width = 0 30 let i = 0 31 while i < end 32 if a:line[i] != "\t" 33 let width = width + 1 34 else 35 let width = width + &ts - (width % &ts) 36 endif 37 let i = i + 1 38 endwhile 39 return width 40endfunction 41 42function s:LeadingWhiteSpace(line) 43 let end = strlen(a:line) 44 let width = 0 45 let i = 0 46 while i < end 47 let char = a:line[i] 48 if char != " " && char != "\t" 49 break 50 endif 51 if char != "\t" 52 let width = width + 1 53 else 54 let width = width + &ts - (width % &ts) 55 endif 56 let i = i + 1 57 endwhile 58 return width 59endfunction 60 61 62function GetObjCIndent() 63 let theIndent = cindent(v:lnum) 64 65 let prev_line = getline(v:lnum - 1) 66 let cur_line = getline(v:lnum) 67 68 if prev_line !~# ":" || cur_line !~# ":" 69 return theIndent 70 endif 71 72 if prev_line !~# ";" 73 let prev_colon_pos = s:GetWidth(prev_line, ":") 74 let delta = s:GetWidth(cur_line, ":") - s:LeadingWhiteSpace(cur_line) 75 let theIndent = prev_colon_pos - delta 76 endif 77 78 return theIndent 79endfunction 80