diff options
Diffstat (limited to 'indent')
-rw-r--r-- | indent/odin.vim | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/indent/odin.vim b/indent/odin.vim new file mode 100644 index 00000000..b00b5387 --- /dev/null +++ b/indent/odin.vim @@ -0,0 +1,41 @@ +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 |