tmux ショートカット完全ガイド:ウィンドウ、ペイン、セッション、スクロール

tmux の Ctrl+b プレフィックス、ウィンドウ、ペイン、セッション、スクロール、設定、自動化コマンド、トラブルシューティングをまとめた実用ガイドです。

tmux は、端末内で複数のウィンドウと分割画面を管理でき、SSH 切断後もタスクを実行し続けることができます。 デフォルトのプレフィックスキーは Ctrl+b です。ほとんどのショートカットは、次の順番で操作します。

  1. Ctrl+b を押してください。
  2. 両方のキーを放します。
  3. もう一度アクションキーを押します。 たとえば、新しいウィンドウを作成するには、Ctrl+b+c を同時に押すのではなく、まず Ctrl+b を押し、放してから c を押します。

覚えておくべき最も重要なショートカットキー

1
2
3
4
5
6
Ctrl+b d       タスクを動かしたままデタッチ
Ctrl+b %       左右にペインを分割
Ctrl+b "       上下にペインを分割
Ctrl+b 矢印キー  ペインを移動
Ctrl+b z       現在のペインを拡大/復元
Ctrl+b [       履歴を表示してスクロール

終了したばかりのセッションを復元します。

1
tmux attach

インストールして tmux が利用可能であることを確認する

Debian / Ubuntu:

1
2
sudo apt update
sudo apt install tmux

Fedora:

1
sudo dnf install tmux

Arch Linux:

1
sudo pacman -S tmux

Homebrew を使用する macOS:

1
brew install tmux

インストール後にバージョンを確認します。

1
tmux -V

端末は、コマンドが現在の環境で PATH に入ったことを示す、tmux 3.x のような情報を返します。

セッションの作成、終了、再開

匿名セッションを直接開始します。

1
tmux

名前付きセッションを作成することをお勧めします。

1
tmux new -s work

work は、プロジェクト名、サーバー名、またはタスク名に置き換えることができます。 一時的に離れるときはCtrl+bを押し、離した後はdを押します。この操作はデタッチと呼ばれ、現在の端末をセッションからデタッチするだけです。セッション内のコンパイル、ダウンロード、ログ監視、およびスクリプトは引き続き実行されます。 ペインで exit を実行すると、現在のシェルが閉じられます。最後のペインが終了すると、対応するウィンドウとセッションも終了する場合があります。

操作する コマンドキーまたはショートカットキー
新しい名前付きセッションを作成する tmux new -s セッション名
セッションを見る tmux ls
最近の会話を復元する tmux attach
指定したセッションを復元する tmux attach -t セッション名
一時退場 Ctrl+b、次に d を押します
現在のセッションの名前を変更する Ctrl+b、次に $ を押します
指定されたセッションを削除します tmux kill-session -t セッション名
複数のセッションがある場合、tmux attach はターゲットが不明瞭であることを示すプロンプトを表示することがあります。まず名前を確認してください。
1
tmux ls

次に、指定したセッションを再開します。

1
tmux attach -t work

短縮コマンドも機能します。

1
tmux a -t work

ウィンドウのショートカットキー

ウィンドウはブラウザのタブに似ています。セッションには複数のウィンドウを含めることができ、各ウィンドウには複数のペインを含めることができます。

操作する ショートカットキー
新しいウィンドウ Ctrl+b、次に c を押します
次のウィンドウ Ctrl+b、次に n を押します
前のウィンドウ Ctrl+b、次に p を押します
最近使用したウィンドウ Ctrl+b、次に l を押します
Windows 0 ~ 9 に切り替える Ctrl+b、数字キーを押します
ウィンドウリストを見る Ctrl+b、次に w を押します
ウィンドウの名前を変更 Ctrl+b、次に , を押します
現在のウィンドウを閉じる Ctrl+b、次に & を押します
tmux はウィンドウを閉じるときに確認を求めます。 y と入力すると、ウィンドウ内のすべてのペインとプログラムが終了します。 & とデタッチで使用される d を混同しないでください。
ウィンドウ番号が 9 を超える場合は、Ctrl+b w を使用してリストから選択します。 Ctrl+b ' を押し、ウィンドウ番号を入力して Enter を押すこともできます。

画面分割とペイン操作

ペインは、同じウィンドウ内の独立したターミナル領域です。

操作する ショートカットキー
画面を左右に分割 Ctrl+b、次に % を押します
画面を上下に分割 Ctrl+b、次に " を押します
ペインを切り替える Ctrl+b を選択し、矢印キーを押します。
次のペインに切り替えます Ctrl+b、次に o を押します
ペイン番号を表示 Ctrl+b、次に q を押します
現在のペインを拡大または復元 Ctrl+b、次に z を押します
現在のペインを閉じる Ctrl+b、次に x を押します
プリセットレイアウトを回転する Ctrl+b、スペースを押します
Ctrl+b q を押すと、各ペインに番号が一時的に表示されます。番号が画面上にある間に対応する番号を押すと、直接ジャンプします。
Ctrl+b z は表示範囲を変更するだけで、他のペインは削除しません。再度実行すると元のレイアウトに戻ります。

ペインのサイズを変更する

一般的な操作は、最初に Ctrl+b を押し、次に Ctrl を押したまま方向キーを押し続けることです。端末がキーの組み合わせを傍受した場合は、tmux コマンドを使用できます。 まず Ctrl+b : を押して、次のように入力します。

1
2
3
4
resize-pane -L 5
resize-pane -R 5
resize-pane -U 3
resize-pane -D 3

LRUD はそれぞれ左、右、上、下を表し、数字は調整する単位の数を表します。 現在のペインの幅または高さをパーセントで設定します。

1
2
resize-pane -x 70%
resize-pane -y 60%

履歴出力をスクロールする

通常の端末のスクロール ホイールでは、tmux 履歴を直接スクロールできない場合があります。まずコピー モードに入ります。

1
Ctrl+b [
操作する ボタン
行ごとに移動 矢印キー
ページアップ PageUp
ページダウン PageDown
一番上にジャンプ g、vi モードを使用する必要があります
最下位にジャンプする G、vi モードを使用する必要があります
検索 /、vi モードを使用する必要があります
コピーモードを終了する q または Esc
gG、および / の動作が異なる場合は、通常、emacs スタイルのキーストロークが使用されていることが原因です。 Vi モードは ~/.tmux.conf で有効にできます。
1
set-window-option -g mode-keys vi

テキストをコピーして貼り付けます

vi モードを使用する場合、一般的なプロセスは次のとおりです。

  1. Ctrl+b [ を押してコピー モードに入ります。
  2. 開始点に移動します。
  3. スペースを押して選択を開始します。
  4. 終点に移動します。
  5. Enter を押して tmux バッファにコピーします。
  6. Ctrl+b ] を押して貼り付けます。 異なるバージョンまたはカスタム構成では、v を使用して選択を開始し、y を使用してコピーを完了する場合があります。 Ctrl+b ? を押して、現在の実際のバインディングを表示します。 tmux バッファを表示して保存します。
1
2
tmux show-buffer
tmux save-buffer ~/tmux-buffer.txt

マウス操作を有効にする

マウスを使用してペインを選択し、境界線を調整し、スクロールする場合は、~/.tmux.conf を追加します。

1
set -g mouse on

構成をリロードします。

1
tmux source-file ~/.tmux.conf

マウスをオンにすると、通常、スクロール ホイールは自動的にコピー モードになります。一部の端末では、マウスの選択が tmux によって引き継がれます。端末のネイティブ選択を使用する必要がある場合は、Shift を押したままドラッグしてみてください。

十分な基本構成

~/.tmux.confを編集します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# マウス操作を有効化
set -g mouse on

# スクロールバック容量を増やす
set -g history-limit 50000

# ウィンドウとペインの番号を 1 から開始
set -g base-index 1
setw -g pane-base-index 1

# ウィンドウを閉じた後に番号を詰める
set -g renumber-windows on

# vi 形式のコピーモードを使用
setw -g mode-keys vi

# キーシーケンスの待ち時間を短縮
set -sg escape-time 10

保存後、次を実行します。

1
tmux source-file ~/.tmux.conf

Ctrl+b : を押して、source-file ~/.tmux.conf と入力することもできます。設定に構文エラーがある場合、tmux は行番号を指摘します。最近追加した構成をコメントアウトし、ファイル全体を削除せずに再試行してください。

デフォルトのプレフィックスキーを変更する

Ctrl+b がエディターのショートカットキーと競合する場合は、Ctrl+a に変更できます。

1
2
3
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

ロード後、この記事のすべての Ctrl+b 操作を Ctrl+a に置き換える必要があります。最後の行は、ネストされた tmux にプレフィックスを送信するために使用されます。

SSH切断後にタスクを再開する

長いタスクをリモートで実行する場合は、次のプロセスに従うことができます。

1
2
3
ssh user@server
tmux new -s train
./run-task.sh

終了する必要がある場合は、Ctrl+b d を押して SSH を終了します。予期しないネットワーク切断が発生しても、セッションは存続することがよくあります。 再接続後、次を実行します。

1
2
tmux ls
tmux attach -t train

tmux は端末セッションを保存することしかできず、エラーで終了したプログラムを自動的に復活させることはできません。重要なタスクは引き続き記録する必要があります。

1
./run-task.sh 2>&1 | tee -a task.log

よくあるエラーと解決策

no server running

tmux ls を実行すると、no server running on /tmp/tmux-... が表示され、現在のユーザーが tmux サーバーを実行していないことを示します。セッションを再作成するだけです。

1
tmux new -s work

sessions should be nested with care

これは、現在のシェルがすでに tmux にあり、tmux が実行されていることを意味します。最初のチェック:

1
echo "$TMUX"

出力がある場合は、まず Ctrl+b c を押して新しいウィンドウを作成するか、次のコマンドを使用してセッションを切り替えます。

1
tmux switch-client -t セッション名

attach 後に画面サイズが合わない

異なるサイズの端末が同じセッションに接続されている場合、表示領域は小さいクライアントの影響を受ける可能性があります。他のクライアントはリカバリ中に切断される可能性があります。

1
tmux attach -d -t work

既存のクライアントを表示します。

1
tmux list-clients

ショートカットキーが反応しない

順番に確認してください:

  1. 最初にプレフィックスを押して放すかどうか。
  2. 構成内でプレフィックスが変更されているかどうか。
  3. 端末またはリモート デスクトップがキーの組み合わせを傍受するかどうか。
  4. ネストされた tmux 内かどうか。
  5. 現在のバインディングがプラグインによって上書きされるかどうか。 すべての実際のバインディングを表示します。
1
Ctrl+b ?

シェルから分割画面バインディングをクエリします。

1
tmux list-keys | grep 'split-window'

ペインまたはセッションを誤って閉じてしまう

tmux には一般的なシャットダウンを元に戻す機能がありません。閉じる前に、保存されていないエディター、対話型タスク、ファイルへの未書き込みの出力がないことを確認してください。 tee を使用してログを保存すると、誤ってペインを閉じた後の損失を軽減できます。

安全なシャットダウンとクリーンアップ

セッションを終了するだけです。

1
tmux kill-session -t work

work を維持し、他のセッションを終了します。

1
tmux kill-session -a -t work

現在のユーザーの tmux サーバー全体を終了します。

1
tmux kill-server

kill-server は、サーバーによって管理されているすべてのセッションとその中のプロセスを閉じます。実行前に、tmux ls を実行して、保持する必要のあるタスクがないことを確認します。

セッション、ウィンドウ、ペインを正確に指定する

tmux コマンドは、多くの場合、-t を使用してターゲットを指定します。完全なターゲット形式は次のとおりです。

1
セッション名:ウィンドウ番号.ペイン番号

たとえば、work:1.2 は、work セッションのウィンドウ 1、ペイン 2 を表します。

現在の目標を表示します。

1
tmux display-message -p '#S:#I.#P'

すべてのウィンドウをリストします。

1
tmux list-windows -a

すべてのペインとその現在のコマンドをリストします。

1
tmux list-panes -a -F '#S:#I.#P #{pane_current_command}'

この記述方法は、複数のセッション間でタスクの場所をトラブルシューティングするのに適しており、他の端末を誤って閉じることを避けるために、指定されたペインのみを操作するスクリプトにも適しています。

ターゲットでは一部のフィールドを省略できます。現在のセッションのウィンドウ 2 は :2 として書き込むことができ、現在のウィンドウのペイン 1 は .1 として書き込むことができます。現在のフォーカスの変更によって生じる曖昧さを軽減するために、自動化スクリプトで完全なターゲットを使用することをお勧めします。

シェルからウィンドウを作成し、画面を分割する

キーボード ショートカットに加えて、tmux コマンドを直接呼び出すこともできます。 work セッションへの新しいウィンドウを作成します。

1
tmux new-window -t work -n logs

ウィンドウ内に左右の分割画面を作成します。

1
tmux split-window -h -t work:logs

上下分割画面を作成します。

1
tmux split-window -v -t work:logs

ペインを作成するときにコマンドを直接実行します。

1
tmux split-window -h -t work:logs 'tail -f /var/log/syslog'

コマンドが終了すると、コマンドを含むペインが閉じます。最終出力を確認したい場合は、コマンドの後に持続するようにシェルに指示できます。

1
tmux split-window -h -t work:logs 'tail -n 100 /var/log/syslog; exec bash'

リモート実稼働環境では、パスワードを必要とするコマンドをシェル履歴に直接書き込まないでください。既存の認証メカニズムを使用し、必要なファイルのみを読み取るようにログ ペインを制限します。

バックグラウンドセッションへコマンドを送信する

send-keys は、指定されたペインへのキーボード入力をシミュレートできます。

1
tmux send-keys -t work:server.0 'npm run dev' Enter

実行中のフォアグラウンド プログラムに Ctrl+c を送信します。

1
tmux send-keys -t work:server.0 C-c

コマンドを送信する前に、ペイン上で現在実行されているプログラムを確認してください。

1
tmux display-message -p -t work:server.0 '#{pane_current_command}'

出力がエディター、データベース クライアント、またはその他の対話型プログラムである場合、テキストを直接送信するとデータが変更される可能性があります。自動化する場合は、タスク専用のセッションと固定ウィンドウ名を用意し、一時的な番号に依存しないようにしてください。

バックグラウンド セッションを作成し、タスクを開始します。

1
2
tmux new-session -d -s backup
tmux send-keys -t backup:0 'bash ~/backup.sh 2>&1 | tee -a ~/backup.log' Enter

セッションが存在するかどうかを確認します。

1
2
tmux has-session -t backup
echo $?

戻りコード 0 は、ターゲット セッションが存在することを示します。これは tmux セッションがまだ存在していることを示しているだけであり、スクリプトが成功したことを示しているわけではありません。終了ステータス、ログ、または出力ファイルも確認する必要があります。

トラブルシューティングのためにペイン出力をキャプチャする

セッションに入らずにペイン履歴を読むこともできます。

1
tmux capture-pane -p -t work:server.0

最後の 100 行のみを取得します。

1
tmux capture-pane -p -S -100 -t work:server.0

ファイルに保存:

1
tmux capture-pane -p -S -500 -t work:server.0 > server-output.txt

capture-pane は、tmux によって保存された画面と履歴の内容を読み取ります。プログラム出力が history-limit を超える場合、以前の内容を復元することはできません。

長期的な監査が必要なタスクでは、tmux 履歴のみに依存するのではなく、プログラムに独自のログを書き込ませる必要があります。ログにトークン、接続文字列、またはユーザー データが含まれている場合は、適切なファイル権限と保存期間も設定する必要があります。

セッションにまだクライアントが存在するかどうかを確認する

次のコマンドは、どの端末がまだ tmux に接続されているかを確認できます。

1
tmux list-clients -F '#{client_name} session=#{session_name} tty=#{client_tty}'

メンテナンス期間の前に排他的セッションが必要な場合は、まず他のユーザーに通知してから、attach -d を使用してクライアントを切断するかどうかを決定します。

クライアント リストが空であっても、タスクが終了したことを意味するのではなく、現在セッションを表示している端末がないことを意味するだけです。

よくある質問

detach するとプログラムは停止しますか?

しません。 Ctrl+b d はクライアントのみを切断します。プログラムが実行し続けるかどうかは、サーバーがシャットダウンされるか、再起動されるか、または別のメカニズムによってプロセスが終了されるかによっても異なります。

Ctrl+b % でパーセント記号が入力されるのはなぜですか?

通常、トリガーの接頭辞がないか、キーが同時に組み合わせて押されます。最初に Ctrl+b を押し、% を入力する前にすべて放します。ほとんどのキーボード レイアウトには Shift+5 が必要です。

ダブルクォートを入力しにくいのはなぜですか?

最初にプレフィックスをトリガーし、次に現在のキーボード レイアウトに対応する二重引用符の組み合わせ (通常は Shift+') を使用します。構成内で、より便利な分割画面キーを再バインドすることもできます。

現在のセッション、ウィンドウ、ペインを確認するには?

1
tmux display-message -p '#S:#I.#P'

出力は、セッション名、ウィンドウ番号、ペイン番号の順です。

要点

tmux の構造は 3 つの層に分かれています。セッションは作業環境全体を保存し、ウィンドウはタスクを区別し、ペインは画面の分割を担当します。 毎日のプロセスは、tmux new -s 名前 を使用してセッションを作成し、ウィンドウと分割画面を通じてタスクを整理し、Ctrl+b d を押して安全に終了し、tmux attach -t 名前 を使用して再開します。 ショートカットを忘れた場合は、Ctrl+b ? を押して、現在の構成内の実際のバインディングを確認します。これは、完全なリストを記憶するよりも信頼性が高くなります。