14

While editing C or C++ files in emacs, I'd like to be able to go to the beginning of the containing block of code. I was expecting to find a c-beginning-of-block function, but alas, no such function exists (to my knowledge). For example, I might be editing the following ugly C code:

void myFunction()
{
  if (something) { //<--- I want to jump to this brace!
    // do lots of stuff
    if (stuff) {
      // stuff
    }
    // more stuff
    // ...

    // I want to put my cursor somewhere on this line <---
    // (anywhere just outside the following if) and call c-beginning-of-block
    // and jump to the brace marked above (skipping "sibling" statements)
    if (pizza_is_good) {
      // do something
      // wait, where am I?
    }
    // way more stuff
    // ...
    if (i_love_pizza) {
      // eat pizza
    }
  }
}

I would be very surprised if this isn't already part of emacs, I just can't find it anywhere...

fortran-mode has fortran-beginning-of-block

promela-mode has promela-find-start-of-containing-block

mgalgs
  • 2,312
  • 4
  • 23
  • 33

1 Answers1

18

Try backward-up-list, bound by default to C-M-u.

scottfrazer
  • 451
  • 3
  • 3
  • 3
    and C-M-n (forward-list) jumps to the end of block – Francois Jun 25 '12 at 16:13
  • To keep jumping within the block from beginning to end, this does not solve the purpose because when I try to move to end of block ```C-M-n``` takes me to end of ```)``` of a function call. – dknight Feb 24 '15 at 06:07
  • 2
    There are four related commands: C-M-n (next) and C-M-p (previous), which take you backwards and forwards over whole parenthesis blocks, and C-M-u (up) and C-M-d (down) which take you one level up or down the nesting of parentheses. (see [docs](https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Parens.html)) So to go to the end of the current block, you need C-M-u C-M-n – rbennett485 May 19 '16 at 13:36