我的 .emacs.d 中有以下 defun:
;;; http://emacswiki.org/emacs/ParenthesisMatching
(defun goto-match-paren (arg)
"Go to the matching if on (){}[], similar to vi style of % "
(interactive "p")
;; first, check for "outside of bracket" positions expected by forward-sexp, etc.
(cond ((looking-at "[\[\(\{]") (forward-sexp))
((looking-back "[\]\)\}]" 1) (backward-sexp))
;; now, try to succeed from inside of a bracket
((looking-at "[\]\)\}]") (forward-char) (backward-sexp))
((looking-back "[\[\(\{]" 1) (backward-char) (forward-sexp))
(t nil)))
(defun select-in-parens ()
(interactive)
(goto-match-paren 1)
(set-mark (point)))
我本来只有第一个功能。然后我添加了第二个,我打算选择整个 s 表达式。现在,我将其中一个绑定(bind)到 M-[,另一个绑定(bind)到 M-]。当我转到一个括号并按下“goto”键时,它会执行我想要的操作 - 跳转到另一个括号。如果我在那之后按下“选择”键...它会执行相同的操作,而不标记该区域,然后重复按下它会使其在括号之间跳转。但如果我在那之后执行“goto”,它会标记该区域,并且反复点击它会跳回并取消标记。
所以基本上我有我想要的功能...但是相反,我不知道为什么。有人可以解释一下这里发生了什么,并可能提供解决方案吗?
最佳答案
也许在移动点之前设置标记?
(defun select-in-parens ()
(interactive)
(set-mark (point))
(goto-match-paren 1))
关于Emacs - 在括号之间选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174242/