💱 emacs / web-mode engine 선택

hugo은 golang text/template, html/template 사용하는데, 또는 아예 다른 프레임웍(예: Rails)의 템플릿엔진을 매번 선택해주기 귀찮음.

emacs web-mode-은 다양한 템플릿엔진을 지원. 그리고 무시하기 어렵도록 정말 편리함. ㅎㅎ

이맥스답게 바로 discover / inspect하는 방법으로 설명을 해보려고 함.

어떤 엔진을 지원하는지 알아보기

C-h v / web-mode-engines 변수 확인.

1
2
3
  (("angular" "angularjs") ("anki") ("antlers") ("archibus") ("artanis")
   ("asp") ("aspx") ("astro") ("blade" "laravel") ("cl-emb") ("clip")
   ...  ("erb" "eruby" "erubis" "crystal") ...)

…위와 같은 list-of-lists을 얻는데, 저기 나온 문자열은 모두 web-mode-engine-에 지정하여 사용할 수 있음.

유사한/같은 문법은 같은 리스트에 묶여 있음.

예를 들어, "erb"-이라고 쓰거나 "eruby"-이라고 쓰거나 같은 문법엔진.

파일확장자별 자동 설정 확인하기

web-mode-engines-alist 변수를 C-h v-으로 확인.

1
2
3
  (setq web-mode-engines-alist
         '(("php"    . "\\.phtml\\'")
           ("blade"  . "\\.blade\\.")))

파일별 수동설정 + 시험해보기

M-x web-mode-set-engine RET 실행하고 파일별로 적당한 문법엔진을 선택하여 시험.

선택하면, web-mode-engine buffer-local-variable을 설정해줌.

파일별 설정 💔

(setq web-mode-enable-engine-detection t) 설정한 다음,

1
2
  <?php /* -*- engine: php; -*- /*
  ...

…와 같이 modeline을 설정하면 된다는데 잘 동작하지 않음. ㅎㅎ

project 전체 설정 : .dir-locals.el

다음처럼 project root에 .dir-locals.el-을 설정하면 됨:

1
2
3
4
  ;;; Directory Local Variables            -*- no-byte-compile: t -*-
  ;;; For more information see (info "(emacs) Directory Variables")

  ((web-mode . ((web-mode-engine . "go"))))

M-x add-dir-local-variable 사용하여, MODE= web-mode, VARIABLE= web-mode-engine 변수를 선택하고 값으로 go 입력해도 됨.