53 lines
1.0 KiB
VimL
53 lines
1.0 KiB
VimL
" Vim indent file
|
|
" Language: Kyn
|
|
" Maintainer: Gemini
|
|
|
|
if exists("b:did_indent")
|
|
finish
|
|
endif
|
|
let b:did_indent = 1
|
|
|
|
setlocal indentexpr=GetKynIndent()
|
|
setlocal indentkeys+=={,},0)
|
|
|
|
let b:undo_indent = "setlocal indentexpr< indentkeys<"
|
|
|
|
" Only define the function once
|
|
if exists("*GetKynIndent")
|
|
finish
|
|
endif
|
|
|
|
function GetKynIndent()
|
|
" Get the line number of the current line
|
|
let lnum = v:lnum
|
|
|
|
" Get the current line
|
|
let cline = getline(lnum)
|
|
|
|
" If the current line has a '}', decrease indent
|
|
if cline =~ '^\s*}'
|
|
let lnum = prevnonblank(lnum - 1)
|
|
return indent(lnum)
|
|
endif
|
|
|
|
" Find the previous non-blank line
|
|
let lnum = prevnonblank(lnum - 1)
|
|
|
|
" At the start of the file, no indent
|
|
if lnum == 0
|
|
return 0
|
|
endif
|
|
|
|
" Get the indent of the previous line
|
|
let prev_indent = indent(lnum)
|
|
let prev_line = getline(lnum)
|
|
|
|
" If the previous line ends with '{', increase indent
|
|
if prev_line =~ '{\s*$'
|
|
return prev_indent + &shiftwidth
|
|
endif
|
|
|
|
" Otherwise, keep the same indent
|
|
return prev_indent
|
|
endfunction
|