mirror of
https://github.com/vim/vim.git
synced 2025-11-13 22:54:27 -05:00
75 lines
1.9 KiB
VimL
75 lines
1.9 KiB
VimL
|
|
" Matlab indent file
|
|||
|
|
" Language: Matlab
|
|||
|
|
" Maintainer: Christophe Poucet <christophe.poucet@pandora.be>
|
|||
|
|
" Last Change: 6 January, 2001
|
|||
|
|
|
|||
|
|
" Only load this indent file when no other was loaded.
|
|||
|
|
if exists("b:did_indent")
|
|||
|
|
finish
|
|||
|
|
endif
|
|||
|
|
let b:did_indent = 1
|
|||
|
|
|
|||
|
|
" Some preliminary setting
|
|||
|
|
setlocal indentkeys=!,o,O=end,=case,=else,=elseif,=otherwise,=catch
|
|||
|
|
|
|||
|
|
|
|||
|
|
setlocal indentexpr=GetMatlabIndent(v:lnum)
|
|||
|
|
|
|||
|
|
" Only define the function once.
|
|||
|
|
if exists("*GetMatlabIndent")
|
|||
|
|
finish
|
|||
|
|
endif
|
|||
|
|
|
|||
|
|
function GetMatlabIndent(lnum)
|
|||
|
|
" Give up if this line is explicitly joined.
|
|||
|
|
if getline(a:lnum - 1) =~ '\\$'
|
|||
|
|
return -1
|
|||
|
|
endif
|
|||
|
|
|
|||
|
|
" Search backwards for the first non-empty line.
|
|||
|
|
let plnum = a:lnum - 1
|
|||
|
|
while plnum > 0 && getline(plnum) =~ '^\s*$'
|
|||
|
|
let plnum = plnum - 1
|
|||
|
|
endwhile
|
|||
|
|
|
|||
|
|
if plnum == 0
|
|||
|
|
" This is the first non-empty line, use zero indent.
|
|||
|
|
return 0
|
|||
|
|
endif
|
|||
|
|
|
|||
|
|
let curind = indent(plnum)
|
|||
|
|
|
|||
|
|
" If the current line is a stop-block statement...
|
|||
|
|
if getline(v:lnum) =~ '^\s*\(end\|else\|elseif\|case\|otherwise\|catch\)\>'
|
|||
|
|
" See if this line does not follow the line right after an openblock
|
|||
|
|
if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
|
|||
|
|
" See if the user has already dedented
|
|||
|
|
elseif indent(v:lnum) > curind - &sw
|
|||
|
|
" If not, recommend one dedent
|
|||
|
|
let curind = curind - &sw
|
|||
|
|
else
|
|||
|
|
" Otherwise, trust the user
|
|||
|
|
return -1
|
|||
|
|
endif
|
|||
|
|
" endif
|
|||
|
|
|
|||
|
|
" If the previous line opened a block
|
|||
|
|
elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
|
|||
|
|
" See if the user has already indented
|
|||
|
|
if indent(v:lnum) < curind + &sw
|
|||
|
|
"If not, recommend indent
|
|||
|
|
let curind = curind + &sw
|
|||
|
|
else
|
|||
|
|
" Otherwise, trust the user
|
|||
|
|
return -1
|
|||
|
|
endif
|
|||
|
|
endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
" If we got to here, it means that the user takes the standardversion, so we return it
|
|||
|
|
return curind
|
|||
|
|
endfunction
|
|||
|
|
|
|||
|
|
" vim:sw=2
|