For example, I use the macro `zEkzfggj%jzfG` (minus backticks) to fold everything above and below the current { and it's corresponding C block.
And now that I see all of it typed out like that, I'm not sure myself if this is an argument for Vim, or a parody of an argument for it ;)
Rather I just pressed qf (which starts recording a macro to 'f'), then preformed the sequence of commands that would need to be done to do what I wanted. You do it step by step while watching what's actually going on, so it's not as hard as it seems. Then from then on I can just press @f to do what would normally take all of those keys.
broken down, this is how the macro works:
zE - clear other folds
k - up
zf - start creating a fold from here to...
gg - ...the top of the document
j - down
% - go to the matching bracket
j - down
zf - start creating a fold from here to...
G - ...the bottom of the document
I don't really remember why those ups and downs were needed, maybe they're not. Just how I typed it out at the time.
N.B. When I say blocks I mean the standard understanding of blocks i.e. the code between two curly braces, not ruby blocks which are roughly equivalent to anonymous functions.
I just use matchit (http://www.vim.org/scripts/script.php?script_id=39) and then I can do v% to visually select everything to the end of a block.