tmuxはすごく便利です。ですが操作やコマンドをよく忘れそうになるので、インストールから基本操作、設定ファイル、よくあるトラブルまでを1本にまとめました。この記事のキー操作は、初期設定のプレフィックスキー(Ctrl + b)で書いています。
tmuxとは
tmuxは、1つのターミナルの中で複数の作業画面を作ったり、画面を分割したりできるソフトです(ターミナルマルチプレクサと呼ばれます)。
個人的に一番大事だと思っている機能は、ターミナルを閉じてもセッションが残ることです。TeraTermなどでSSH接続して作業し、SSHを終了すると、普通は次にログインしたときに最初の画面からやり直しになります。tmuxの中で作業しておけば、もう一度セッションにつなぎ直す(アタッチする)ことで、続きから作業できます。

tmuxのインストール
多くのOSでは、パッケージマネージャーからインストールできます。tmuxの公式Wikiに載っているコマンドは次のとおりです(必要に応じて先頭にsudoを付けてください)。
| 環境 | インストールコマンド |
|---|---|
| Arch Linux | pacman -S tmux |
| Debian / Ubuntu | apt install tmux |
| Fedora | dnf install tmux |
| RHEL / CentOS | yum install tmux |
| macOS(Homebrew) | brew install tmux |
僕はArch Linuxを使っているので、次のコマンドでインストールしました。
sudo pacman -S tmuxインストールできたか確認するには、バージョンを表示します。
tmux -Vセッション・ウィンドウ・ペインの関係
tmuxを触り始めると、セッション、ウィンドウ、ペインの違いがわかりにくいかもしれません。「セッションの中にウィンドウがあって、ウィンドウの中にペインがある」くらいの認識で大丈夫です。
| 単位 | イメージ | 使いどころ |
|---|---|---|
| セッション | 作業のまとまり全体。デタッチしても残る | サーバーごと、プロジェクトごと |
| ウィンドウ | セッションの中のタブのようなもの | やること別に分ける |
| ペイン | ウィンドウを分割した1つ1つの画面 | 編集と実行を並べる |

個人的にはセッションを複数作ることはあまりなく、ウィンドウとペインを使い分けることが多いです。
セッションの操作
セッションを作る
名前を付けるかどうかでコマンドが変わります。チームで作業をしない限り、特に名前をつけることは少ないです(少なくとも僕はつけることは少ないです)。ただ、接続先のサーバーを間違えないように、サーバー名をセッション名にするのは良いと思います。
# 何も考えずに新しいセッションを開始
tmux
# my_sessionという名前をつけてセッションを開始
tmux new-session -s my_sessionセッションから抜ける(デタッチ)
デタッチは、セッションを終了させずに抜けることです。抜けたあとも、中で動いているプログラムはそのまま動き続けます。
# コマンドでデタッチする
tmux detach-client
# キー入力でデタッチする
Ctrl + b を入力後 dセッションの一覧を見る・つなぎ直す(アタッチ)
デタッチしたセッションにもう一度つなぐ前に、名前を確認します。作成時に名前をつけていればその名前、つけていなければ0から順番に番号がつきます。
# セッションの一覧表示
tmux list-sessions
# 最後に使ったセッションにアタッチ
tmux attach-session
# 名前を指定してアタッチ
tmux attach-session -t my_sessionセッションの名前を変える・終了する
とりあえず何も考えずにtmuxを立ち上げて、セッション名が0のような数字になっているときに、あとから名前を変えたくなることがあります。
# my_sessionをnew_sessionに変更
tmux rename-session -t my_session new_session
# キー入力で今のセッションの名前を変更
Ctrl + b を入力後 $
# セッションを終了する
tmux kill-session -t new_sessionウィンドウの操作
個人的にはウィンドウはやること別に分けることが多いです。たとえば、Pythonでなにか作るウィンドウと、Neovimの設定をいじるウィンドウを分けたりします。
# ウィンドウを作成
tmux new-window
# neovimという名前をつけて作成
tmux new-window -n neovim
# キー入力でウィンドウを作成
Ctrl + b を入力後 c
# 次・前のウィンドウに移動
Ctrl + b を入力後 n / p
# 一覧から選んで移動
Ctrl + b を入力後 w
# 今のウィンドウを閉じる(確認あり)
Ctrl + b を入力後 &ペインの操作
ペインは画面を分割する機能です。個人的にはだいたい左右2つに分けて、左のペインでスクリプトを書きながら、右のペインで実行して動作を確認しています。家の環境だと画面が大きいので、右側をさらに上下に分けて、上で参考にするテキストファイルを開き、下でスクリプトを実行したりします。
# 左右に分割
tmux split-window -h
Ctrl + b を入力後 %
# 上下に分割
tmux split-window
Ctrl + b を入力後 "
# 次のペインに移動
Ctrl + b を入力後 o
# ペイン番号を表示(番号を押すとそのペインへ移動)
Ctrl + b を入力後 q
# 今のペインを最大化・元に戻す
Ctrl + b を入力後 z
# 今のペインを閉じる(確認あり)
Ctrl + b を入力後 x以前の記事では左右と上下の分割キーを逆に書いていました。左右に分割するのが %、上下に分割するのが ” です。

