19.3.1 左括号过多

第一步是找到括号不匹配的 defun。 如果左括号过多,方法是: 跳转到文件末尾,按 C-u C-M-ubackward-up-list,see Moving by Parens in The GNU Emacs Manual)。 这会将光标移动到第一个括号不匹配的 defun 开头。

第二步是精确定位问题。 除了仔细阅读程序,没有绝对可靠的方法, 但现有的缩进通常能提示括号应该在的位置。 利用这一线索最简单的方法是: 用 C-M-qindent-pp-sexp,see Multi-line Indent in The GNU Emacs Manual)重新缩进,观察哪些行发生了移动。 但先不要这样做! 请继续往下看

在重新缩进之前,确保该 defun 有足够的右括号。 否则,C-M-q 会报错,或者将文件剩余部分全部错误缩进。 因此,先移动到该 defun 末尾,并插入一个右括号。 不要用 C-M-eend-of-defun)移动到那里, 因为在括号匹配之前,该命令也无法正常工作。

现在你可以回到该 defun 开头,按 C-M-q。 通常从某一位置到函数末尾的所有行会整体右移。 在该位置附近,很可能缺少一个右括号,或者多了一个左括号。 (但不要想当然;请仔细阅读代码确认。) 找到问题后,用 C-_undo)撤销 C-M-q 的缩进, 因为原来的缩进通常更符合你期望的括号结构。

当你认为已经修复问题后,再次使用 C-M-q。 如果原来的缩进确实符合你期望的括号嵌套结构, 并且你已经补全了对应的括号,那么 C-M-q 不会做任何修改。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike