Emacsは起動が遅く感じることがあります。
しかし、どうもそれは起動の仕方を間違えていたからだったみたいです。
その考えを強めたきっかけが、DistroTube 氏の Three HUGE Mistakes New Emacs Users Make でした。
1. デーモンを常駐しておくと起動は速い
最初に Emacs を触ったとき、単純に次のように起動していました。
emacs file.txtCode language: CSS (css)
数秒待たされ、ようやくウィンドウが開く。
「Emacsは重い」という印象が先に立ちます。
当時はそれを当然だと思っていました。
1.1. サーバー(デーモン)という発想
「初心者の勘違い」は、「Emacsをサーバーとして起動していないこと」です。
Emacs には、バックグラウンドで常駐させておき、必要なときにクライアントを瞬時に開く仕組みがあります。
具体的には次のように起動します。
emacs --daemon
でも、起動できません。
そこで、emacs-plusをインストールしました。
brew tap d12frosted/emacs-plus
brew install emacs-plus
1.2. emacsclient -c -a ”
デーモンを立ち上げたら、普段は次のコマンドで Emacs を開きます。
emacsclient -c -a ''
Code language: JavaScript (javascript)
これを初めて試したとき、体感ははっきり変わりました。
ウィンドウが「起動する」のではなく、「現れる」感覚に近いです。
各パーツの意味を分解して解説します。
「emacsclient」は、すでにバックグラウンドで動いている Emacsサーバー(デーモン)に「新しいウィンドウを開いて!」と命令を出すためのツール です。
通常の emacs コマンドだと、毎回すべての設定ファイルを読み込むので起動が遅いですが、emacsclient はすでに準備ができているサーバーに繋ぐだけなので、一瞬(0.1秒以下)で開きます。
「-c (Create Frame)」は、「新しいGUIウィンドウ(フレーム)を作成せよ」 というオプションです。
これがないと、すでに開いている既存のEmacsウィンドウの中でファイルが開かれてしまいます。
「-a '' (Alternate Editor)」は、「もしサーバーが動いていなかったらどうするか?」 を指定するオプションです。
ここがポイントです。
本来 -a の後には代替のエディタ名(nano など)を書きますが、あえて空文字 '' を渡すと「サーバーが動いていないなら、まずサーバーを自分で立ち上げてから接続せよ」という特別な意味になります。
この時点で、「Emacsは遅い」という前提が崩れました。
1.3. サーバーを終了するには?
Emacsサーバは、直接プロセスを終了するのではなく、emacsclientから終了します。
emacsclient -e '(kill-emacs)'Code language: JavaScript (javascript)
確認メッセージなしで強制終了するには、1
emacsclient -e '(progn (defun yes-or-no-p (p) t) (kill-emacs))'Code language: JavaScript (javascript)
2. ターミナルでのcdやファイルマネージャーは不要(Dired)
次につまずいていたのは、作業の流れそのものです。
- ターミナルで
cd emacs file.txtで編集- 別ウィンドウでファイル一覧を確認
この流れは、他のエディタでは自然に感じます。
しかし、Emacsでは「非効率」。
理由は単純で、Emacsの中に同じ機能が揃っているからです。
たとえば Dired は Emacs 内蔵のファイルマネージャーです。
ディレクトリを一覧し、移動し、ファイルを開くところまで一貫して操作できます。
また vterm は Emacs 内で動くターミナルエミュレーターです。
外部ターミナルと遜色ない速度で、同じウィンドウ内に収まります。
Emacsを起点に作業を組み立てると、「外に出る理由」が減っていきます。
2.1. Emacsは-nw で使わなくてもよい
Emacsは、ウィンドウを出さずターミナル内で使うものだと思い込んでいました。
emacs -nw
これだと起動も速い気がします。
ところが、GUI版の Emacs にはターミナル版にはない機能があります。
- 見出しごとにフォントサイズを変えられる
- 画像をそのまま表示できる
3. Emacsを「完結する環境」として扱う
「Emacsはオペレーティング・システムのようなものだ」という表現は、比喩ではありますが、体感としては理解できます。
もっと正確に言うなら、「シェル」なんでしょうね。
一つのプロセスの中で、
- 編集
- ファイル管理
- ターミナル操作
- 情報参照
が完結する。
その一貫性が、慣れてくるほど効いてきます。
もちろん、すべてを Emacs に寄せることが常に正解だとは思っていません。
用途やチームによっては、外部ツールと併用した方が合理的な場面もあります。