public
Last active

Function to open folds that have less than the specified number of lines

  • Download Gist
FoldAllBut.vim
VimL
1 2 3 4 5 6 7 8 9 10
function! FoldAllBut( foldminlines )
" Description: Function to open folds that have less than the specified number of lines
" We assume that the folds are initially closed
" If a fold exists and is closed and has lesser number of lines than specified, open it and all nested folds
" Note: This does not work on nested folds
folddoclosed
\ if (( foldclosed(".") >= 0 ) && ( foldclosedend(".") - foldclosed(".") + 1 < a:foldminlines ))
\ exe 'normal! zO'
\ endif
endfunction

The silent! is required to ignore a trigger to search for the last searched pattern. TBH, I'm unable to figure out why this happens.
Thanks to dhruvsagar for suggesting using folddoclosed()

Hey kshenoy, chrisbra10 pointed out the reason why it was triggering the search here on reddit. I've updated my fork of your gist here with the fix accordingly.

function! FoldAllBut( foldminlines )
    folddoclosed 
        \ if ( (foldclosed(".") >= 0 ) && ( foldclosedend(".") - foldclosed(".") + 1 < a:foldminlines ))
        \   exe "normal! zO"
        \ endif
endfunction

Posted here just in case.

Ah, works properly now. Updated it at my end as well.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.