Merge branch 'hack/autopaste'
[vim-kana.git] / runtime / indent / eruby.vim
blob870fb96cb9efc987edfb6173a28c6101a2feebc3
1 " Vim indent file
2 " Language:             eRuby
3 " Maintainer:           Tim Pope <vimNOSPAM@tpope.info>
4 " Info:                 $Id: eruby.vim,v 1.8 2007/05/12 13:38:20 vimboss Exp $
5 " URL:                  http://vim-ruby.rubyforge.org
6 " Anon CVS:             See above site
7 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
9 if exists("b:did_indent")
10   finish
11 endif
13 runtime! indent/ruby.vim
14 unlet! b:did_indent
15 set indentexpr=
17 if exists("b:eruby_subtype")
18   exe "runtime! indent/".b:eruby_subtype.".vim"
19 else
20   runtime! indent/html.vim
21 endif
22 unlet! b:did_indent
24 if &l:indentexpr == ''
25   if &l:cindent
26     let &l:indentexpr = 'cindent(v:lnum)'
27   else
28     let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'
29   endif
30 endif
31 let b:eruby_subtype_indentexpr = &l:indentexpr
33 let b:did_indent = 1
35 setlocal indentexpr=GetErubyIndent()
36 setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
38 " Only define the function once.
39 if exists("*GetErubyIndent")
40   finish
41 endif
43 function! GetErubyIndent()
44   let vcol = col('.')
45   call cursor(v:lnum,1)
46   let inruby = searchpair('<%','','%>')
47   call cursor(v:lnum,vcol)
48   if inruby && getline(v:lnum) !~ '^<%'
49     let ind = GetRubyIndent()
50   else
51     exe "let ind = ".b:eruby_subtype_indentexpr
52   endif
53   let lnum = prevnonblank(v:lnum-1)
54   let line = getline(lnum)
55   let cline = getline(v:lnum)
56   if cline =~# '<%\s*\%(end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
57     let ind = ind - &sw
58   endif
59   if line =~# '\<do\%(\s*|[^|]*|\)\=\s*-\=%>'
60     let ind = ind + &sw
61   elseif line =~# '<%\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
62     let ind = ind + &sw
63   endif
64   if line =~# '^\s*<%[=#]\=\s*$' && cline !~# '^\s*end\>'
65     let ind = ind + &sw
66   endif
67   if cline =~# '^\s*-\=%>\s*$'
68     let ind = ind - &sw
69   endif
70   return ind
71 endfunction
73 " vim:set sw=2 sts=2 ts=8 noet ff=unix: