Hatena::ブログ(Diary)

えこ日記

2010-11-26

GNU Screen ライクなターミナルマルチプレクサ「tmux」を使う

| 07:57

以前、コンソールでの作業に GNU Screen は必須でしたが、しばらく前からは tmux を使っています。GNU Screen 同様、tmux もターミナルを分割したり、複数のプログラムを実行したり、非常に便利に利用できます。tmux については以下に詳しく書いてありました。

基本概念

tmux の基本概念は上記サイトに詳しく書いてありますが、ちょっとおさらいしてみます。

f:id:eco31:20101123210423p:image

tmux 実行中に tmux を制御するコマンドを実行するには "Ctrl-b"(以下、「C-b」)に続けてコマンド(意味するアルファベット)を入力するか、もしくは ":"(コロン)を入力した後にコマンド名を入力します。この "Ctrl-b" を「プリフィックス・キー」と呼んでいます。

セッション

ターミナルから起動された tmux は、それぞれ「セッション」として扱われます。セッションは 1 つ以上の「ウインドウ」で構成されており、全てのウインドウを閉じるとセッションは終了します。セッションは複数、起動することが出来、"tmux list-session" でセッションの状態を確認することが出来ます。

$ tmux list-session
0: 3 windows (created Tue Nov 23 21:06:50 2010) [100x31] (attached)
1: 3 windows (created Tue Nov 23 21:06:53 2010) [100x31] (attached)
2: 3 windows (created Tue Nov 23 21:07:09 2010) [202x23]

行頭の番号がセッション番号になります。セッション番号は後述する「アタッチ」機能で利用します。

セッションのアタッチ / デタッチ

セッション内の全ウインドウを閉じると、セッションそのものが終了します。

f:id:eco31:20101123214852p:image

しかし、例えば make 中など、時間のかかる作業中に一度、セッションを離れたい場合は「デタッチ」することで、該当のセッションを(終了せずに)一時的に切り離すことが出来ます。反対に、セッションに復帰することを「アタッチ」と呼びます。セッションからデタッチするには "C-b d" を、クライアントからアタッチするには "tmux attach" を実行します。特定のセッションにアタッチしたい場合は "tmux attach -t [セッション番号]" を実行します。

f:id:eco31:20101123220410p:image

クライアント

「クライアント」とは、tmux を起動しているターミナルのことです。クライアントは "list-client" で状態を確認することが出来ます。

$ tmux list-client
/dev/pts/1: 0 [100x32 xterm] (utf8)
/dev/pts/2: 1 [100x32 xterm] (utf8)

ウインドウ

セッションからは(当然のことながら)ターミナルを開いて作業をしますが、この領域を「ウインドウ」と呼びます。ウインドウは 1 つ以上の「ペイン」で構成されており、全てのペインを閉じるとウインドウは終了します。ひとつのセッションから複数のウインドウを作成することも出来ます。もちろん、複数のセッションから複数のウインドウを作成することも出来ます。ウインドウは以下のように操作します。

f:id:eco31:20101123213607p:image

C-b c
新規にウインドウを作成します。
C-b n
次のウインドウへ移動します。
C-b p
前のウインドウへ移動します。
C-b l
直前のウインドウへ移動します。
C-b [数字]
数字で指定したウインドウへ移動します。

ウインドウの一覧は "list-window" で確認できます。

$ tmux list-window
0: bash [202x23]
    layout: cd5e,202x23,0,0
1: bash [202x23]
    layout: cd5e,202x23,0,0
2: bash [202x23]
    layout: cd5e,202x23,0,0

ペイン

ウインドウは水平、もしくは垂直方向に分割することが出来、それぞれの領域を「ペイン」と呼びます。ペインは以下のように操作します。

f:id:eco31:20101123221609p:image

C-b "
水平方向に分割します。
C-b %
垂直方向に分割します。
C-b o
次のペインに移動します。

また、"C-b q" でペインにインジゲータを表示し、インジゲータが表示されている間にペインの番号を入力することで該当ペインへ移動することも出来ます。以下はペインにインジゲータを表示した際のスクリーンショットです。

f:id:eco31:20101123223625p:image

設定ファイル

tmux の設定ファイルは ~/.tmux.conf になります(GNU Screen における、~/.screenrc に該当します)。私の場合はシンプルに二点だけ、変更しています。

  1. プリフィックス・キーを「C-j」へ変更
  2. 垂直分割を「C-j |」へ変更

実際の ~/.tmux.conf は以下の通りです。

set-option -g prefix C-j
unbind-key C-b
bind-key C-j send-prefix

bind-key | split-window -h