这应该会让你开始。本质上,使用
backward-list
你需要给其他字符(
][}{
)暂时使用开括号和闭括号的语法。然后,您需要调整搜索和替换以使用这些字符,而不仅仅是普通的括号。
(eval-when-compile (require 'cl)) ; case
(defun replace-matching-parens (char)
(interactive (list (char-before)))
(unless (memq char '(?\) ?\] ?\}))
(error "Cursor is not after `)', `]', or `}'"))
(save-excursion
(let ((syntable (copy-syntax-table (syntax-table)))
(end-point (point)))
(modify-syntax-entry ?\[ "(" syntable)
(modify-syntax-entry ?\] ")" syntable)
(modify-syntax-entry ?\{ "(" syntable)
(modify-syntax-entry ?\} ")" syntable)
(with-syntax-table syntable
(backward-list)
(let ((start-point (point)))
(goto-char end-point)
(search-backward (format "%c" char) nil t)
(replace-match (format " \\\\right%c" char) nil nil)
(goto-char start-point)
(search-forward (format "%c" (setq newchar (case char
(?\) ?\( )
(?\] ?\[ )
(?\} ?\{ ))))
nil t)
(replace-match (format "\\\\left%c " newchar) nil nil))))))