よく使うキー操作の一覧
どれも、プレフィックスキー(初期設定はCtrl + b)を押して離してから、表のキーを押します。
| キー | 動作 |
|---|---|
| d | セッションからデタッチ |
| s | セッションの一覧から選ぶ |
| $ | セッション名を変更 |
| c | 新しいウィンドウを作る |
| n / p | 次 / 前のウィンドウへ |
| w | ウィンドウの一覧から選ぶ |
| , | ウィンドウ名を変更 |
| & | ウィンドウを閉じる |
| % | 左右に分割 |
| “ | 上下に分割 |
| o | 次のペインへ |
| q | ペイン番号を表示 |
| z | ペインの最大化 / 元に戻す |
| x | ペインを閉じる |
| [ | コピーモード(スクロール)に入る |
| : | コマンドを入力する |
| ? | キー操作の一覧を表示 |
.tmux.confの設定例
設定はホームディレクトリの .tmux.conf に書きます。Ctrl + bはほかのアプリのショートカットとぶつかりやすいので、Ctrl + tやCtrl + sに変えている人が多いと思います。僕はCtrl + sを使っています(Caps LockをCtrlに変えているので押しやすく、Neovimのキー操作ともかぶらないため)。
# プレフィックスキーをCtrl + sに変更
unbind C-b
set -g prefix C-s
bind C-s send-prefix
# マウスでペインの選択・サイズ変更・スクロールをできるようにする
set -g mouse on
# ウィンドウとペインの番号を1から始める
set -g base-index 1
setw -g pane-base-index 1
# Escキーの反応を速くする(Neovimを使う人向け)
set -sg escape-time 10
# スクロールできる行数を増やす
set -g history-limit 10000
# 分割したペインで今のディレクトリを引き継ぐ
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
# Prefix + r で設定を再読み込み
bind r source-file ~/.tmux.conf \; display "reloaded"設定を書き換えたら、tmuxの中で次のコマンドを実行すると反映されます。
tmux source-file ~/.tmux.confよくあるトラブル
「sessions should be nested with care」と出る
tmuxの中でさらにtmuxを起動しようとすると表示されます。新しく起動するのではなく、Ctrl + b → s で一覧から切り替えるか、一度デタッチしてから別のセッションにアタッチします。
「no sessions」「can’t find session」と出る
アタッチしようとしたセッションがない(名前が違う、またはサーバーの再起動などで消えた)ときに表示されます。tmux list-sessions で名前を確認してください。tmuxのセッションはOSを再起動すると消えます。
マウスでスクロールできない
初期設定ではマウスが無効です。.tmux.confに set -g mouse on を書くか、Ctrl + b → [ でコピーモードに入ってから矢印キーやPageUpでスクロールします。コピーモードは q で抜けます。
設定ファイルを変えても反映されない
tmuxはセッションが1つでも残っていると、設定ファイルを読み直しません。tmux source-file ~/.tmux.conf を実行するか、すべてのセッションを終了してから起動し直します。
Neovimでの色がおかしい・Escが遅い
Escが遅いときは、上の設定例の escape-time を小さくします。色については、tmuxの中の端末の種類(TERM)の設定が関係していることが多いので、tmuxの中と外で echo の結果を比べてみてください。
# tmuxの外と中でそれぞれ実行して比べる
echo "$TERM"まとめ
tmuxは、セッションを残したまま抜けられること、画面を分割できることの2つを覚えておけば、まずは十分に便利に使えます。キー操作は忘れても Ctrl + b → ? で一覧が出せるので、使いながら少しずつ覚えていくのがおすすめです。

コメント