Подтвердить что ты не робот

Соответствующие фигурные скобки в Emacs

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

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

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

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

 } 

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

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

4b9b3361

Ответ 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, чтобы я мог быстро перемещаться по функциям в файле.