第一步是找到括号不匹配的 defun。
如果左括号过多,方法是:
跳转到文件末尾,按 C-u C-M-u(backward-up-list,see Moving by Parens in The GNU Emacs Manual)。
这会将光标移动到第一个括号不匹配的 defun 开头。
第二步是精确定位问题。
除了仔细阅读程序,没有绝对可靠的方法,
但现有的缩进通常能提示括号应该在的位置。
利用这一线索最简单的方法是:
用 C-M-q(indent-pp-sexp,see Multi-line Indent in The GNU Emacs Manual)重新缩进,观察哪些行发生了移动。
但先不要这样做! 请继续往下看
在重新缩进之前,确保该 defun 有足够的右括号。
否则,C-M-q 会报错,或者将文件剩余部分全部错误缩进。
因此,先移动到该 defun 末尾,并插入一个右括号。
不要用 C-M-e(end-of-defun)移动到那里,
因为在括号匹配之前,该命令也无法正常工作。
现在你可以回到该 defun 开头,按 C-M-q。
通常从某一位置到函数末尾的所有行会整体右移。
在该位置附近,很可能缺少一个右括号,或者多了一个左括号。
(但不要想当然;请仔细阅读代码确认。)
找到问题后,用 C-_(undo)撤销 C-M-q 的缩进,
因为原来的缩进通常更符合你期望的括号结构。
当你认为已经修复问题后,再次使用 C-M-q。 如果原来的缩进确实符合你期望的括号嵌套结构, 并且你已经补全了对应的括号,那么 C-M-q 不会做任何修改。