2009-06-21 6 views
23

내가 빔에 대한 플러그인을 본 적이 자동으로 입력 닫는 괄호 '(', '{'등의 예를 들어Emacs에서 중괄호를 자동으로 닫으시겠습니까?

을 추가 (this 게시물에서 발견) AutoClose라고, 나는 (다음 입력 할 때 |입니다 커서) : 나는 닫는 ) 싶습니다

int main(| 

나를 위해 자동으로 삽입되는 :

int main(|) 

사람은 시뮬레이션을 알고 있나요 이맥스 용 ilar 기능 - 이번에는 Google에서 실패했습니다!

답변

13

여기도 'paredit입니다. cheat sheet에는 사용 가능한 모든 명령이 표시됩니다. 다른 답변에서 제안 된 전기 모드보다 더 좋아지게됩니다. paredit은()에만 적용되기 때문에 사용자의 요구 사항을 파악하지 못할 수도 있습니다.

하지만 솔직하게 말하면 괄호를 둘러싼 묶음이 있습니다. 위키에는 모두 listed here이 있습니다. 귀하의 질문에 주소 지정 모드는 다음과 같습니다

+3

http://www.emacswiki.org/emacs/AutoPairs도 참조하십시오. –

+0

그리고 뭔가 더 필요한 것이 있다면 ... 많은 편집자는 자동 닫기와 같은 기능을 가지고 있습니다. HTML 태그를 추가하고 그 사이에 빈 줄을 삽입하고 적절한 들여 쓰기를하십시오. 나는 이맥스에서 이것을 어떻게 얻을 수 있는가? – jesper

+1

@ jesper 나열된 모드 중 일부는 이미 원하는대로 할 수 있습니다. 보다 일반적인 모드 yasnippet (http://www.emacswiki.org/emacs/Yasnippet)이 원하는 것을 할 수 있는지 확인하십시오. 그것은 실제로 괄호 균형 모드가 아니므로 답장에 추가하지는 않겠지 만 당신이 묻는 것을 할 수 있습니다. –

15

예, this mode is called electric. 당신은 최대 CONFORT이 간단한 매크로 전기 동작을 결합 할 수 있습니다 :

(defun electric-pair() 
    "If at end of line, insert character pair without surrounding spaces. 
    Otherwise, just insert the typed character." 
    (interactive) 
    (if (eolp) (let (parens-require-spaces) (insert-pair)) 
    (self-insert-command 1))) 

그런 다음 그것을 가능하게 좋아하는 프로그램 모드에 대한 적절한 문자를 결합하여. PythonMode 예를 들어, 들어 :

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map "\"" 'electric-pair) 
      (define-key python-mode-map "\'" 'electric-pair) 
      (define-key python-mode-map "(" 'electric-pair) 
      (define-key python-mode-map "[" 'electric-pair) 
      (define-key python-mode-map "{" 'electric-pair))) 

CPerl 모드는 내장으로이 제공

;; from my .emacs 
(add-hook 'cperl-mode-hook 
    (lambda() 
    (setq cperl-hairy nil 
     abbrev-mode t  ;; automatic keyword expansion 
     cperl-highlight-variables-indiscriminately t 
     cperl-auto-newline t 
     cperl-auto-newline-after-colon t 
     cperl-regexp-scan nil 
     cperl-electric-keywords t 
     cperl-electric-linefeed t 
     cperl-electric-parens nil) ;; <------ electric parens! 

다른 모드가 비슷한 제공 할 수있다.

+6

'전기 쌍 모드'는 emacs 24에 내장되었으며'(전기 쌍 모드 1) '에서 사용할 수 있습니다. [link] (http://ergoemacs.org/emacs/emacs_insert_brackets_by_pair.html). – liuminzhao

+0

전기 모드는 작은 따옴표와 중괄호를 닫지 않습니다. 어쨌든 그렇게 할 수 있을까요? –

+0

그냥 M-x 그룹 '전기'를 사용자 정의하고 '전기 쌍 쌍'을 찾습니다. 그러나 주요 모드에 상관없이 이것을 설정하는 것은 현명하지 않을 수 있습니다 (예 : 텍스트 모드). 다른 주요 모드는 대개 사용자 지정을 제공합니다. Python 작은 따옴표가 예상대로 작동합니다 (끝에 하나 추가). – bubak

5

cmarcelo는 해골 모드를 사용하여 written a wonderful post about this입니다. 그는 또한 여는 괄호를 삭제할 때 균형 잡힌 괄호를 제거하는 방법과 실수로 닫는 괄호를 입력하는 경우를 처리하는 방법을 보여줍니다. (우연히 두 동작 모두 TextMate를 복사합니다.)

업데이트 : 나는이 대답을 게시 때문에, 나는이 사용 사례에 대한 거의 완벽한 시스템입니다 Autopair을 발견했습니다

. 나는 그것을 많이 사용하고 그것을 사랑했습니다.

+0

+1 자동 주차입니다. –

+0

autopair는 작은 따옴표와 중괄호를 닫지 않습니다. 어쨌든 그렇게 할 수 있을까요? –

+0

@VineetKaushik 자동 모드를 사용하는 모드에 따라 다릅니다. 파이썬 모드에서 저에게 잘 작동합니다. 어쩌면 쌍으로 간주되지 않는 모드를 사용 중일 수 있습니다. 당신이하는 일에 대해 더 자세히 설명해 주시겠습니까? – Singletoned

5

나는이 스레드를 괴롭 히고 다른 대안을 제시 할 것입니다. 쌍의 자동 삽입, 영역의 래핑, 균형 잡힌 표현을 중심으로 한 탐색 및 훨씬 더 많은 것을 다루는 최근에 시작된 새로운 프로젝트가 있습니다.기능 목록은 너무 길기 때문에 자세한 readme를 읽을 수있는 smartparens github repo으로 연결됩니다.

위의 AutoPair의 상위 세트이며 paredit의 핵심 기능 대부분을 제공합니다 (그리고 emacs 구문 테이블에서 인식되는 것뿐만 아니라 모든 종류의 다른 쌍으로 확장되었습니다).

관련 문제