Написал:
function! CloseFunctions()
execute 'normal zE'
let i = 0
let lenline = line('$')
call inputsave()
let space = input('how many space (dafault: 2)? ')
call inputrestore()
if !strlen(space)
let space = 2
endif
while i <= lenline
let str = getline(i)
if match(str, '\S') == space
if match(str, 'function') > 0
if match(str, '{') > 0
execute i + 'G'
execute 'normal $zf%'
endif
endif
endif
let i += 1
endwhile
endfunction
Нужно забиндить на клавишу.
При вызове спрашивает: сколько отступов содержат функциональные блоки (по умолчанию 2 отступа).
После этого отыскивает все строки с заданным отступом, затем ищет в найденных слово 'function' и скобку '{'
И закрывает функциональные блоки