2015-01-29 3 views
1

"{"을 입력 한 후 자동으로 "}"을 삽입하는 많은 방법을 발견했지만 다음 구현을 찾지 못했습니다 : "{"를 입력 한 후 다음 줄로 이동했습니다 (필요한 경우 들여 쓰여짐)이맥스. "{"

if (i == 0)*here we typing "{"* 

얻을 다음 :

if (i == 0) 
{ 
    | 
} 

과에 대한 중첩 된 괄호 :

if (i == 0) 
{ 
    if (j == 0) 
    { 
     | 
    } 
} 
다음 다음 줄에 "}"커서를 빈 문자열이며,

어떻게하는가? 참고 : 이미 yasnipped를 사용하지만 기능에는 사용할 수 없습니다.

답변

0

Eclipse의 개행 기능을 에뮬레이트하려고 시도했던 것과 비슷한 것을했습니다.

(defun my-newline() 
    (interactive) 
    (let ((s (buffer-substring (point-at-bol) (point)))) 
    (cond 
    ((string-match ".*{$" s) ; matching a line ending with { 
     (move-end-of-line nil) 
     (insert "}") ; insert }. Can be removed if already being inserted 
     (backward-char 2) 
     (newline-and-indent) 
     (forward-char) 
     (newline-and-indent) 
     (move-beginning-of-line nil) 
     (backward-char 1) 
     (newline-and-indent)) 
    (t (newline-and-indent))))) 

그런 다음 원하는 키 바인딩에 연결할 수 있습니다. 나는 그것이 익숙했던대로 C-j를 뒤엎었다.

(defun my-newline-hook() 
    (local-set-key (kbd "C-j") 'my-newline)) 

(add-hook 'java-mode-hook 'my-java-hook) 

정규식과 취해진 조치는 필요에 맞게 조정할 수 있습니다. 당신이 electric-pair-mode를 사용하는 경우

+0

죄송합니다. 그러나이 상황에서 추가 바로 가기를 사용하고 싶지 않습니다. 아마도이 기능은 타이핑 "{"에 바인딩 될 수 있습니다. – folq

1

, 당신은 당신의 자신의 기능을 제공 할 수

(defun my-electric-pair-open-newline-between-pairs() 
    "Indent paired char and empty line" 
    (when (and (eq last-command-event ?\n) 
      (< (1+ (point-min)) (point) (point-max)) 
      (eq (save-excursion 
        (skip-chars-backward "\t\s") 
        (char-before (1- (point)))) 
       (matching-paren (char-after)))) 
    (save-excursion 
     (insert "\n") 
     (indent-according-to-mode)) 
    (indent-according-to-mode)) 
    nil) 

(setq-default electric-pair-open-newline-between-pairs 'my-electric-pair-open-newline-between-pairs) 

(electric-pair-mode 1) 

그것은 당신이 빈 괄호 안에 반환 공격 만 무엇을 설명 할 것입니다.

+0

답장을 늦게 드려 죄송합니다. 당신의 솔루션은 조금 다르게 작동합니다. 원하는 결과를 얻으려면 다음을 수행해야합니다. /"{"/ /type "{"/ /press return/ 을 입력하기 전에 return 키를 누르십시오. 첫 번째 반환을 제외하면이 해결책이 적합합니다. – folq