Acho que você deve definir sua própria função de dobra, assim você terá mais controle sobre o que é dobrado quando. A seguinte função de dobra function
/ end function
insensível, e deve ser bastante fácil de ajustar para outros requisitos:
function! InformixFold()
let line = getline(v:lnum)
let prev_line = getline(v:lnum-1)
if match(line, '^\s*function\s*$') >= 0
return 1
elseif match(prev_line, '^\s*end\s*function\s*$') >= 0
return 0
else
return "="
endfunction
Em seguida, defina foldmethod
para expr
e foldexpr
para a função:
set foldmethod=expr
set foldexpr=InformixFold()
Veja help fold-expr
para mais.
"Screenshot":
- FUNCTION
| FOR ...
| ...
| END FOR
| END FUNCTION
+ +-- 5 lines: FUNCTION------------------------------------------------------