Соответствующие фигурные скобки в Emacs
В GNU Emacs имеется функция выделения совпадающих скобок в коде с тем же цветом.
Однако, когда код, заключенный в скобки, действительно длинный с несколькими вложенными if для и т.д., тогда эта функция не очень полезна, так как один из скобок не будет виден.
Скажем, у меня есть следующее:
for(int i=0; i< N; ++i)
{
/*Long code*/
}
Если мой курсор находится в скобке }
, я хотел бы иметь некоторую функцию, которая позволит мне перейти/увидеть скобку {
, а затем, если она будет выполнена, вернитесь к скобке }
для любого будущее кодирование.
Возможно ли это в Emacs?
Ответы
Ответ 1
Это действительно стандартная привязка: C-M-f
и C-M-b
для возврата и пересылки по умолчанию. В большинстве режимов C-M-f
вы перейдете к соответствующей скобке, а C-M-b
вернет вас обратно к соответствующей фигурной скобке. Это также работает для таких вещей, как кавычки, почти так же.
Эти привязки легко запомнить, если вы уже используете C-f
и C-b
для навигации. (Если вы этого не сделаете, вам нужно.) Они похожи на движение вперед и назад персонажем, поднятым до движущегося выражения (что зависит от режима).
Ответ 2
backward-sexp - это то, что я использую. связанный с ESC-left. Затем ESC-right, чтобы вернуться туда, где вы были
Ответ 3
Первое, что может помочь, это знать об этом параметре, если вы этого еще не сделали: blink-matching-paren-distance
. Если sexp очень большой, вам нужно увеличить значение параметра, иначе совпадение с парнем слишком быстро выходит из строя, и оно показывает несоответствие, когда нет рассогласования.
Вторая вещь, которая может помочь, состоит в том, чтобы быть уверенными, что blink-matching-paren
и blink-matching-paren-on-screen
оба не являются nil
. Затем, чтобы увидеть разделитель открытия, просто удалите разделитель закрытия и снова введите его. Когда вы вставьте его, откроется окно открытия.
Ответ 4
Попробуйте mic paren, который показывает соответствующий код скобок, даже если он найден за пределами текущего экрана.
Ответ 5
(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)))))
<key>
, чтобы связать эту команду, будет переключать открывающую и закрывающую фигурные скобки, если точка до или после нее, иначе вставьте <key>
(так же, как vi "%" )
Я также привязываю C-<key>
к forward-sexp
и C-S-<key>
к backward-sexp
, чтобы я мог быстро перемещаться по функциям в файле.