2011-12-25 5 views
18

В GNU Emacs имеется функция выделения совпадающих скобок в коде с тем же цветом.Соответствующие фигурные скобки в Emacs

Однако, когда код, заключенный в скобки, действительно длинный с несколькими вложенными if и т. Д., Тогда эта функция не очень полезна, так как один из скобок не будет виден.

Скажем, у меня есть следующие,

for(int i=0; i< N; ++i) 
{ 
    /*Long code*/ 

} 

Если мой курсор находится на } скобкой Я хотел бы иметь некоторую функцию, которая позволит мне прыгать/увидеть { скобку, а затем, если удовлетворено, вернитесь в скобу } для любого будущего кодирования.

Возможно ли это в Emacs?

+0

См. Также http://stackoverflow.com/questions/9845661/with-emacs-how-to-go-to-the-pairing-balancing-parentheses –

ответ

25

Это действительно стандартное связывание: C-M-f и C-M-b для возврата назад и вперед по умолчанию. В большинстве режимов C-M-f доставит вас вперед к соответствующей фигурной скобке, а C-M-b перенесет вас обратно к соответствующей фигурной скобе. Это также работает для таких вещей, как кавычки, почти так же.

Эти привязки легко запомнить, если вы уже используете C-f и C-b для навигации. (Если вы этого не сделаете, вы должны.) Они похожи на то, как двигаться вперед и назад персонажем, поднятым до движения по выражению (которое зависит от режима).

+0

Именно то, что я искал. Благодаря! – smilingbuddha

+0

Я думаю, что в случае достаточного расстояния между двумя фигурными скобками вместо того, чтобы просто отображать сообщение или навигацию, он должен также разделить экран на 2 части (с дублирующимся буфером во 2-й части) и показать обе фигурные скобки. – aartist

1

задний-sexp - это, что использую. связанный с ESC-left. Затем ESC-right, чтобы вернуться туда, где вы были

+2

В моем случае (в c-режиме) эти функции соответственно связанный с MCf и MCb – Daimrod

1

Первое, что может помочь, это знать об этом варианте, если вы еще этого не сделали: blink-matching-paren-distance. Если sexp очень большой, вам нужно увеличить значение параметра, иначе совпадение с парнем слишком быстро выходит из строя, и оно показывает несоответствие, когда нет рассогласования.

Вторая вещь, которая может помочь, состоит в том, чтобы убедиться, что blink-matching-paren и blink-matching-paren-on-screen оба являются не nil. Затем, чтобы увидеть разделитель открытия, просто удалите разделитель закрытия и снова введите его. Когда вы вставьте его, откроется окно открытия.

1

Попробуйте mic paren, который отображает соответствующий код скобок, даже если найден вне текущего экрана.

1
(defun px-match-paren (arg) 
    "Go to the matching paren if on a paren; otherwise insert <key>." 
    (interactive "p") 
    (cond 
    ((char-equal 41 (char-before)) (backward-list 1)) 
    ((char-equal 125 (char-before)) (backward-list 1)) 
    ((and 
    (char-equal 123 (char-before)) 
    (char-equal 10 (char-after))) 
    (backward-char 1) (forward-list 1)) 
    ((looking-at "\\s\(") (forward-list 1)) 
    ((looking-at "\\s\)") (backward-list 1)) 
    (t (self-insert-command (or arg 1))))) 

The <key> Ведьма свяжешь эта команда будет переключать открытия и закрытия скобки, если точка находится перед или после него, в противном случае вставить <key> (так же, как VI, «%»)

Я также связать C-<key> с forward-sexp и C-S-<key> - backward-sexp, поэтому я могу очень быстро перемещаться по функциям в файле.