Emacs中的匹配大括号

Emacs中的匹配大括号,emacs,lisp,Emacs,Lisp,在GNU Emacs中,有一个功能可以突出显示相同颜色代码中的匹配括号 但是,当括号中包含的代码非常长,并且有几个嵌套的if's for's等时,由于其中一个括号不可见,因此此功能并不真正有用 假设我有以下几点: for(int i=0;i

在GNU Emacs中,有一个功能可以突出显示相同颜色代码中的匹配括号

但是,当括号中包含的代码非常长,并且有几个嵌套的if's for's等时,由于其中一个括号不可见,因此此功能并不真正有用

假设我有以下几点:

for(int i=0;i
如果我的光标在
}
大括号上,我希望有一些功能,可以让我跳转/查看
{
大括号,然后,如果满意,返回
}
大括号进行任何未来的编码


这在Emacs中可能吗

我用的是向后的sexp。绑定到左边。然后按ESC向右返回到您所在的位置。如果您还没有了解此选项,则可能会有帮助的第一件事是:
闪烁匹配paren距离。如果sexp非常大,则需要增加选项值,否则paren matching会过早放弃,并且在没有不匹配的情况下显示不匹配


第二件有帮助的事情是确保
blink matching paren
blink matching paren on screen
都是非
nil
。然后,要查看开始分隔符,只需删除结束分隔符,然后再次键入。当你插入它时,开头的那一个会很明显。

这实际上是一个非常标准的绑定:
C-M-f
C-M-b
默认情况下来回移动。在大多数模式下,
C-M-f
将带您前进到匹配的大括号,
C-M-b
将带您后退到匹配的大括号。这也适用于引号之类的东西,方式基本相同

如果您已经使用
C-f
C-b
进行导航,那么这些绑定很容易记住。(如果您不这样做,您应该这样做。)它们就像是由一个字符向前或向后移动,然后通过表达式移动(这取决于模式)。

尝试显示匹配的括号代码,即使在当前屏幕之外也可以。

(defun px match paren(arg)
(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)))))
“如果在参数上,则转到匹配的参数;否则插入。” (交互式“p”) (续) ((字符等于41(字符之前))(向后列表1)) ((字符等于125(字符之前))(向后列表1)) ((及 (字符等于123(字符之前)) (字符数等于10(字符数后))) (向后字符1)(向前列表1)) ((查看“\\s\”(转发列表1)) ((查看“\\s\”)(向后列表1)) (t(自插入命令(或arg 1‘‘‘‘‘)’)
绑定此命令的
开关将在点位于大括号之前或之后时切换打开和关闭大括号,否则插入
(很像vi的“%”)


我还将
C-
绑定到
forward-sexp
C-S-
绑定到
backward-sexp
,这样我就可以真正快速地浏览文件中的函数。

在我的情况下(在C模式下),这些函数分别绑定到M-C-f和M-C-b,这正是我想要的。谢谢我认为,如果两个大括号之间有足够的距离,它“应该”将屏幕分为两部分(第二部分为重复缓冲区)并显示两个大括号,而不是仅显示消息或导航。另请参见