Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

Emacsclientの基本的な使い方

Emacsclientに関してまとまった情報が見つからなかったので(というかEmacs全般に言えると思います)、自分で書きました。

f:id:panda_noir:20180630233353p:plain

Emacsclientとは?

Emacsclientを使うとEmacsの起動時間を大幅に短縮できます。どういう仕組みかというと、Emacsサーバーを建てておき、サーバーを起動したままにすることで設定読み込み時間をなくします。

起動方法

$ emacs --daemonで起動します。その後普通に$ emacs hoge.txtで編集を行います。気をつけるべき点はC-x C-cで終了しない(SpacemascでいうとSPC q qをしない)ことです。これで終了してしまうとサーバーも終了してしまいます。サーバーを起動したままEmacsを抜けることが重要です。

サーバーを起動したまま抜ける

サーバーを殺さず抜けるにはC-x #を押します。Spacemacsで同等の動作をするものがどれかわかりませんでしたが、とりあえずSPC q zするとサーバーを起動したまま抜けられます。

絶対にC-x C-cSPC q qをしないようにしましょう。

emacsclientに関する諸設定

[Emacs] emacsclient を快適に使うための設定emacsclientを使ってEmacsの起動を速くするを参考に最強の設定をつぎはぎしました。

以下をbashrc/zshrcに適当に継ぎ足してください。

function estart() {
  if ! emacsclient -e 0 > /dev/null 2>&1; then
    ({
      cd
      emacs --daemon
      cd -
    } > /dev/null 2>&1 & )
  fi
}
estart # シェル起動時にEmacsデーモンも起動する

alias ekill="emacsclient -e '(kill-emacs)'"
alias erestart="ekill && estart"
alias e="emacsclient -nw -a ''"
alias emacs="emacsclient -nw -a ''"
export EDITOR="emacsclient -nw -a ''"

元記事から、estartの出力をすべて消してバックグラウンドでデーモンを起動するように若干変更をしてあります(許可をいただいてあります)。

補足: emacsclientのオプションについて

emacsclientの各オプションについて解説します。

  • -nw 端末内でEmacsを開く
  • -a デーモンが起動していないときに使うエディタを指定する。デフォルトはデーモンを起動してエディタとする
  • -e Emacs Lispとして評価・実行します。

たとえばemacsclient -nw -a ''は「ターミナル内でEmacsを開く。ただし、デーモンが起動していなければ起動して開く」となります。これでデーモンが起動していなくてもそのまま編集することができます。ただ、端末起動時にデーモンが起動するのであまり使いませんが。