Emacs と Tmux

Mar 25, 2013  

思う所あって、Emacs を CUI で使う事にした。僕は zsh + tmux を使っているので、その上に Emacs を載せる事になる。 その時のメモ。

理由

最近、開発は vagrant で VM 立ちあげて sshfs で Mac にマウントしてそのマウントされたファイルに Emacs でアクセスして作業する事が多い。 この sshfs でマウントした状態っていうのがおそらく問題で、Emacs の git 系の拡張の動きがすこぶる遅い。特に気になるのが helm-ls-git で、起動するのに体感5秒位かかっている状態。この拡張をまともに使えないのはすごくもったいないので、それがかなりストレスになっている。挙げ句の果てには find-file も2秒位かかる状態。ストレスフル。そして、この開発環境の VM 化は今後ずっと続くだろうから(利点の方が大きい)、解決しなくてはいけない。

そもそも git の操作だとか単体テストを流す作業だとかは ssh でゲストマシンに接続してやっていて、つまりマウントしている理由は Mac 側の GUI アプリで操作をしたいだけだった。そうなると、解決策は

  • trump で ssh 接続する
  • Emacs を CUI で使うようにする

の2つある。(他にもあったら教えて下さい)

実は半年位前に trump でやっていたこともあったのだけど、find-file だとか、direx だとかが非常に遅かった。一度読みこめばキャッシュするんだけど、新規にファイル追加する度に読み込み直しで時間がかかるのがかなりストレスだった。(その頃は helm-ls-git を知らなかったから、それについては試してないけど、遅そう。)

で、後者を選択する事にした。CUI で簡潔するのってなんかカッコイイし、git のコミットメッセージを書く度に GUI ウィンドウに移動とか面倒だったし(Emacs からコミットとかをしていないのはどの拡張もしっくりこなかったから…)(それで最近はコミットメッセージは vim で書いていた)(おかげで vim 力は結構あがった)、Emacs さえ入っていればどんな環境でも作業できるっていうのはすごくメリットのある事だと思ったので。

という事で、zsh + tmux + Emacs の環境を構築した。

やったこと

最初にやったことは、もちろん Emacs のインストール。この辺、デフォルトで入ってないのは辛い所な気もする。それで僕の場合は cmigemo も入れる必要がある。

という事で、新しい VM を vagrant up したらまずすることは、

  • cmigemo のインストール
  • Emacs のインストール

になると思う。

cmigemo のインストール

だいたいいつも、どこかのブログを見たり、公式サイトを見たりしてる気がする。

今回はここを参考にした UbuntuにC/MigemoをインストールしてEmacsで使う - ser1zw’s blog

Emacs のインストール

今回は対象が Ubuntu 10.0.4 LTS。

Index of /pub/GNU/emacs ここらへんから最新のパッケージをとってきてビルドする。

今回の Emacs のオプションは、

./configure --x-libraries=no --with-x-toolkit=no

こんな感じにした。画像関連のライブラリが足りなかったので、それらもインストールしておく。 後は普通に make && make install できた。

参考: [Emacs]Emacs24.1をUbuntuにインストールする » Emacsのelispインストール・設定・使い方 | Emacsのelispインストール・設定・使い方

Emacs の設定

あまり既存の設定をいじる事なくできた。いじったところは、

  • redo+ がうまく動かないらしいから消した
  • window サイズの設定をまるっと消した
  • フォント周りもまるっと消した

位。

tmux の設定

僕はずっとプリフィクスキーを C-x にしていた。Emacs を CUI で使う事はないと思っていたのと、Emacs と似たような操作感が欲しかったから、というのが理由。今度からは Emacs 上でも tmux が操作できないといけないので、欠番キーである C-z を割り当てることにした。

余談だけど C-t に設定してる人が多いのにはビックリしてる。世の中の tmux の設定を見ると大体そんな感じがしてる。Emacs で言えば transpose-chars ってコマンドになるんだけど、これ、ターミナル上でも使えて、かなり便利だと思っている。

例えば、

% git psuh origin master

って打ってエンター押すと、

git: 'psuh' is not a git command. See 'git --help'.

Did you mean this?
        push

って怒られるわけです。そしたら即座に C-p して C-a して M-f して C-f を2回押して C-t したらほら元通り。こんな便利な機能を何でみんな使わないのか、いつも不思議に思ってる。いやまぁ、この操作に慣れるのに時間がかかるけど…

ターミナル上だけでなく、Emacs 上でもこのコマンドを良く使うから、僕は手放せない。という余談でした。

zsh の設定

以下の記事を参考に以下の設定を追加。zsh 起動時に emacs を daemon で起動する。

最近の作業環境とか。TMUX on Emacs - flada_auxvの日記

if pgrep emacs >/dev/null 2>&1; then
    echo "Emacs server is already running..."
  else
    `emacs --daemon`
fi

おわり

ssh で接続した先で tmux 起動してると、コピペがうまくできないのよね。。何か良い設定ないかな…

あと、Mac で iTerm2 を使ってメタキーを Command にしたいなら、ここを見ること(じぶんあて)

Setup iTerm2 - status code 51