codekingpro/portable-devtools
114k
1" Vim indent file2" Language: eRuby3" Maintainer: Tim Pope <vimNOSPAM@tpope.org>4" URL: https://github.com/vim-ruby/vim-ruby5" Last Change: 2019 Jan 066 7if exists("b:did_indent")8 finish9endif10 11runtime! indent/ruby.vim12unlet! b:did_indent13setlocal indentexpr=14 15if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=# 'eruby'16 exe "runtime! indent/".b:eruby_subtype.".vim"17else18 runtime! indent/html.vim19endif20unlet! b:did_indent21 22" Force HTML indent to not keep state.23let b:html_indent_usestate = 024 25if &l:indentexpr == ''26 if &l:cindent27 let &l:indentexpr = 'cindent(v:lnum)'28 else29 let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'30 endif31endif32let b:eruby_subtype_indentexpr = &l:indentexpr33 34let b:did_indent = 135 36setlocal indentexpr=GetErubyIndent()37setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when38 39" Only define the function once.40if exists("*GetErubyIndent")41 finish42endif43 44" this file uses line continuations45let s:cpo_sav = &cpo46set cpo&vim47 48function! GetErubyIndent(...)49 " The value of a single shift-width50 if exists('*shiftwidth')51 let sw = shiftwidth()52 else53 let sw = &sw54 endif55 56 if a:0 && a:1 == '.'57 let v:lnum = line('.')58 elseif a:0 && a:1 =~ '^\d'59 let v:lnum = a:160 endif61 let vcol = col('.')62 call cursor(v:lnum,1)63 let inruby = searchpair('<%','','%>','W')64 call cursor(v:lnum,vcol)65 if inruby && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'66 let ind = GetRubyIndent(v:lnum)67 else68 exe "let ind = ".b:eruby_subtype_indentexpr69 70 " Workaround for Andy Wokula's HTML indent. This should be removed after71 " some time, since the newest version is fixed in a different way.72 if b:eruby_subtype_indentexpr =~# '^HtmlIndent('73 \ && exists('b:indent')74 \ && type(b:indent) == type({})75 \ && has_key(b:indent, 'lnum')76 " Force HTML indent to not keep state77 let b:indent.lnum = -178 endif79 endif80 let lnum = prevnonblank(v:lnum-1)81 let line = getline(lnum)82 let cline = getline(v:lnum)83 if cline =~# '^\s*<%[-=]\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%([-=]\=%>\|$\)'84 let ind = ind - sw85 endif86 if line =~# '\S\s*<%[-=]\=\s*\%(}\|end\).\{-\}\s*\%([-=]\=%>\|$\)'87 let ind = ind - sw88 endif89 if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*[-=]\=%>'90 let ind = ind + sw91 elseif line =~# '<%[-=]\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'92 let ind = ind + sw93 endif94 if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'95 let ind = ind + sw96 endif97 if line !~# '^\s*<%' && line =~# '%>\s*$' && line !~# '^\s*end\>'98 \ && synID(v:lnum, match(cline, '\S') + 1, 1) != hlID('htmlEndTag')99 let ind = ind - sw100 endif101 if cline =~# '^\s*[-=]\=%>\s*$'102 let ind = ind - sw103 endif104 return ind105endfunction106 107let &cpo = s:cpo_sav108unlet! s:cpo_sav109 110" vim:set sw=2 sts=2 ts=8 noet:111 