tmux の導入から使い方まで

いつもお世話になっているtmuxについて改めてまとめてみました。

ターミナル・マルチプレクサ 「tmux」では何ができるのか

・ターミナルの状態を維持しつつ、セッションの切断、再開ができる。
・1つのターミナル上に複数のターミナルを表示できる。
とかとか

導入するメリット

・ssh の接続が切れても tmux のセッションが裏で動いているので作業を再開できる。
・別の端末から同じ作業ができる。
・タブをいっぱい開かなくてもいい。
とかとか

インストールする

Homebrew(Mac) でインストールする

$ brew install tmux

yum でインストールする

$ sudo yum install tmux

apt-get でインストールする

$ sudo apt-get install tmux

設定ファイル

$ vim .tmux.conf

※コマンドは以下のように省略できる

command short command
set-option set
set-window-option setw
bind-key bind
unbind-key unbind

基本的な使い方

キーバインド 動作
C-a ? キーバインドの一覧を表示する
C-a r 設定ファイルのリロード
C-a * サーバーにアタッチしているクライアント一覧を表示する
C-a c 新しいウィンドウを作成する
C-a , 現在のウィンドウ名変更する
C-a p 前のウィンドウへ移動する
C-a n 次のウィンドウへ移動する
C-a ウィンドウ番号 指定したウィンドウ番号へ移動する
C-a & ウィンドウを強制終了する
C-a w ウィンドウ一覧を表示する
C-a | 縦にペイン分割する
C-a - 横にペイン分割する
C-a z ペインを最大化する
C-a x ペインを強制終了する
C-a h ペイン間を移動する(左)
C-a j ペイン間を移動する(下)
C-a k ペイン間を移動する(上)
C-a l ペイン間を移動する(右)
C-a H 現在のペインのサイズを変更する
C-a J 残材のペインのサイズを変更する
C-a K 現在のペインのサイズを変更する
C-a L 現在のペインのサイズを変更する
C-a d デタッチする
tmux attach アタッチする(最後に作成されたセッションがアタッチされる)
tmux attach -t セッション名 セッションを指定してアタッチする

※ CはControlキー

Macとクリップボードを連携する

http://yonchu.hatenablog.com/entry/20120514/1337026014

の通りにやればOK。

reattach-to-user-namespace をインストールする

$ brew install reattach-to-user-namespace

tmuxxとtmux-pbcopyスクリプトをPATHの通った場所に置く。

https://github.com/kzy52/dotfiles/blob/master/bin/tmuxx https://github.com/kzy52/dotfiles/blob/master/bin/tmux-pbcopy

  1. コピーモードに入る
    C-a [

  2. viキーバインド(hjkl)で選択したい場所に移動する

  3. 範囲選択モードに入る
    Space

  4. 選択範囲をコピーする
    Enter

  5. ペースト
    C-a ]

  6. クリップボードにコピー
    C-a y

※ 4ではtmuxのバッファにしかコピーされないのでクリップボードに入れたい場合は6を実行する

使用例

  1. リモートサーバーにログインし、tmux の新しいセッションを開始する
$ ssh example.com
$ tmux new -s session_name
  1. セッションをデタッチし、ログアウトする
<prefix> d
$ exit
  1. 再度 ssh ログインしてセッションをアタッチする
$ ssh example.com
$ tmux attach -t session_name

これでいちどネットワークが切れてしまっても作業を再開することができるようになる。

おまけ

Railsでの開発をする時は以下のようなスクリプトをパスの通った場所におき、 作業を始める際に以下を実行しています。
SESSION_NAMEとROOT_DIRを適宜変更してください。

$ sh bin/setup-rails.sh

以下のようになります。

f:id:kzy52:20140103104659p:plain