Emacs 中匹配括号的命令是什么?

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

Emacs 中匹配括号的命令是什么(相当于 Vim 中的

%
命令)?

linux emacs pattern-matching editor gnu
6个回答

40
投票

C-M-f
M-x forward-sexp
,前进至右大括号,或前进至下一组大括号中的左大括号。
C-M-b
M-x backward-sexp
,向后移动到左大括号,或移动到下一组大括号中的右大括号。这些命令适用于括号、方括号、大括号、尖括号等,并且可以自定义以识别其他分隔符。


10
投票

只是为了完成最后的回复。我使用

C-M-n
进行前向匹配,使用
C-M-u
进行后向匹配。
C-M
映射到 Windows 键盘上的 Esc+Ctrl


3
投票

还有一个

show-paren-mode
。对于导航,我认为更好
C-M-n
C-M-n


1
投票

https://github.com/redguardtoo/evil-matchit

在开发evil-matchit之前我阅读了vim matchit代码。 ill-matchit 现在提供的功能比原来的 vim matchit 多得多。

此外,您可以轻松扩展邪恶的matchit以支持您自己的~/.emacs中的任何新语言。


0
投票

您可以使用
%

Emacs 提供了多种选择,但就我个人而言,我使用 %。只需将其添加到您的 .emacs 文件中即可:

;; Emacs FAQ #5.25: By an unknown contributor, modified to only match braces.
(global-set-key "%" 'match-brace)
(defun match-brace (arg)
  "Go to the matching curly bracket if on one; otherwise insert %."
  (interactive "p")
  (cond ((looking-at "\{") (forward-list 1) (backward-char 1))
        ((looking-at "\}") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

讨论

如果光标位于

{
}
上并且按下 %,则光标将移动到匹配的大括号。否则,它只会输入
%
Emacs FAQ 中的原始代码实际上也适用于(括号)和 [方括号],但我将其更改为仅大括号 {"braces"},以便使用类 C 语言进行编程。

与 Vim 一样,第二次点击

%
将跳回到原来的括号。此外,此代码将光标直接定位在右括号的顶部,而不是后面的一个字符(如下面的一些替代方案所示)。

替代品

Emacs 是为 Lisp 编程语言设计的,该语言因大量使用嵌套括号而闻名。由于这一传统,Emacs 有多种方法来遍历匹配的括号。与点击

%
不同,光标不需要位于括号上才能使用这些。 C-M-n、C-M-p:按一组平衡括号移动

Ctrl

MetanCtrlMetap 将光标移动穿过一组平衡的括号。如果光标位于左括号的左侧或顶部,则 C-M-n 将移动到右括号之外的一个字符。当光标位于右括号的右侧(但不是在其顶部)时,C-M-p 会发生相反的情况。

注意与 Vim 的区别!

Emacs 在语义上更有意义 — 您下一个类型将始终处于与按下按键之前相同的嵌套级别 — 但 Vim 在人类视觉认知方面胜出 — 匹配的括号通过以下方式突出显示光标。此外,Vim 只需按两次 % 即可轻松跳回。

Emacs 的选择也不全是坏事。通过在括号结构中保持同一级别,可以很容易地以树的形式浏览嵌套代码,因为重复点击相同的键会访问下一个同级节点。 (尝试使用一个大的 JSON 文件。)

C-M-f、C-M-b:按平衡的“性”移动

Ctrl

MetafCtrlMetab 在编程表达式上移动光标。这不仅适用于括号,它还跳过了其他可聚集的单元,例如数字或标识符。除非您使用 Lisp 进行编程,否则没有理由使用它来代替 C-M-n 和 C-M-p。 C-M-d、C-M-u:在嵌套深度中上下移动

Ctrl

Metad 将光标向前移动,就在下一个左括号之后(更深一层)。 CtrlMetau 向后移动光标,落在第一个前左括号的顶部(树结构中的上一层)。请注意,当光标位于左括号上时,从技术上讲,它位于嵌套的“外部”,因为您键入的任何内容都将插入到括号之前。相反,当光标位于右括号上时,它位于 inside 同样,这对于导航树结构代码和数据比简单地匹配括号更有用。然而,我确实注意到,这里的答案之一实际上建议将 C-M-u 与 C-M-n 结合使用,大概是因为当光标直接位于括号顶部时,这两种方法都可以使用,就像在 Vim 中一样。然而,它们并不是彼此相反的,并且一个接一个地使用不会让您回到开始的地方。

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