2012-06-24 3 views
2

선택할 I가 내 .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- 표현식을 선택하려고했던 두 번째를 추가했습니다. 자, 저는 이것들 중 하나를 M-에 바인딩하고, 다른 하나는 M-에 바인딩합니다. 내가 괄호에 가서 "goto"키를 치면, 그것은 내가 원하는 것을 수행한다 - 다른 하나에 점프한다. 그 다음에 "선택"키를 누르면 지역을 표시하지 않고 똑같은 일을 반복합니다. 그 후 반복해서 누르면 괄호 사이에 점프됩니다. 그러나 그 후에 "goto"를하면, 에 해당 영역을 표시하고 반복적으로 점프하여 다시 표시를 해제합니다.

그래서 기본적으로 나는 원하는 기능을 가지고 있지만 반대로, 나는 왜 그런지 모릅니다. 누군가 여기서 일어나는 일을 설명하고 해결책을 제시 할 수 있습니까?

+0

당신이 더 나은을 명확히 할 수 내가 원했던 기능 ... 그러나 그 반대, 왜 그런지 모르겠다. 누군가가 여기에서 무슨 일이 일어나고 있는지 설명하고 해결책을 제시 할 수 있을까? " – Specksynder

답변

2

포인트를 이동하기 전에 설정 표시가 되었습니까? 그래서 기본적으로 내가 가진 하나 모든 것을 선택하고, ""하지만 무슨 일 것입니다 "고토"나는 다음 할 경우 일치하는 괄호로 이동하고 "를 선택하면 :. 어쩌면 예제 -

(defun select-in-parens() 
    (interactive) 
    (set-mark (point)) 
    (goto-match-paren 1)) 
+0

나쁘지 않습니다! 나는 s-exp가 이미 표시되어 있다면 (mark-active, then save-excursion의 테스트와 같은 것, mark가 다른 paren에 있는지를 알아내는 것과 같은 것) 또한 unmark하기를 원하는지 논쟁 중이다. 그러나 이것은 괜찮다고 생각합니다. – scry

+1

"set-mark"대신에 "push-mark"를 사용하는 것이 "정확합니다"라고 생각합니다. 언젠가 당신의 코드를 공유하고 싶다면 이것의 정확성 외에도 마크 링에있는 오래된 마크를 가지고 그 로직을 토대로 로직을 추가하는 것이 더 쉬워 질 것입니다 ... – fakedrake

+0

푸쉬 마크를 제외하고 내가 원하는 것 : 괄호 사이의 모든 것을 표시하십시오. – scry