# GNU Screen クイックリファレンス

*セッション、ウィンドウ、分割、コピーモード、共有*

> Source: GNU Screen Manual (gnu.org/software/screen) · MIT

## セッション管理

### セッションの作成と一覧表示

```
screen                        # 名前なし新規セッション
screen -S work                # "work" という名前で新規セッション
screen -ls                    # すべてのセッションを一覧表示
screen -list                  # -ls と同じ
```

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

| Command | Description |
|---------|-------------|
| `screen -S name` | 名前付き新規セッションを開始 |
| `screen -r name` | デタッチされたセッションに再アタッチ |
| `screen -x name` | アタッチ中のセッションを共有する |
| `screen -d name` | リモートセッションをデタッチ |
| `screen -d -r name` | 他でデタッチしてここで再アタッチ |
| `screen -D -RR` | 強制デタッチして再アタッチ（強制実行） |
| `screen -ls` | PID 付きですべてのセッションを一覧表示 |
| `screen -wipe` | 無効なセッションをクリーンアップ |

## ウィンドウ

### ウィンドウ基本操作

| Command | Description |
|---------|-------------|
| `Ctrl-a c` | 新しいウィンドウを作成 |
| `Ctrl-a n` | 次のウィンドウ |
| `Ctrl-a p` | 前のウィンドウ |
| `Ctrl-a 0-9` | 番号でウィンドウに切り替え |
| `Ctrl-a "` | すべてのウィンドウを一覧表示（インタラクティブ） |
| `Ctrl-a '` | 名前または番号でウィンドウに切り替え |
| `Ctrl-a A` | 現在のウィンドウ名を変更 |
| `Ctrl-a k` | 現在のウィンドウを削除 |

### ウィンドウ管理

| Command | Description |
|---------|-------------|
| `Ctrl-a w` | ステータスラインにウィンドウ一覧を表示 |
| `Ctrl-a Ctrl-a` | 最後の2つのウィンドウを切り替え |
| `Ctrl-a N` | ウィンドウ番号と名前を表示 |
| `exit / Ctrl-d` | ウィンドウを閉じる（シェル終了） |

## 分割とリージョン

### 分割コマンド

| Command | Description |
|---------|-------------|
| `Ctrl-a S` | 水平分割（上下） |
| `Ctrl-a \|` | 垂直分割（左右） |
| `Ctrl-a Tab` | 次のリージョンにフォーカスを移動 |
| `Ctrl-a X` | 現在のリージョンを閉じる |
| `Ctrl-a Q` | 現在以外のリージョンをすべて閉じる |

### リージョンのワークフロー

```
Ctrl-a S             # 水平分割
Ctrl-a Tab           # 新しいリージョンに移動
Ctrl-a c             # リージョンにウィンドウを作成
Ctrl-a :resize 20   # リージョンを20行に設定
```

## コピーモード

### スクロールバックとコピー

| Command | Description |
|---------|-------------|
| `Ctrl-a [` | コピー・スクロールバックモードに入る |
| `Space` | 選択の開始・終了（コピーモード内） |
| `Enter` | 選択をコピーしてコピーモードを終了 |
| `Ctrl-a ]` | コピーしたテキストを貼り付け |
| `h/j/k/l` | カーソル移動（コピーモードで vi キー） |
| `Ctrl-u / Ctrl-d` | 半ページ上下にスクロール |
| `/ または ?` | 前方・後方検索 |
| `Esc` | コピーモードを終了 |

### コピーのワークフロー

```
Ctrl-a [         # コピーモードに入る
Space            # 開始位置をマーク（先に移動）
Space            # 終了位置をマークしてコピー（先に移動）
Ctrl-a ]         # 現在のウィンドウに貼り付け
```

## デタッチと再アタッチ

### デタッチ

| Command | Description |
|---------|-------------|
| `Ctrl-a d` | 現在のセッションをデタッチ |
| `Ctrl-a D D` | デタッチしてログアウト |
| `Ctrl-a z` | screen を一時停止（Ctrl-Z と同様） |
| `screen -d PID` | PID でセッションをリモートデタッチ |

### 再アタッチ

```
screen -r                 # 再アタッチ（セッションが1つの場合）
screen -r work            # 名前で再アタッチ
screen -r 12345           # PID で再アタッチ
screen -d -r work         # 他の端末からセッションを奪取
```

### 継続的なワークフロー

```
# 長時間タスクを開始してデタッチし後で再接続
screen -S build
make -j4 all        # ビルド開始
Ctrl-a d             # デタッチして退席
screen -r build      # 後で再アタッチ
```

## 共有

### マルチユーザーモード

```
# ホストがマルチユーザーを有効化
Ctrl-a :multiuser on
Ctrl-a :acladd alice    # ユーザー alice にアクセス許可
# alice がアタッチ
screen -x hostuser/sessionname
```

### アクセス制御

| Command | Description |
|---------|-------------|
| `:multiuser on` | マルチユーザーモードを有効化 |
| `:acladd user` | ユーザーにフルアクセスを許可 |
| `:aclchg user -w '#'` | ユーザーを読み取り専用にする（全ウィンドウ） |
| `:acldel user` | ユーザーのアクセスを削除 |
| `screen -x user/sess` | 共有セッションにアタッチ |

## 設定

### ~/.screenrc の基本設定

```
startup_message off          # 起動メッセージを非表示
defscrollback 10000          # スクロールバッファ行数
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL                # ログインシェルを使用
```

### 便利な設定

| Command | Description |
|---------|-------------|
| `startup_message off` | 起動メッセージを抑制 |
| `defscrollback N` | スクロールバッファを設定（デフォルト 100） |
| `escape ^Bb` | プレフィックスキーを Ctrl-b に変更 |
| `shelltitle '$ \|bash'` | ウィンドウタイトルを自動設定 |
| `caption always '%n %t'` | ウィンドウ情報付きキャプションを常に表示 |
| `autodetach on` | ハングアップ時に自動デタッチ（デフォルト有効） |
| `vbell on` | 音の代わりにビジュアルベルを使用 |

## よく使うパターン

### 開発環境のセットアップ

```
# .screenrc でウィンドウを自動作成
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell  2 bash
select 0                     # エディタウィンドウから開始
```

### ログとモニタリング

```
Ctrl-a H                     # screenlog.N へのログ記録を切り替え
Ctrl-a M                     # ウィンドウのアクティビティを監視
Ctrl-a _                     # ウィンドウのサイレンスを監視
```

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

| Command | Description |
|---------|-------------|
| `Ctrl-a ?` | すべてのキーバインドを表示 |
| `Ctrl-a :help` | 組み込みヘルプ |
| `Ctrl-a :source file` | 設定ファイルを読み込む |
| `Ctrl-a :screen cmd` | 新しいウィンドウでコマンドを実行 |
| `Ctrl-a :quit` | すべてのウィンドウを削除してセッションを終了 |
