私は普段 Ubuntu を使っているのですが,複数の端末を使いたくなった時に今まで必要な数の端末を全て起ち上げていました
Ubuntu だと Ctrl + Alt + t でメモリの限り無限に端末を起ち上げることができるので,それに任せて好き放題端末を起ち上げていました
しかしそれだと様々な問題が生じます
例えば
- 端末毎にウィンドウが起動しているので 複数の端末を扱う=複数のウィンドウを扱う になるので面倒
- 特定の端末を見ながら違う端末で作業したい場合,ウィンドウを調整しないといけない
- コピペがマウス操作でやるしか無い
- そもそも GUI 環境でなかったら不可能
- サーバーをいじりたい時に端末毎に ssh すると無駄が多い
- サーバーから一度切断してしまうと,その端末の状態というのは消えてしまう
など多くの問題があります
これらは全て tmux で解決できます
そこで今回は tmux の簡単な使い方と私のキーバインドの設定について紹介したいと思います
screen との違いについては tmux の方が新しいという事と,ライセンスが screen は GPL で tmux は BSD ライセンスなどの違いがあります
それに関しては 時代はGNU screenからtmuxへ – Dマイナー志向: などを参考にしてください
それでは紹介していきます
インストール
何はともあれインストールですが,以下のようにすればインストールできます
Mac
brew install tmux
Ubuntu
apt-get install tmux
ただし CentOS6 は少し複雑で yum では入りません
なのでコンパイルしようかと思ったのですが,コンパイルしても何故か私の環境では動きませんでした
なので下のサイトを参考にして rpm ファイルから入れることをおすすめします
またなぜか CentOS6 で起動した tmux が設定ファイルである ~/.tmux.conf を読み込んでくれませんでした
そういうときは C-b してから : source-file ~/.tmux.conf と打つと読み込まれます
追記(2013/5/17):
CentOS5 での tmux のインストール #tmux – Qiita [キータ]
にインストール方法を書きました
設定
設定は ~/.tmux.conf に書きます
最初は何も書かずに tmux と打って起動する人が多いと思いますが,デフォルトの状態だとプレフィックスキーに C-b がアサインされています
つまりターミナル上で C-b が使えなくなりますのでカーソル移動でかなりきついです
速攻で変えましょう
私は Emacs とかにもほぼ影響を与えない C-z を選びました
1 2 | # Prefixset-option -g prefix C-z |
それと日本語環境だと必須な気がするので一応 UTF-8 の設定もしておきます(なくてもよい?)
1 2 3 | # 日本語環境なら必須??setw -g utf8 onset -g status-utf8 on |
また設定を始める前に以下の設定をしておきましょう
1 | bind C-r source-file ~/.tmux.conf |
こうすると C-z C-r をするだけで ~/.tmux.conf が再読み込みされるので設定する前に設定しておくととても便利です
ステータスバー
下に今開いているウィンドウの情報などが載っているステータスバーがあります
デフォルトのままでもいい人はいいのですが,変え方を説明します
1 2 3 4 | set -g status-interval 10set -g status-bg colour100setw -g window-status-current-fg blacksetw -g window-status-current-bg white |
status-interval はステータスバーが更新される間隔です
デフォルトは15ですが,少し長い気がするので10にしています
以下は色の設定です
順に ステータスバーの背景色・現在使っているウィンドウのフォントカラー・現在使っているウィンドウの背景色 となっています
色の指定は
black, red, green, yellow, blue, magenta, cyan, white
か colour0 - colour255 のいずれかで指定します
colour0 - colour255 って番号だと色わからないだろ!という方にとても有用な Perl スクリプトが公開されているので実行してみてください
256 colors with tmux’s colour numbers. – What’s Goin’ On Out There?
Perl が使えないとかがあれば,以下のシェルスクリプトでも簡易的ですが確認できますので実行してみてください
1 2 3 4 | for i in {255..0} ; do printf "\x1b[38;5;${i}mcolour${i} "doneprintf "\n" |
これで以下のような見本が出力されるはずなので参考にしてください
ちなみに私のはこんな感じです
残りの設定は使い方を説明しながら紹介していきます
使い方
ウィンドウ操作
tmux にはウィンドウとペインという概念があります
ウィンドウはその1つ1つが端末で,ペインはウィンドウを分割した際に生じる個々の端末のことです
つまりウィンドウは複数のペインに分割することができます
ウィンドウ操作の基本的なキーバインドは以下のようになっています
C-z c | 新しいウィンドウを作成 |
C-z n | 次(next)のウィンドウに移動する |
C-z p | 前(previous)のウィンドウに移動する |
C-z w | 現在のウィンドウ一覧を開く(C-n,pとEnterで選択可能) |
ウィンドウ分割などのペイン周りのキーバインドは Emacs からかけ離れているので Emacs に近付ける設定をします
1 2 3 4 5 6 7 8 9 10 11 | # pane-active-borderset -g pane-active-border-fg white# KeyBindings# paneunbind 1bind 1 break-panebind 2 split-window -vbind 3 split-window -hbind C-k kill-panebind k kill-windowunbind & |
pane-active-border-fg は現在操作中のペインの周りの線を指定するもので,お気に入りの色に設定するといいと思います
# KeyBindings 以下の設定は Emacs っぽくするためのもので,以下のようなキーバインドになります
C-z 1 | ペインを分解して1つのウィンドウにする |
C-z 2 | ウィンドウを上下に分割する |
C-z 3 | ウィンドウを左右に分割する |
C-z C-k | 現在のペインを kill する |
C-z k | ウィンドウを kill する |
大分 Emacs に近くてよいです
コピーモードなど
tmux には コピーモード があり, C-z [ でコピーモードになります
コピーモードでは Emacs キーバインドがデフォルトで, C-a,e,p,n,f,b,SPACE や M->,<,w など実に多くの Emacs キーバインドが使えます
単純に端末の上の方の出力を見たいというような用途にも使用出来ます
キーバインドも vi 派の人は
1 | set-window-option -g mode-keys vi |
と書けば vi キーバインドになるようです
キーバインドに関して詳しくは以下のサイトの ウィンドウとペイン を参考にしてください
注意するべきなのはコピーしたものを貼り付けるときは C-z ] であるという点です
また Mac のターミナルを使用している場合はデフォルトのままでは META キーとして ESC しか使えません
そこで環境設定から 設定 > キーボード を選択して メタキーとして option キーを使用 にチェックを入れると option キーも使えるようになります
また以下のように ~/.tmux.conf に書いておくとコピーモードにするのに C-z C-[ ,貼り付けるのに C-z C-] となりいちいち Ctrl キーから手を離す必要がなくなって便利です
1 2 | bind -r ^[ copy-modebind -r ^] paste-buffer |
attach/detach
tmux では端末の状態を保存することができます
まず C-z d をすると tmux を起ち上げた元の端末に戻れます(detach)
その状態で
tmux ls
とすれば現在起ち上がっている tmux のリストが表示されます
一番右に書かれている番号が0だった場合,それを開くには
tmux attach -t 0
のようにします
この操作を attach といいます
attach は a と省略でき,-t 以下のオプションを省略すると一番最後に作成されたものが開きます
これをうまく利用することでサーバー上の端末の状態を保つことができます
まとめ
以上のものをまとめたものを gist に貼りました
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
最近 tmux がないと生活できなくなってきました
皆さんも tmux ぜひ使ってみてください!!
--追記(2013/01/14)
Ubuntu には tmux 起動時に .bashrc が実行されていないバグ?がありました
回避策を見つけたので追記します
1 2 | set-option -g default-shell /bin/bashset-option -g default-command /bin/bash |
と .tmux.conf に追記してください
もちろん自分が普段使っているシェルに合わせてください

