7 Answers
7

Note that the first two solutions depend on an absence of blank lines.

If your cursor is on the line with the function name, try d}. It will delete everything to the next block (i.e. your function body).

Within the function body itself, dap will delete the 'paragraph'.

You can delete a curly brace block with da}. (If you like this syntax, I recommend Tim Pope's fantastic surround.vim, which adds more features with a similar feel).

You could also try using regular expressions to delete until the next far left-indented closing curly brace: d/^}Enter

]] and [[ move to the next/previous first-column curly brace (equivalent to using / and ? with that regex I mentioned above. Combine with the d motion, and you acheive the same effect. In addons like Python-mode, these operators are redefined to mean exactly what you're looking for: move from function to function.

How to delete the whole block, header included

If you're on the header/name, or the line before the block, da} should do the trick.

If you're below a block, you can also make use of the handy 'offset' feature of a Vim search. d?^{?-1 will delete backwards to one line before the first occurrence of a first-column opening curly brace. This command's a bit tricky to type. Maybe you could make a <leader> shortcut out of it.

Plugins

I don't do much C programming in Vim, but there are surely plugins to help with such a thing. Try Vim Scripts or their mirror at GitHub.

The simplest and most direct way way is as follows (works anywhere inside function):

v enter visual mode
{ move to first brace in function (may have to press more than once)
o exchange cursor from top to bottom of selection
} extend selection to bottom of function
d delete selected text

The complete command sequence would be v{o}d. Note that you can do other operations besides delete the same way. For example, to copy the function, use y (yank) instead of d.