Mercurial > hg > RemoteEditor > vim7
diff runtime/indent/tf.vim @ 5:db46d51a3939
Initial revision
author | axmo |
---|---|
date | Wed, 13 Aug 2008 17:36:09 +0900 |
parents | |
children | c16898406ff2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/indent/tf.vim Wed Aug 13 17:36:09 2008 +0900 @@ -0,0 +1,72 @@ +" Vim indent file +" Language: tf (TinyFugue) +" Maintainer: Christian J. Robinson <infynity@onewest.net> +" URL: http://www.infynity.spodzone.com/vim/indent/tf.vim +" Last Change: 2002 May 29 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetTFIndent() +setlocal indentkeys-=0{,0} indentkeys-=0# indentkeys-=: +setlocal indentkeys+==/endif,=/then,=/else,=/done,0; + +" Only define the function once: +if exists("*GetTFIndent") + finish +endif + +function GetTFIndent() + " Find a non-blank line above the current line: + let lnum = prevnonblank(v:lnum - 1) + + " No indent for the start of the file: + if lnum == 0 + return 0 + endif + + let ind = indent(lnum) + let line = getline(lnum) + + " No indentation if the previous line didn't end with "\": + " (Could be annoying, but it lets you know if you made a mistake.) + if line !~ '\\$' + return 0 + endif + + if line =~ '\(/def.*\\\|/for.*\(%;\s*\)\@\<!\\\)$' + let ind = ind + &sw + elseif line =~ '\(/if\|/else\|/then\)' + if line !~ '/endif' + let ind = ind + &sw + endif + elseif line =~ '/while' + if line !~ '/done' + let ind = ind + &sw + endif + endif + + let line = getline(v:lnum) + + if line =~ '\(/else\|/endif\|/then\)' + if line !~ '/if' + let ind = ind - &sw + endif + elseif line =~ '/done' + if line !~ '/while' + let ind = ind - &sw + endif + endif + + " Comments at the beginning of a line: + if line =~ '^\s*;' + let ind = 0 + endif + + + return ind + +endfunction