2012년 10월 5일 금요일

[Emacs] YASnippet용 템플릿 만들기

YASnippet에 관한 글은 별도로 적지 않았는데 Emacs에서 YASnippet은 워낙 유명하다 보니 소개에 관해서는 생략. 이 포스트는 YASnippet용 템플릿과 관련한 가장 기본적인 내용을 다룬다.

기본적인 설치나 사용법은 아래 공식 저장소의 문서를 참고하는 편이 좋다. :-)


템플릿은 몇 가지 구조가 있지만 크게 두 가지이다. 하나는 트리거 키워드, 다른 하나는 몸통.
  • 트리거 키워드(Trigger Keyword)라는 표현은 그냥 멋대로 적은 것이고 공식적으로는 키(key)이다. 특정 템플릿을 발동(?)시키려면 이 키에 해당하는 키워드를 입력해야 한다.
  • 몸통은 말 그대로 템플릿 몸통이다. 예를 들자면 기본적으로 입력되어야 할 코드를 채우고 사용자의 입력이 필요한 부분을 지정해 주는 식이다.
스니펫 템플릿을 만들 때는 YASnippet에서 제공해 주는 기능을 이용 할 수 있다. M-x yas/new-snippet 으로 실행 할 수 있고, 실행시키면 해당 모드에 맞는 템플릿을 작성 할 수 있게 도와준다.

물론 수동으로 만들어도 된다. 수동으로 만들 때는 snippet 디렉토리에 모드 이름과 동일한 디렉토리를 만든 후 그 안에 키워드로 된 파일을 생성하면 된다.

snippet 디렉토리는 yas/snippet-dirs 라는 리스트에 설정된다. 예를 들어서 아래와 같이 설정 할 수 있다.
(setq yas/snippet-dirs '("~/.emacs.d/vendor/yasnippet/snippets" "~/.emacs.d/snippets"))
두 가지 디렉토리를 설정했지만 사실 앞의 것은 기본 내장 템플릿 디렉토리를 지정 해 준 것 뿐이다. 따라서 여기서는 두 번째 커스텀 디렉토리를 이용한다. 물론 이것은 예일 뿐이고 각자 원하는 디렉토리를 설정하면 된다.

여기서는 수동으로 HTML5 몸통을 만들어 주는 템플릿을 하나 만들어 보려고 한다. 우선 위에서 설정된 커스텀 스니펫 디렉토리로 이동한다. 그리고 여기다 html-mode 디렉토리를 하나 만든다. 그리고 이 디렉토리에 html5 라는 파일을 하나 생성한다.

절대경로: ~/.emacs.d/snippets/html-mode/html5

파일의 내용은 아래와 같다.
# name: HTML5
# key: html5
# --
<!DOCTYPE HTML>
<html>
  <head>
    <title>$1</title>
  </head>
  <body>
  </body>
</html>
간략히 꼭 필요한 3가지 요소로 구성되어 있다.

  • # name:은 그냥 템플릿 이름이다.
  • # key: 위에서 이야기한 트리거 키워드. html5라는 키워드로 이 템플릿이 완성된다는 의미이다.
  • # --: 이 표시 아래부터 템플릿 몸통이 나온다.

템플릿 몸통에서 $1 이라는 부분에 주의해야 한다. 이 부분은 사용자의 입력이 필요한 부분이라는 의미이다. 따라서 위의 템플릿을 이용해 html5 를 누르고 탬을 누르면 위의 템플릿이 완성되면서 $1 부분에 커서가 이동하게 된다. (실제로 $1이 표시되는건 아니다.) 아래 스크린샷은 실제로 html-mode 상태에서 html5를 입력 한 후 TAB을 누른 뒤의 상황이다.
위 스크린샷에서는 커서가 잘 안보이는데 title태그 사이에 커서가 위치하고 있다.

이런 식으로 사용자의 입력이 필요한 부분은 $로 시작하는 숫자를 적으면 된다. 이 숫자는 순서를 의미하기도 한다. 즉, $1, $2, $3 이런 식으로 적으면 된다. 이 부분은 탭 키를 누르면 순차적으로 이동하게 된다.

좀 더 고급 기능을 원한다면 공식 문서를 읽어보는 편이 좋다. ;-)

주의) 혹시나 해서 언급하는데, 위의 파일 경로 표기에서 지렁이(~)는 UNIX에서 사용하는 홈디렉토리(혹은 환경변수 HOME)를 의미하는 기호이다. 윈도우용 Emacs에서도 일단 인식되는 것으로 기억하지만 윈도우에서는 정확한 경로를 입력해 주는 것을 추천한다.

댓글 없음 :