# tmux クイックリファレンス

*セッション、ウィンドウ、ペイン、コピーモード、設定*

> Source: tmux Documentation (github.com/tmux/tmux) · MIT

## セッション管理

### 作成とアタッチ

```
tmux                        # new session
tmux new -s work            # new named session
tmux attach -t work         # attach to session
tmux attach -dt work        # detach others, attach
```

### セッションコマンド

| Command | Description |
|---------|-------------|
| `tmux ls` | すべてのセッションを一覧表示 |
| `tmux kill-session -t work` | 指定セッションを終了 |
| `tmux kill-server` | tmux サーバーとすべてのセッションを終了 |
| `tmux rename-session -t old new` | セッションの名前を変更 |
| `Prefix d` | 現在のセッションからデタッチ |
| `Prefix $` | 現在のセッションを名前変更 |
| `Prefix s` | セッション一覧（インタラクティブ） |

*デフォルトのプレフィックスは Ctrl-b*

## ウィンドウ

### ウィンドウのキーバインド

| Command | Description |
|---------|-------------|
| `Prefix c` | 新しいウィンドウを作成 |
| `Prefix ,` | 現在のウィンドウを名前変更 |
| `Prefix &` | 現在のウィンドウを閉じる（確認あり） |
| `Prefix n` | 次のウィンドウへ |
| `Prefix p` | 前のウィンドウへ |
| `Prefix 0-9` | 番号でウィンドウに切り替え |
| `Prefix w` | ウィンドウ一覧（インタラクティブ選択） |
| `Prefix l` | 直前のアクティブウィンドウに切り替え |

### ウィンドウコマンド

```
tmux new-window -t work     # new window in session
tmux swap-window -t 0       # move window to index 0
tmux move-window -t 3       # renumber to index 3
```

## ペイン

### 分割と閉じる

| Command | Description |
|---------|-------------|
| `Prefix %` | 水平分割（左 \| 右） |
| `Prefix "` | 垂直分割（上 / 下） |
| `Prefix x` | 現在のペインを閉じる（確認あり） |
| `Prefix !` | ペインを独立したウィンドウに分離 |
| `Prefix z` | ペインのズームを切り替え（全画面表示） |

### ペインのリサイズ

| Command | Description |
|---------|-------------|
| `Prefix Ctrl-Arrow` | 1 セル分リサイズ |
| `Prefix Alt-Arrow` | 5 セル分リサイズ |
| `Prefix Space` | レイアウトを順番に切り替え |

*レイアウト: even-horizontal, even-vertical, main-horizontal, main-vertical, tiled*

## ナビゲーション

### ペイン間の移動

| Command | Description |
|---------|-------------|
| `Prefix Arrow` | 方向のペインへ移動 |
| `Prefix o` | 次のペインへ順番に移動 |
| `Prefix q` | ペイン番号を表示し、番号を押してジャンプ |
| `Prefix {` | 前のペインと入れ替え |
| `Prefix }` | 次のペインと入れ替え |

### セッション間の移動

| Command | Description |
|---------|-------------|
| `Prefix (` | 前のセッションへ切り替え |
| `Prefix )` | 次のセッションへ切り替え |
| `Prefix s` | セッション選択（ツリービュー） |
| `Prefix w` | すべてのセッションのウィンドウ選択 |

## コピーモード

### 入力とナビゲーション

| Command | Description |
|---------|-------------|
| `Prefix [` | コピーモードに入る |
| `q` | コピーモードを終了 |
| `Arrow / hjkl` | カーソル移動（vi モード） |
| `Ctrl-u / Ctrl-d` | ページアップ / ページダウン |
| `g / G` | 先頭 / 末尾にジャンプ |
| `/` | 前方検索 |
| `?` | 後方検索 |
| `n / N` | 次 / 前の検索マッチへ |

### 選択とコピー

| Command | Description |
|---------|-------------|
| `Space` | 選択開始（vi モード） |
| `Enter` | 選択をコピーして終了 |
| `Prefix ]` | バッファを貼り付け |
| `v` | 矩形選択の切り替え（vi モード） |

*vi モード有効化: set -g mode-keys vi*

## 設定

### 一般的な設定（~/.tmux.conf）

```
set -g mouse on                 # enable mouse
set -g base-index 1             # windows start at 1
set -g renumber-windows on      # renumber on close
set -g default-terminal "tmux-256color"
set -g history-limit 50000
```

### 設定の再読み込み

```
tmux source-file ~/.tmux.conf   # from shell
# or Prefix : then type:
source-file ~/.tmux.conf
```

## ステータスバー

### ステータスバーオプション

```
set -g status-position top
set -g status-style "bg=black,fg=white"
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b"
set -g status-interval 5
```

### フォーマット変数

| Command | Description |
|---------|-------------|
| `#S` | セッション名 |
| `#I` | ウィンドウインデックス |
| `#W` | ウィンドウ名 |
| `#P` | ペインインデックス |
| `#H` | ホスト名 |
| `#T` | ペインタイトル |

## キーバインド

### カスタムバインド

```
# change prefix to Ctrl-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# vim-style pane navigation
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
```

### バインド構文

| Command | Description |
|---------|-------------|
| `bind X command` | Prefix + X をコマンドにバインド |
| `bind -n M-Left prev` | プレフィックスなしでバインド（Alt-Left） |
| `bind -r H resize-pane -L 5` | 繰り返し可能なバインド |
| `unbind X` | バインドを解除 |
| `Prefix ?` | 現在のキーバインド一覧を表示 |

## スクリプティング

### スクリプトでレイアウト作成

```
tmux new-session -d -s dev
tmux send-keys -t dev "vim" Enter
tmux split-window -h -t dev
tmux send-keys -t dev "npm run dev" Enter
tmux attach -t dev
```

### 便利なコマンド

| Command | Description |
|---------|-------------|
| `tmux send-keys -t sess 'cmd' Enter` | セッションにキーストロークを送信 |
| `tmux capture-pane -p` | ペインの内容を stdout に出力 |
| `tmux display-message '#S'` | メッセージ/変数を表示 |
| `tmux set-environment -g VAR val` | 環境変数を設定 |
| `tmux list-keys` | すべてのキーバインドを一覧表示 |

## よく使うパターン

### 推奨 ~/.tmux.conf

```
set -g mouse on
set -g base-index 1
set -g mode-keys vi
set -g status-position top
set -g history-limit 50000
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
```

### クイックレシピ

| Command | Description |
|---------|-------------|
| `Survive SSH disconnect` | `tmux new -s work` → 切断 → `tmux attach -t work` |
| `Share session` | 両ユーザーが `tmux attach -t same`（読み取り専用: `-r`） |
| `Save scrollback` | `tmux capture-pane -S -3000 -p > log.txt` |
| `Kill stuck pane` | Prefix x、または `tmux kill-pane -t %N` |
| `Reorder windows` | `:swap-window -s 3 -t 1` |
