emacs - C / C ++ przeskakuje na początek bloku zawierającego

10

Podczas edytowania plików C lub C ++ w emacsie chciałbym móc przejść do początku zawierającego blok kodu. Spodziewałem się znaleźć funkcję początku bloku c, ale niestety, taka funkcja nie istnieje (o ile mi wiadomo). Na przykład mógłbym edytować następujący brzydki kod C:

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
    }
  }
}

Byłbym bardzo zaskoczony, jeśli nie jest to już część emacsa, po prostu nie mogę go nigdzie znaleźć ...

tryb fortran ma fortran-beginning-of-block

tryb promela ma promela-find-start-of-containing-block

mgalgs
źródło

Odpowiedzi:

14

Spróbuj backward-up-list, domyślnie związany z C-M-u.

scottfrazer
źródło
1
a CMn (lista do przodu) przeskakuje na koniec bloku
Francois,
Aby przeskakiwać w obrębie bloku od początku do końca, nie rozwiązuje to celu, ponieważ kiedy próbuję przejść do końca bloku, C-M-nzabiera mnie do końca )wywołania funkcji.
dknight
1
Istnieją cztery pokrewne polecenia: CMn (następny) i CMp (poprzedni), które prowadzą do tyłu i do przodu przez całe bloki nawiasów, oraz CMu (w górę) i CMd (w dół), które przenoszą cię o jeden poziom w górę lub w dół w zagnieżdżaniu nawiasów. (patrz dokumenty ) Aby przejść do końca bieżącego bloku, potrzebujesz CMu CMn
rbennett485