Folding functions with the prototype included
Talk0this wiki
Obsolete tip
This tip has been merged into another tip.
See VimTip108 for the current tip.
Please do not edit this tip, and do not edit the discussion page.
If anything needs to be improved, please fix VimTip108.
This tip is deprecated for the following reasons:
All functionality is better covered in syntax folding in Tip 108: Folding. Deprecated, as syntax files are now used.
created August 2, 2003 · complexity intermediate · author Matt Perry · version 6.0
I used to use folding to fold functions in C/C++ from the "{" to the "}", but I wanted a way to fold the prototype as well. Using foldexpr allows this.
function FoldBrace()
if getline(v:lnum+1)[0] == '{'
return '>1'
endif
if getline(v:lnum)[0] == '}'
return '<1'
endif
return foldlevel(v:lnum-1)
endfunction
set foldexpr=FoldBrace()
set foldmethod=expr
Note that this will only work if you put the braces on lines by themselves in the very first column, ie:
void func()
{
....
}
Comments
Johannes Zellner started to define a fold(ing?) plugin for C and C++. I've tried to enhanced it a little, but unfortunately, it is still imperfect.
See http://hermitte.free.fr/vim/ressources/vimfiles/fold/c-fold.vim
--Luc Hermitte 13:39, 7 June 2007 (UTC), August 2, 2003 18:34
That certainly is more featureful than my version. But I prefer to use foldnestmax=1 - I find it annoying to have more than 1 fold level.
I've modified my fold function to work if the { is on the same line as the function, ie:
void bla() {
}
I'd like to be able to use v:foldstart in my fold function so I can check that the } has the same indent as the line containing the {. That way I could match braces that aren't in the first column. But this is good enough for my purposes.
function FoldBrace()
if getline(v:lnum+1)[0] == '{'
return 1
endif
if getline(v:lnum) =~ '{'
return 1
endif
if getline(v:lnum)[0] =~ '}'
return '<1'
endif
return -1
endfunction