Wikia

Vim Tips Wiki

Folding functions with the prototype included

Talk0
1,610pages on
this wiki
Revision as of 21:53, January 11, 2011 by Trcollinson (Talk | contribs)

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.

Tip 523 Printable Monobook Previous Next

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

Advertisement | Your ad here

Around Wikia's network

Random Wiki