Emacs를 사용한 코드 템플릿

Emacs를 사용한 코드 템플릿

emacs일부 코드 프레임워크 생성을 구성하는 방법은 무엇입니까 ?

예를 들어, C 파일의 경우:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv) {

    return EXIT_SUCCESS;
}

아니면 Python에서 좀 더 역동적인 것입니다:

#!<insert result of `which python` here>

def main():

if __name__ == "__main__":
    main()

템플릿 삽입을 위한 두 가지 모드를 정의하고 싶습니다.

  • 기능 insert-template(또는 무언가)을 만들고 이를 특정 키 조합( C-c C-t)에 바인딩하면 기본 모드에 따라 올바른 템플릿이 삽입됩니다.

  • 파일을 생성할 때 템플릿을 자동으로 삽입하여 파일 이름 접미사로 올바른 유형을 감지하는 옵션을 만듭니다(기본 모드를 감지하는 방법과 유사). 이 옵션은 파일에서 쉽게 켜짐/꺼짐으로 설정되어야 합니다 .emacs.

이상적으로는 타사 모듈/패키지 사용을 피하고 싶습니다. 그러나 나는 그것에 전적으로 반대하지는 않습니다.

답변1

확인하시기 바랍니다야스니펫. 이는 쉽게 설치하고 필요에 따라 사용자 정의할 수 있는 훌륭한 Emacs용 템플릿 시스템입니다. 또한 확인해 주세요.문서(방법 섹션 및 비디오 데모가 포함되어 있습니다).

답변2

타사 Emacs 모드가 이미 존재한다면 왜 피합니까? 이것EmacsWiki에는 귀하의 질문에 대한 답변이 많이 있습니다.. 수십 년 동안 우리와 함께 해왔 abbrev-mode습니다. 필요한 것을 달성하기 위해 매우 부드럽게 남용될 수 있습니다. auto-insert-mode더 좋고 emacs의 일부입니다.

Python(또는 기타) 인터프리터 바이너리의 경로를 검색하려면 약간의 emacs Lisp를 작성해야 할 수도 있습니다.

강력한 옵션도 있습니다(EmascWiki 페이지를 확인하세요 - 귀하의 모든 요구 사항을 충족하는 옵션이 분명 있을 것입니다)

답변3

이를 파일 생성 시 자동으로 삽입하기 위해서는 해당 스키마에 Hook을 추가해야 할 것 같습니다. 예를 들어

(add-hook 'python-mode-hook '(lambda () (when (empty-buffer?) (insert-python-template))))

(defun empty-buffer? () (= (buffer-end 1) (buffer-end -1)))

(defun insert-python-template ()
  (interactive)
  (insert "Template stuff goes here"))

이제 에서 새 버퍼를 열 때마다 python-mode자동으로 이 템플릿으로 채워집니다.

타사 모듈을 사용하고 있고 오픈 버퍼에 템플릿/부분 템플릿을 추가하려면 다음을 확인하세요.yasnippet작은 모드. 아직 실제로 사용해본 적은 없지만 좋은 소식을 계속 듣고 있습니다.

답변4

내장된 .dll auto-insert-mode을 파일에 추가 할 수 있습니다 .emacs.

(auto-insert-mode)
(setq auto-insert-directory "~/.emacs.d/templates/")  ;; trailing slash IMPORTANT
(define-auto-insert "\.py" "python-template.py")

그런 다음 템플릿 내용을 python-template.py디렉토리 에 배치합니다 ~/.emacs.d/templates/.

매번 삽입하라는 메시지를 표시하지 않으려면 파일에 다음 줄을 추가할 수도 있습니다 .emacs.

(setq auto-insert-query nil) ;; don't prompt before template insertion

관련 정보