let s:base = expand(":h:h") let Filter = { _, v -> stridx(v, s:base) == -1 && stridx(v, $VIMRUNTIME) == -1 && v !~ "after" } let files = filter(globpath(&rtp, 'indent/odin.vim', 1, 1), Filter) if len(files) > 0 exec 'source ' . files[0] finish endif if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'odin') == -1 if exists("b:did_indent") finish endif let b:did_indent = 1 setlocal nosmartindent setlocal nolisp setlocal autoindent setlocal indentexpr=GetOdinIndent(v:lnum) if exists("*GetOdinIndent") finish endif function! GetOdinIndent(lnum) let prev = prevnonblank(a:lnum-1) if prev == 0 return 0 endif let prevline = getline(prev) let line = getline(a:lnum) let ind = indent(prev) if prevline =~ '[({]\s*$' let ind += &sw endif if line =~ '^\s*[)}]' let ind -= &sw endif return ind endfunction endif