С помощью emacs, как перейти к спариванию (балансировке) скобок


при наведении курсора на одну скобку, как перейти к спариванию скобок. Хорошо работать в emacs-nw .

как % в Vim.

;;после того, как получил подсказку от @Lindy, @Francesco, я нашел больше:

  C-M-f     Move forward over a balanced expression
  C-M-b     Move backward over a balanced expression
  C-M-k     Kill balanced expression forward
  C-M-SPC   put the mark at the end of the sexp.
  C-M-n  Move forward over a parenthetical group 
  C-M-p  Move backward over a parenthetical group 
  ;; C-M key binding can also be done by --> ESC Control-key

  ;;And put this to .emacs, it will highlight opening/closing parens:
  (show-paren-mode 1)
6 53

6 ответов:

использовать C-M-right и C-M-left (соответственно backward-sexp и forward-sexp) для перехода к началу или концу текущего выражения. Это работает для пар скобок, но и для простых слов.

для скобок, скобок и скобок просто двойным нажатием на них делает трюк.

Как упоминалось в Emacs wiki (http://www.emacswiki.org/emacs/NavigatingParentheses):

  • C-M-n вперед-список двигаться вперед по скобочной группе

  • C-M-p назад-список перемещается назад по скобочной группе

  • C-M-f вперед-sexp двигаться вперед над сбалансированным выражением

  • C-M-b назад-sexp двигаться назад по сбалансированному выражению

  • C-M-k убить-sexp убить сбалансированное выражение вперед

  • C-M-SPC mark-sexp поставьте отметку в конце sexp.

https://superuser.com/questions/677516/how-do-i-jump-to-the-opening-or-closing-paren-brace-in-emacs

Я предлагаю C-M-f и C-M-b, так как C-M-right/left уже привязаны к моему DE (переключитесь на рабочий стол справа / слева).

Я использую следующую небольшую функцию именно для этого (хотя я не знаю, соответствует ли она поведению vim; я сам не пользователь vim):

(defun mo-match-paren (arg)
  "Go to the matching parenthesis."
  (interactive "p")
  (cond ((looking-at "\s\(") (forward-list 1) (backward-char 1))
        ((looking-at "\s\)") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

Я очень рекомендую SmartParens Он имеет обширную навигацию и манипуляции парентетических структур (т. е. обертывание, кавычки, теги, скобки, фигурные скобки, обычные скобки, sexp и т. д.) С поддержкой многих языков и структур, с легкой настройкой.

Он также поддерживает довольно сложные структуры, которые называются hybrid-s-выражения в его документации. Что делает его чрезвычайно мощным для работы с кодом в языки как C / C++, Java, JS etc.

на навигация используются следующие параметры.

sp-forward-sexp (&optional arg)                 ;; C-M-f
sp-backward-sexp (&optional arg)                ;; C-M-b
sp-down-sexp (&optional arg)                    ;; C-M-d
sp-backward-down-sexp (&optional arg)           ;; C-M-a
sp-up-sexp (&optional arg)                      ;; C-M-e
sp-backward-up-sexp (&optional arg)             ;; C-M-u
sp-next-sexp (&optional arg)                    ;; C-M-n
sp-previous-sexp (&optional arg)                ;; C-M-p
sp-beginning-of-sexp (&optional arg)            ;; C-S-d
sp-end-of-sexp (&optional arg)                  ;; C-S-a
sp-beginning-of-next-sexp (&optional arg)       ;; none
sp-beginning-of-previous-sexp (&optional arg)   ;; none
sp-end-of-next-sexp (&optional arg)             ;; none
sp-end-of-previous-sexp (&optional arg)         ;; none

обратите внимание, что он сопоставляет многие команды с эквивалентом Emacs по умолчанию. Когда он установлен, просто просмотрите его функции (все они имеют префикс sp-), чтобы получить хорошее чувство для его масштаба.

там гораздо больше, я бы рекомендовал вам иметь посмотрите на вики