Answers:
这是一个用于关闭所有未闭合括号和其他匹配对的函数。它依赖于Emacs的sexp解析。它仅支持单字符匹配对,因此{-
将使用}
而不关闭-}
。对于Lisp,这无关紧要。
(defun close-all-parentheses ()
(interactive "*")
(let ((closing nil))
(save-excursion
(while (condition-case nil
(progn
(backward-up-list)
(let ((syntax (syntax-after (point))))
(case (car syntax)
((4) (setq closing (cons (cdr syntax) closing)))
((7 8) (setq closing (cons (char-after (point)) closing)))))
t)
((scan-error) nil))))
(apply #'insert (nreverse closing))))
([-!-foo]
,您是])
在点插入还是)
在后面插入foo]
?
([-!-foo]
,我会插入)
之后foo]
。但是我当然是错的。也许@rlazo可以详细说明。
一个非常原始的(几乎肯定是错误的)方法是
(defun buffer-needs-parens-fixing ()
(save-excursion
(condition-case nil
(check-parens)
(error (point)))))
(defun buffer-fix-parens ()
(interactive)
(while (buffer-needs-parens-fixing)
(insert ")")))
除其他限制外,它假定所有需要插入的括号为:
我想这可能仅对您的特定用例有用
]
充当超级右父母,并根据您的要求关闭所有开放的父母。