yatemplate 20161108.1305(in MELPA)
File templates with yasnippet

概要

auto-insert-mode は新規ファイル作成時に
決まった内容のテンプレートを用意したり、
特定の関数を実行できたりします。

一方で yasnippet.el はいまや鉄板の強力テンプレートです。

しかし、yasnippet.el登場後8年くらいたつにもかかわらず
なぜか両者を組み合わせる機能がないです。

yatemplate.el を使えば、auto-insertのテンプレートをyasnippetにできます。

使い方は簡単で、 ~/.emacs.d/templates/ 以下に
決められたファイル名でyasnippetファイルを配置するだけです。

ファイル名は1つのコロンで区切られていて、
「番号:正規表現」と指定します。

番号は auto-insert-alist へ追加する順序を指定するために必要です。

たとえば

  • ~/.emacs.d/templates/00:test_.*.py
  • ~/.emacs.d/templates/01:.*.py

というyatemplateファイルがあったとき、
test_*.py の方が優先されます。

開発して日が浅いため(2/28から)まだ荒削りなので設定で対処しています。

  • yatemplateファイルを snippet-mode にする
  • yatemplateファイル追加時に即 auto-insert-alist に反映させる

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてyatemplateを使う方は
以下のコマンドを実行します。

M-x package-install yatemplate

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name yatemplate

設定 150306045100.yatemplate.el(以下のコードと同一)

(yatemplate-fill-alist)
(auto-insert-mode 1)
(defun find-file-hook--yatemplate ()
  "yatemplateのsnippetのテストができるようにするためにsnippet-modeにする"
  (when (string-match "emacs.*/templates/" buffer-file-name)
    (let ((mode major-mode))
      (snippet-mode)
      (setq-local yas--guessed-modes (list mode)))))
(add-hook 'find-file-hook 'find-file-hook--yatemplate)
(defun after-save-hook--yatemplate ()
  "yatemplateファイル保存後、auto-insert-alistに反映させる"
  (when (string-match "emacs.*/templates/" buffer-file-name)
    (yatemplate-fill-alist)))
(add-hook 'after-save-hook 'after-save-hook--yatemplate)

実行方法

$ wget http://rubikitch.com/f/150306045100.yatemplate.el
$ emacs -Q -f package-initialize -l 150306045100.yatemplate.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。