2017-09-20 18 views
0

에서 코드 조각을 삽입하는 가장 좋은 방법은 무엇 :나는 기본적으로 <code>function() {};</code>하지만 제대로 들여 쓰기 커서를 삽입하는 기능이 적절하게 배치 한 spacemacs

(defun insert-function-js() 
    (insert "function() { 
};")) 

(define-key evil-normal-state-map (kbd "SPC dg") 
    (lambda() 
    (interactive) 
    (call-interactively 'evil-insert) 
    (insert-function-js) 
    (evil-force-normal-state) 
    (call-interactively 'evil-visual-char) 
    (call-interactively 'evil-previous-line) 
    (call-interactively 'indent-region) 
    (call-interactively 'evil-open-below))) 

이 매우 성가신 것 같다. 나는이 기능을 쓰는 더 좋은 방법이 있다고 생각한다. elisp의 기능을보다 잘 활용하는 도구.

도움 주셔서 감사합니다.

+1

이러한 종류의 템플릿을 삽입하려면'yasnippet'을 체크하고 싶을 것입니다 : http://joaotavora.github.io/yasnippet/ – Arnot

+0

현재 yas를보고 있습니다. 그것은 좋은 발견입니다, 나는 확실히 그것을 가지고 놀 것입니다. 키 바인딩을 제외하고는 vim 매크로를 실행하는 방법을 아직 찾지 못했습니다. 아마 yas 스 니펫을 vim 표현식에 바인딩하는 방법이있을 것입니다. – Mikechaos

답변

1

첫 번째 질문에 대한 답변, 당신은 yasnippet 및 Spacemacs와 함께 제공되는 function -snippet에 따라 조각을 사용할 수있는 것처럼 [1] 당신을 위해이 작업을 수행합니다 :

# -*- mode: snippet; require-final-newline: nil -*- 
# name: my-function 
# key: fn 
# -- 
function() { 
     $0 
}; 

이 조각에 넣으면 ~/.emacs.d/private/snippets/의 새 파일 인 경우 fn을 입력 한 다음 M-/ [2]를 입력하여 파일을 확장 할 수 있습니다. yas-indent-line'auto (기본적으로 Spacemacs에 있음)으로 설정된 경우 함수는 올바르게 들여 쓰기되어야하며 스 니펫의 $0은 삽입 후 커서를 해당 위치에 놓습니다.

yasnippet -expansion은 단일 실행 취소 작업을 구성합니다.


[1] 기본 Spacemacs 바인딩을 사용

[2] ~/.emacs.d/elpa/yasnippet-<VERSION>/snippets/js-mode에서 찾을 수 -snippet 기본 function이 차례로 yas-expand 호출하는 hippie-expand 부른다.

+1

귀하의 의견을 통해, 나는 이미 이것과 같은 몇 가지 yas 스 니펫을 정의했습니다! 정말로 잘 작동합니다. 확실히 첫 번째 질문에 답합니다. 두 번째 질문을 별도의 스레드로 추출하여 답변을 표시하도록 질문을 편집합니다! – Mikechaos