在GNU Emacs中,有一项功能可以在代码中突出显示相同颜色的匹配括号。
然而,当括号所包含的代码非常长时,有几个嵌套的if用于等等,那么这个功能并不真正有用,因为其中一个括号将不可见。
说我有以下内容,
for(int i=0; i< N; ++i)
{
/*Long code*/
}
如果我的光标位于}
大括号上,我希望有一些功能可以让我跳过/看到{
大括号,然后,如果满意,请回到{{ 1}}支持任何未来的编码。
这在Emacs中可行吗?
答案 0 :(得分:28)
这实际上是一个非常标准的绑定:C-M-f
和C-M-b
默认返回和转发。在大多数模式中,C-M-f
会将您带到匹配的大括号,而C-M-b
会将您带回到匹配的大括号。这也适用于引号之类的东西,几乎相同。
如果您已使用C-f
和C-b
进行导航,则很容易记住这些绑定。 (如果你不这样做,你应该这样做。)他们就像一个被表达式移动的角色向前和向后移动(这取决于模式)。
答案 1 :(得分:1)
back-sexp是我使用的。绑定到ESC-left。然后ESC-right回到你原来的位置
答案 2 :(得分:1)
如果您还没有:blink-matching-paren-distance
,那么可能有用的第一件事就是了解此选项。如果sexp非常大,则需要增加选项值,否则paren匹配会过早放弃,并且在没有不匹配时显示不匹配。
第二件事可以帮助确保blink-matching-paren
和blink-matching-paren-on-screen
都是非nil
。然后,要查看开始分隔符,只需删除结束分隔符,然后再次键入它。当你插入它时,开头就会显而易见。
答案 3 :(得分:1)
尝试显示匹配的括号代码的mic paren,即使在当前屏幕外找到也是如此。
答案 4 :(得分:1)
(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
,这样我就可以快速浏览文件中的函数。