使用emacs,如何去配对(平衡)括号

问题描述 投票:0回答:6

当光标在一个括号上时,如何跳转到配对的括号。很高兴在 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)
emacs
6个回答
75
投票

使用

C-M-right
C-M-left
(分别为
backward-sexp
forward-sexp
)转到当前表达式的开头或结尾。这适用于括号对,也适用于普通单词。


32
投票

如 emacs wiki (http://www.emacswiki.org/emacs/NavigatingParentheses) 中所述:

  • C-M-n 前向列表 在括号组上向前移动

  • C-M-pbackward-list 在括号组上向后移动

  • C-M-fforward-sexp 在平衡的表达式上向前移动

  • C-M-bbackward-sexp 在平衡表达式上向后移动

  • C-M-kkill-sexp 杀死平衡表达向前

  • C-M-SPC mark-sexp 将标记放在 sexp 的末尾。

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


23
投票

对于圆括号、大括号和中括号,只需双击即可。


9
投票

我建议使用 Ctrl+Shift+fCtrl+Shift+b,因为 Ctrl+Shift+right/left 已经绑定到我的 DE (切换到右/左桌面)。


5
投票

我使用以下小函数来实现这一点(尽管我不知道它是否符合 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)))))

5
投票

我强烈推荐SmartParens,它具有对括号结构的广泛导航和操作(即换行、引号、标签、方括号、大括号、常规括号、sexp 等),支持多种语言和结构,并且易于定制.

它还支持相当复杂的结构,在其文档中被称为hybrid-s-表达式。这使得它对于操作 C/C++、Java、JS 等语言的代码非常强大。

对于导航,使用以下内容。

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-
为前缀)即可感受到它的规模。

还有更多内容,我建议您查看维基

© www.soinside.com 2019 - 2024. All rights reserved.