diff options
Diffstat (limited to 'indent/lua.vim')
| -rw-r--r-- | indent/lua.vim | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/indent/lua.vim b/indent/lua.vim index 3c33c032..9db1d7db 100644 --- a/indent/lua.vim +++ b/indent/lua.vim @@ -1,3 +1,70 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim indent file +" Language:	Lua script +" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br> +" First Author:	Max Ischenko <mfi 'at' ukr.net> +" Last Change:	2017 Jun 13 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +  finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetLuaIndent() + +" To make Vim call GetLuaIndent() when it finds '\s*end' or '\s*until' +" on the current line ('else' is default and includes 'elseif'). +setlocal indentkeys+=0=end,0=until + +setlocal autoindent + +" Only define the function once. +if exists("*GetLuaIndent") +  finish +endif + +function! GetLuaIndent() +  " Find a non-blank line above the current line. +  let prevlnum = prevnonblank(v:lnum - 1) + +  " Hit the start of the file, use zero indent. +  if prevlnum == 0 +    return 0 +  endif + +  " Add a 'shiftwidth' after lines that start a block: +  " 'function', 'if', 'for', 'while', 'repeat', 'else', 'elseif', '{' +  let ind = indent(prevlnum) +  let prevline = getline(prevlnum) +  let midx = match(prevline, '^\s*\%(if\>\|for\>\|while\>\|repeat\>\|else\>\|elseif\>\|do\>\|then\>\)') +  if midx == -1 +    let midx = match(prevline, '{\s*$') +    if midx == -1 +      let midx = match(prevline, '\<function\>\s*\%(\k\|[.:]\)\{-}\s*(') +    endif +  endif + +  if midx != -1 +    " Add 'shiftwidth' if what we found previously is not in a comment and +    " an "end" or "until" is not present on the same line. +    if synIDattr(synID(prevlnum, midx + 1, 1), "name") != "luaComment" && prevline !~ '\<end\>\|\<until\>' +      let ind = ind + shiftwidth() +    endif +  endif + +  " Subtract a 'shiftwidth' on end, else, elseif, until and '}' +  " This is the part that requires 'indentkeys'. +  let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)') +  if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment" +    let ind = ind - shiftwidth() +  endif + +  return ind +endfunction + +endif  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'lua') == -1  " Vim indent file | 
