1" Vim indent file 2" Language: tf (TinyFugue) 3" Maintainer: Christian J. Robinson <[email protected]> 4" URL: http://www.vim.org/scripts/script.php?script_id=174 5" Last Change: 2017 Feb 25 6 7" Only load this indent file when no other was loaded. 8if exists("b:did_indent") 9 finish 10endif 11let b:did_indent = 1 12 13setlocal indentexpr=GetTFIndent() 14setlocal indentkeys-=0{,0} indentkeys-=0# indentkeys-=: 15setlocal indentkeys+==/endif,=/then,=/else,=/done,0; 16 17" Only define the function once: 18if exists("*GetTFIndent") 19 finish 20endif 21 22function GetTFIndent() 23 " Find a non-blank line above the current line: 24 let lnum = prevnonblank(v:lnum - 1) 25 26 " No indent for the start of the file: 27 if lnum == 0 28 return 0 29 endif 30 31 let ind = indent(lnum) 32 let line = getline(lnum) 33 34 " No indentation if the previous line didn't end with "\": 35 " (Could be annoying, but it lets you know if you made a mistake.) 36 if line !~ '\\$' 37 return 0 38 endif 39 40 if line =~ '\(/def.*\\\|/for.*\(%;\s*\)\@\<!\\\)$' 41 let ind = ind + shiftwidth() 42 elseif line =~ '\(/if\|/else\|/then\)' 43 if line !~ '/endif' 44 let ind = ind + shiftwidth() 45 endif 46 elseif line =~ '/while' 47 if line !~ '/done' 48 let ind = ind + shiftwidth() 49 endif 50 endif 51 52 let line = getline(v:lnum) 53 54 if line =~ '\(/else\|/endif\|/then\)' 55 if line !~ '/if' 56 let ind = ind - shiftwidth() 57 endif 58 elseif line =~ '/done' 59 if line !~ '/while' 60 let ind = ind - shiftwidth() 61 endif 62 endif 63 64 " Comments at the beginning of a line: 65 if line =~ '^\s*;' 66 let ind = 0 67 endif 68 69 70 return ind 71 72endfunction 73