2

.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)))

私はもともと最初の機能を持っていました。次に、2 番目の式を追加しました。これは、s 式全体を選択することを意図していました。現在、これらの 1 つを M-[ にバインドし、もう 1 つを M-] にバインドしています。括弧に移動して「goto」キーを押すと、それは私が望むことを行います-他のものにジャンプします。その後「選択」キーを押すと...領域をマークせずに同じことを行い、その後繰り返し押すと括弧の間をジャンプします。しかし、その後「goto」を実行すると、領域マークされ、繰り返しヒットするとジャンプしてマークが解除されます。

つまり、基本的に私は望んでいた機能を持っています...しかし逆になっていて、その理由はわかりません。誰かがここで何が起こっているのかを説明し、おそらく解決策を提供できますか?

4

1 に答える 1

2

ポイントを移動する前にマークを設定しますか?

(defun select-in-parens ()
  (interactive)
  (set-mark (point))
  (goto-match-paren 1))
于 2012-06-24T01:50:54.263 に答える