Ubuntu Weekly Recipe

第127回 ターミナルマルチプレクサ tmuxを使ってみよう

この記事を読むのに必要な時間:およそ 4 分

tmuxの操作

既にいくつかのコマンドを紹介した通り,tmuxはコマンドで機能を呼び出すことができます。screenのようなショートカットも用意されていますが,これらは任意のキーにコマンドをバインドすることで実現されています。このあたりは関数をキーにバインドするEmacsに似ているかもしれません。ショートカットはscreenと同様prefixキーを用いて入力し,デフォルトのprefixキーはCtrl+bに設定されています。現在のキーのリストはlist-keysコマンドか,C-b ?キーで見ることができますので,一通り目を通しておきましょう。また,使用できるコマンドの詳細はman tmuxを参照してください。

表1 tmuxの主な操作

キーバインドコマンド
C-b ?ショートカットキーのリストを表示
C-b c新しいウィンドウを作成
C-b n次のウィンドウへ移動
C-b p前のウィンドウへ移動
C-b wウィンドウの選択メニューを表示
C-b dセッションのデタッチ
C-b :コマンドプロンプトの開始
C-b [コピーモードの開始
C-b ]バッファ内容のペースト
C-b qペインのインジケータを表示
C-b tペイン全体に時計を表示
C-b %ウィンドウを左右のペインに分割
C-b o次のペインへ移動
C-b {ペインの入れ替え
C-b }ペインの入れ替え(逆順)
C-b M-↑ペインの上下分割位置を上へ移動
C-b M-↓ペインの上下分割位置を下へ移動
C-b M-←ペインの左右分割位置を左へ移動
C-b M-→ペインの左右分割位置を右へ移動
C-b xペインの破棄

tmuxでのコピー&ペースト

tmuxでもscreenと同様,コピー&ペーストを行うことが可能です。tmuxの操作方法はscreenによく似ていますが,screenのコピーモードがviをベースとしたキーバインドになっているのに対し,tmuxではEmacsベースのキーバインドになっている点が異なります。設定の変更でviベースのキーバインドにすることもできますが,デフォルトはEmacsベースです注5⁠。

注5
大事なことなので二度言いました。

C-b [でコピーモードを開始したら,C-n,C-p,C-f,C-b,C-a,C-eといったEmacsライクなカーソル移動が可能になります。コピーモードではscreenと同様,バックスクロール機能がない端末でもスクロールアウトしてしまったバックログを遡っていくことができます。余談ですが,tmuxにはもともとバックスクロールを閲覧する専用のモードが用意されていたのですが,バージョン1.1からはコピーモードに統合されました。そのかわりといってはなんですが,Page Up/Page Downキーを使えばカーソル位置を変えずにバックログを辿ることができます。

コピーの開始位置まで移動できたら,C-Spaceでマークをセットします。次にコピーの終点までカーソルを動かし,C-wで選択領域をコピーバッファに取り込むことができます。ペーストにはC-b ]を使いましょう。

tmuxではEmacsのキルリングのように,コピーした内容はセッションごとに持っているペーストバッファにスタックされ,複数保存しています。バッファの内容はlist-bufferコマンドで確認することができるほか,copy-bufferコマンドで別のセッションにコピーすることも可能です。キーバインドからペーストを行う場合は最後にスタックに積んだバッファ内容がペーストされますが,paste-bufferコマンドにlist-bufferで得られるバッファ番号を与えれば,任意のバッファをペーストできます。詳細はmanのBUFFERSセクションを参考にしてください。

図6 範囲選択中は選択した部分が反転表示されるので分かりやすい。右上にはバックログの行数と現在位置も表示されている

図6 範囲選択中は選択した部分が反転表示されるので分かりやすい

tmuxでのデタッチ/アタッチ

tmuxはscreen同様に回線が切断された時などに自動でデタッチする他,C-b dキーバインドや,detach-clientコマンドでセッションをデタッチすることができるようになっています。

アタッチするにはtmuxを起動する際にtmux attachとしましょう。この際-tオプションでターゲットとなるセッションを指定することができます。セッション番号はlist-sessionコマンドで取得することができますので,複数のtmuxセッションを立ち上げている場合は確認してみましょう。なお,ひとつのセッションに複数のクライアントをアタッチすることも可能です。

tmuxの設定

tmuxの設定ファイルは~/.tmux.confです。/usr/share/doc/tmux/examplesに設定例がいくつか存在しますので,これを参考にするのもよいでしょう。例えばscreen-keys.confを~/.tmux.confにコピーするだけで,GNU Screenのデフォルトと同様のキーバインドを実現することができるようになっています。筆者はscreen-keys.confをベースに,Prefixを^Zに変更して使っています。前述の通りtmuxは設定を行わなくてもそれなりに動作してしまいますので,最初はこの程度で充分でしょう。

既存のキーバインドを解除するにはunbind,新しいキーバインドを設定するにはbind,オプションの設定にはset-option(省略形はset)を使います。例えばPrefixキーをC-bからC-zに変更するには,~/.tmux.confに次のように記述します。-gはグローバルの意味で,-gをつけて設定したオプション値は,tmux全体で有効になります。

unbind C-b
set-option -g prefix C-z
bind C-z send-prefix

ペーストバッファはデフォルトで9個用意されていますが,この個数を変更するにはbuffer-limitに値を変更します。同様にバックログの行数はデフォルトで2000行ですが,この行数を変更するにはhistory-limitの値を変更します。以下はペーストバッファを20,バックログを5,000行に設定する例になります。

set-option -g buffer-limit 20
set-option -g history-limit 5000

tmux 1.2

Ubuntu 10.04でリポジトリから導入できるtmuxは1.1ですが,Debian unstableには既に1.2のパッケージが存在します。これをUbuntu 10.04上でリビルドしたパッケージを,筆者のPPAに置いておきました。

tmux 1.2ではイベント通知ライブラリにlibeventを使うようになった他,新しいオプションやコマンドが追加されています。コマンドのオプションに指定するターゲットウィンドウでは,!や+-で,最後に使ったウィンドウや前後のウィンドウを指定することも可能になっています。1.1からの詳細な変更点はCHANGELOGを参照してください。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。