時代はGNU screenからtmuxへ
GNU screenはもう古いので皆さんtmuxへ移行しましょう、という話。Gentooならemerge tmux。
スクリーンショット
手元のtmuxを撮ってみた。縦分割モード。ウィンドウマネージャはawesome。左のircクライアントはweechat。
本家にもいくつかスクリーンショットがある。
tmuxへ移行する理由(メリット)
- 標準設定のままでもそれなりに使えるステータスバー
- 各ショートカットがコマンドベース(コマンドで操作ができる)
- 標準で縦分割機能搭載
- GNU screenがたまに固まる問題(が発生するのは私だけ?)が発生しないかも
- ビュー専用のスクロールモード
- 柔軟なペイン制御
- コピー&ペースト用のバッファを複数保持できる
- terminfo的にscreen互換
- メモリ消費量が少ない(GNU screenの約1/5)
- 一部機能でマウスが使用できる(mode-mouse, mouse-select-pane)
- 活発に開発中
tmuxへ移行する上での注意点(デメリット)
- GNU screenにはないペインの概念がややこしい(複数同時表示できるのはペインのみ、ウィンドウは1つのtmux上で同時に表示できない)
縦分割時にペインを狭める/広げることが現状できない*1- マルチバイト文字がたまに表示上消える(Ctrl+Lで復活)
- バッファのペースト時にマルチバイト文字が化けることがある
コピーモード中に検索が現状できない*2- GNU screenにあるシリアル接続機能はない
- Windowsからtelnet/ssh経由でtmuxを操作する場合、画面が崩れる場合がある
- まだ発展途上
GNU screenとtmuxのキーマップの違い
GNU screen風にキーカスタマイズも出来るけど、折角だからtmuxのキーマップに慣れましょう。いくつかピックアップ。
操作 | screen | tmux |
---|---|---|
ウィンドウを作成 | C-a c または C-a C-c | C-b c |
ウィンドウ名を変更 | C-a A | C-b , |
ウィンドウ一覧表示/移動 | C-b " | C-b w |
次のウィンドウへ移動 | C-a n または C-a C-n | C-b n |
前のウィンドウへ移動 | C-a p または C-a C-p | C-b p |
最後に操作したウィンドウへ移動 | C-a C-a | C-b l |
ウィンドウを強制終了 | C-a k | C-b & |
ペイン分割 | C-a S | C-b " |
ペイン分割解除 | C-a Q | C-b ! |
ペインを強制終了 | C-a k | C-b x |
ペイン間移動 | C-a Tab | C-b o または C-b Up または C-b Down |
ペインを狭める/広げる | C-a - または C-a + | C-b C-Up または C-b M-Up または C-b C-Down または C-b M-Down |
ペイン配置パターンの変更 | なし | C-b Space または C-b {1,2,9} |
中断 | C-a d または C-a C-d | C-b d |
再開 | screen -x | tmux attach |
ウィンドウ配置の変更 | なし | C-b Space |
コピーモードでのコピー始点選択 | Space または Enter | C-Space (viモードならSpace) |
コピーモードでのコピー終点選択 | Space または Enter | M-w (viモードならEnter) |
現時刻表示 | C-a t または C-a C-t | C-b t |
その他
今から使うならロケール問題が解消されたtmux-0.9以降がオススメ。ただ、tmux-0.9でも設定ファイルにutf8の記述が必要。私の今の設定(~/.tmux.conf)はこんな感じ。詳しくはtmux(1)を参照。
set-window-option -g utf8 on # 日本語環境なら今のところ必須。 set-window-option -g mode-keys vi # コピーモードのキーマップ。標準はemacs set-window-option -g automatic-rename off # ウィンドウ名が自動的に更新されないように
Vimで色が正しくでない場合は、t_Coが指定されていないか確認。
" t_Coを指定しているとtmuxでは色が正しくでないのでコメントに "set t_Co=88 "set t_Co=256