Git on shell on Emacsで、コミットメッセージを同じEmacs上で編集する

EmacsGit開発環境

TL;DR

  • GIT_EDITOR=emacsclient
  • M-: (server-start) RET

直面した問題

shellの上でEmacsを使う者と、Emacsの上でshellを使う者がいる

僕は後者です。
全ての作業をEmacs上で完結させたい。
マウスに手を伸ばさないといけないなんて耐えられない。

で、Emacs上でGitを使おうとして直面した問題。
editorにEmacsを設定すると、git commitするたびに新しいEmacsフレームが立ち上がってしまう。
init.elの読み込みに時間がかかって仕方がない

解決方法

  • emacsrunemacsコマンドは、新しくEmacsを起動してバッファを開くコマンド。
  • 対して、emacsclientコマンドは、serverモードで起動しておいたEmacsでバッファを開くことができる

Emacsをサーバーモードで起動する設定

serverの使い方

init.elに下記を記入

(require 'server)
(unless (server-running-p)
   (server-start))

Gitのエディタの設定

下記のいずれかを実施(前者のほうが優先されるそう)

  • 環境変数の設定

    • GIT_EDITOR=emacsclient
  • git configの設定

    • git config --global core.editor

結果

20190109124205

  • git commitすると、同じEmacs上でCOMMIT_EDITMSGバッファが開き、コミットメッセージを編集できる。
  • この間、shellは処理待ちとなる

20190109124213

  • C-x kでCOMMIT_EDITMSGバッファをkillすると、shellに処理が戻り、commitされる。