tmuxを使い始めてみた

名前と存在は知っていたけど最近まで使ったことのなかった、tmux。
http://tmux.sourceforge.net/
ようやく触ってみた(現在の最新版:1.6)のでscreenとの比較、思ったことなど。

現在の自分の設定

# prefix key
unbind C-b
set-option -g prefix C-t

# key bind
bind-key C-n next-window
bind-key C-p previous-window

# terminal
set-option -g default-terminal xterm-256color

https://github.com/sugyan/dotfiles/blob/master/.tmux.conf
主にはコレくらい。エスケープキーはデフォルトの"C-b"から"C-t"に。windowの行き来はCtrlキー押しっぱなしで連打したいので"n", "p"だけじゃなくて"C-n", "C-p"も使えるように追加。terminalはよく分かっていないけどemacsなどを256色で使えるようにするためにxterm-256colorにしておく

インストール

screenだとだいたいデフォルトで入ってたりするようだけど、tmuxは残念ながら自分でインストールしないと使えない、のかな。とはいえMacならhomebrew, Linuxならyumとかパッケージマネージャで簡単に入れられるので問題なし。自分でソースからビルドしてみても簡単にできた。

デフォルト設定

.screenrcには

hardstatus alwayslastline "%-w%{= ck} %n %t %{-}%+w"

とか頑張って調べながら書いていたけど、tmuxはステータスラインなんかはデフォルトで綺麗なのを表示してくれる。あとコピーモードがデフォルトでemacsキーバインドなのは自分としては慣れているので有り難い。

設定ファイル

もともとscreenもたいしてカスタマイズしていなかったのであまり違いを感じなかったけど、screenと比べて記述しやすく読みやすい、のかな。manでのドキュメントも丁寧に書いてあると思うので調べればだいたいやりたいことは出来るのかも
Macの場合/Linuxの場合 など環境によって設定を変えたい、というときに設定を条件分岐させて…というのが出来ると良いな、と思って調べてみたところif-shellというのが使えるらしい。

     if-shell shell-command command [command]
                   (alias: if)
             Execute the first command if shell-command returns success or the second command otherwise.

ただコレは内部で別プロセスでシェル実行して行うからなのか、最初のwindowが作られてからその設定が反映されるなどタイミングの問題があり、条件がマッチしたときのコマンドにdefault-commandなど指定しても1番目のwindowには適用されず2番目以降にしか反映されない、など微妙に感じるところがあった。素直に読みこむファイルごと切り分けた方が良いのかもしれない。

Macで使う場合

Macでは、tmux上ではpbcopy, pbpasteが正常に動作しないという問題がある。回避するには
Mac の tmux でクリップボードを使う。 - こせきの技術日記
の記事の通り、tmux-MacOSX-pasteboardを持ってきてmakeしてPATH通して設定追加して…とやらないといけない。正直ちょっとめんどい。

感想

とりあえず使ってみたものの、コレといって「絶対screenよりtmuxの方が良い!」というようなものもなく、無理して移行する必要もないのかな、と思ったり。とはいえ別に使い心地が悪いというわけでもないし、折角なのでこのまましばらく使い続けてみるつもり。測ってないけどメモリ消費が少ないらしいし、まだこれから面白い進化があるかもしれないし。
時代はGNU screenからtmuxへ - Dマイナー志向