Emacs
Git
yasnippet
magit

【今日から続けたい】Emacsでコミットメッセージにプレフィクスを簡単につけれるようにする

一人プロジェクトのコミットメッセージなんか git now で充分ぐらいに思っている意識の低い私が、

【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話 - Qiita
https://qiita.com/numanomanu/items/45dd285b286a1f7280ed

に感化されて長続きできるように行なったEmacsの設定です。

1. yasnippet で : を登録

Emacs ユーザーは全員 magit と yasnippet を使っているという前提で書いてしまいますが、magit からコミットメッセージ編集モードに入るとデフォルトでは text-mode になるので、そこに yasnippet の略語を登録しておきます。

docs の場合は ci を飛ばすことが多いので一緒に [ci skip] も入れときます。

~/.emacs.d/snippets/text-mode/:
# --
`(yas-choose-value '("feat" "fix" "[ci skip] docs" "style" "refactor" "perf" "test" "chore"))`: $0

これで : <TAB> と入力して、プレフィクスを一覧から選ぶだけで入力できるようになりました。

ところが、上の設定でしばらく使ってみて気づいたのですが、 magit の場合は [xxx] 形式にした方が良さそうです。というのも [xxx] 形式だとコミット一覧のとき色がついて見やすくなります。なので今は次の設定で使っています。

~/.emacs.d/snippets/text-mode/:
# --
`(yas-choose-value '("[feat]" "[fix]" "[docs][ci skip] Update" "[style]" "[refactor]" "[perf]" "[test]" "[chore]"))` $0

2. : の入力を忘れないようにする

yasnippet の略語すべてに言えることですが、何に登録したのか思い出せず、そのうち登録したことも忘れるという問題があります。

なので git のコミットメッセージのテンプレートに最初から書いておきます。

次のファイルを作って git config --global commit.template ~/.gitmessage.txt で ~/.gitconfig に反映します。

~/.gitmessage.txt
:

これならさすがに忘れることはないでしょう。

3. 毎回 TAB (C-i) を押すのも面倒になってきたので

を見て毎回カーソル右してTABするのも面倒になってきたのでここも自動化しておきます。

~/.emacs.d/init.el
(add-hook 'git-commit-setup-hook 'git-commit-prefix-select)
(defun git-commit-prefix-select ()
  (forward-char)
  (yas-expand))

これでコミットメッセージを書こうとしたとき、すでにプレフィクスの選択肢が出ているようになります。