tmuxのすすめ

私は普段 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 ファイルから入れることをおすすめします

Tmux Installation on CentOS

またなぜか 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
# Prefix
set-option -g prefix C-z

それと日本語環境だと必須な気がするので一応 UTF-8 の設定もしておきます(なくてもよい?)

1
2
3
# 日本語環境なら必須??
setw -g utf8 on
set -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 10
set -g status-bg colour100
setw -g window-status-current-fg black
setw -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} "
done
printf "\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-border
set -g pane-active-border-fg white
# KeyBindings
# pane
unbind 1
bind 1 break-pane
bind 2 split-window -v
bind 3 split-window -h
bind C-k kill-pane
bind k kill-window
unbind &

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,SPACEM->,<,w など実に多くの Emacs キーバインドが使えます
単純に端末の上の方の出力を見たいというような用途にも使用出来ます

キーバインドも vi 派の人は

1
set-window-option -g mode-keys vi

と書けば vi キーバインドになるようです

キーバインドに関して詳しくは以下のサイトの ウィンドウとペイン を参考にしてください

Manpage of TMUX

注意するべきなのはコピーしたものを貼り付けるときは C-z ] であるという点です

また Mac のターミナルを使用している場合はデフォルトのままでは META キーとして ESC しか使えません

そこで環境設定から 設定 > キーボード を選択して メタキーとして option キーを使用 にチェックを入れると option キーも使えるようになります

MacのMetaキー設定

また以下のように ~/.tmux.conf に書いておくとコピーモードにするのに C-z C-[ ,貼り付けるのに C-z C-] となりいちいち Ctrl キーから手を離す必要がなくなって便利です

1
2
bind -r ^[ copy-mode
bind -r ^] paste-buffer

attach/detach

tmux では端末の状態を保存することができます

まず C-z d をすると tmux を起ち上げた元の端末に戻れます(detach)
その状態で

tmux ls

とすれば現在起ち上がっている tmux のリストが表示されます

一番右に書かれている番号が0だった場合,それを開くには

tmux attach -t 0

のようにします

この操作を attach といいます

attacha と省略でき,-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
# Prefix
set-option -g prefix C-z
 
# 日本語環境なら必須??
setw -g utf8 on
set -g status-utf8 on
 
# status
set -g status-interval 10
set -g status-bg colour100
setw -g window-status-current-fg black
setw -g window-status-current-bg white
 
# pane-active-border
set -g pane-active-border-fg white
 
# KeyBindings
# pane
unbind 1
bind 1 break-pane
bind 2 split-window -v
bind 3 split-window -h
 
bind C-r source-file ~/.tmux.conf
bind C-k kill-pane
bind k kill-window
unbind &
bind -r ^[ copy-mode
bind -r ^] paste-buffer
view raw .tmux.conf hosted with ❤ by GitHub

最近 tmux がないと生活できなくなってきました
皆さんも tmux ぜひ使ってみてください!!

--追記(2013/01/14)

Ubuntu には tmux 起動時に .bashrc が実行されていないバグ?がありました

回避策を見つけたので追記します

1
2
set-option -g default-shell /bin/bash
set-option -g default-command /bin/bash

.tmux.conf に追記してください

もちろん自分が普段使っているシェルに合わせてください

このエントリーをはてなブックマークに追加