セットアップ - tmux

# はじめに

[**セットアップ シリーズ**](https://qiita.com/yokarikeri/items/a4e41a36c610bb1c798b)、tmux 編。

**tmux**は、意外と「導入」も「基本的な使い方」も簡単だし（高機能なだけ）、何より**恐ろしいくらいに便利**。

ただ、設定ファイルは「ゼロコンフィグ」とは到底呼べない上、バージョンアップ頻度が高くて書き方が割と変わる。
基本的に公式ドキュメントを参照して欲しい。

**環境:**

| OS                        | 端末エミューレーター          | tmux      |
| ------------------------- | ----------------------------- | --------- |
| macOS 10.15 Catalina      | ターミナル.app                | tmux 3.1c |
| Ubuntu 20.04 LTS on WSL 2 | Windows Terminal v1.5.10271.0 | tmux 3.0a |

プラグインなし、配色以外は極力デフォルトの設定で説明する。

以下、「端末エミューレーター」を「端末」と呼ぶ。

# 端末多重化ソフトウェアとは？

tmux について説明する前に、**端末多重化ソフトウェア**（Terminal multiplexer）について。

**特徴:**

- 「1 つの端末」で「複数の仮想的な端末」を扱える（画面分割やタブ切り替えが可能に）

![tmux のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116759/bc0c1c2f-b5f5-3526-c084-382abff5d08a.png)

**代表的なソフトウェア:**

- **tmux**（ティーマックス、2007 年 ～）
    - 本ドキュメントで説明する。
    - 積極的に開発が続けられており、現在のリリース間隔は [約 6 ヶ月ごと](https://github.com/tmux/tmux/wiki/FAQ#how-often-is-tmux-released-what-is-the-version-number-scheme)。
- **GNU Screen**（グニュー スクリーン、1987 年 ～）
    - 開発は続けられているが、特に理由がなければ後発の tmux を使えば良い気がする。
        - cf. [2015-01-08, tmux と screen のそれぞれの優れてる点 - rcmdnk's blog](https://rcmdnk.com/blog/2015/01/08/computer-screen-tmux/)
- **Byobu**（びょうぶ、屏風、2009 年 ～）
    - tmux および GNU Screen を便利に使うためのラッパースクリプト。
    - しかし、macOS での動作は問題が多いので採用を断念。（2020 年現在も解消されていない）
        - cf. [OS X / macOS で byobu を使う - Qiita](https://qiita.com/emakryo/items/397bb37b2512b8a6b998)
        - cf. [Mac ではできなかった byobu – 5 分で諦めきれない? 仮想端末入門 –｜ TechRacho（テックラッチョ）〜エンジニアの「？」を「！」に〜｜ BPS 株式会社](https://techracho.bpsinc.jp/tsunekawa/2013_09_26/13646)
        - cf. [私には合わなかった byobu 　—5 時間で諦めた？　仮想端末入門— - cBlog](https://yaritakunai.hatenablog.com/entry/2018/05/17/211000)
        - cf. [Bug #1592689 “Config not opening” : Bugs : byobu](https://bugs.launchpad.net/byobu/+bug/1592689)

# インストール & 初期設定

> cf. [Home · tmux/tmux Wiki](https://github.com/tmux/tmux/wiki)

**確認:**

`tmux` が未インストール、または、バージョンが古ければ、最新版の `tmux` をインストールする。

```sh
which tmux && tmux -V
```

**macOS でのインストール:**

後述のコピーモードで使う `pbcopy` コマンドは OS 標準なのでインストール不要。

```sh
brew install tmux
```

**Ubuntu でのインストール:**

後述のコピーモードために `xsel` もインストール。より高機能な `xclip` でも良いが、`xsel` で十分。

```sh
sudo apt install xsel tmux
```

**RHEL/CentOS でのインストール:**

RHEL/CentOS 6、7、8 はメインリポジトリにある tmux のバージョンが[古い](https://rpmfind.net/linux/rpm2html/search.php?query=tmux(x86-64))ので、galaxy4 リポジトリを使う。
cf. <https://github.com/tmux/tmux/wiki/Installing#red-hat-enterprise-linux--centos-rpms>

```sh
# sudo yum install http://galaxy4.net/repo/galaxy4-release-<release>-current.noarch.rpm

# RHEL/CentOS 7 の場合:
sudo yum install http://galaxy4.net/repo/galaxy4-release-7-current.noarch.rpm
sudo yum install xsel tmux
```

**共通:**

```sh
# バージョン確認
❯ tmux -V
tmux 3.1c

# "VISUAL" または "EDITOR" の環境変数を確認
## tmux では、これらの環境変数のいずれかが
## "vi" を含む場合は「vi スタイル」のキー入力となり、
## そうでない場合は「emacs スタイル」のキー入力となる。
❯ echo "${VISUAL}/${EDITOR}"
vim/vim

# 本ドキュメントでは、「vi スタイル」のキー入力を例に説明する。

# 設定ファイル作成。下記の内容をコピペする。
❯ vi ~/.tmux.conf
```

```sh:.tmux.conf
# ================================
#  基本設定
# ================================

# TERM 環境変数のデフォルト値を変更 (MUST)
## デフォルトは screen なので、端末エミューレーターに合わせて変更
set -s default-terminal 'xterm-256color'

# エスケープキー入力後の待ち時間 (MAY)
## デフォルトの 500 ミリ秒が長ければ短くする
set -s escape-time 10

# マウス操作を有効に (SHOULD)
## コピーモードはマウス操作の方が圧倒的に便利なので推奨
set -g mouse on

# 各ペインで保持する行数を変更 (MAY)
## デフォルトの 2000 行が少なければ、多めにしておくとコピーモードで便利
## ただし、巨大にしすぎるとメモリを圧迫する
# set -g history-limit 6000

# ステータスラインの更新頻度を変更 (MAY)
## デフォルトの 15 秒が遅ければ短くする
# set -g status-interval 1

# ウィンドウ名の自動更新を停止 (MAY)
## off にすることで、特に低スペックな PC で CPU 負荷を下げることができる
# setw -g automatic-rename off

# Home / End キーが動作しない問題への対応
## cf. https://stackoverflow.com/a/55616731
bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"

# PREFIX キーを C-b から変更 (MAY)
# set -g prefix M-f
# unbind C-b
# bind M-f send-prefix


# ================================
#  コピーモード
# ================================

# コピーモードでバッファにコピーされた内容をクリップボードへ送る (tmux 3.2 〜 用) (SHOULD)
# if-shell 'which xsel'   'set -s copy-command "xsel -i"'
# if-shell 'which pbcopy' 'set -s copy-command "pbcopy"'

# コピーモードでバッファにコピーされた内容をクリップボードへ送る (tmux 2.4 〜 3.1 用) (SHOULD)
if-shell 'which xsel' '\
  bind -Tcopy-mode-vi C-j               send -X copy-pipe-and-cancel "xsel -i"; \
  bind -Tcopy-mode-vi Enter             send -X copy-pipe-and-cancel "xsel -i"; \
  bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "xsel -i"; \
'
if-shell 'which pbcopy' '\
  bind -Tcopy-mode-vi C-j               send -X copy-pipe-and-cancel "pbcopy"; \
  bind -Tcopy-mode-vi Enter             send -X copy-pipe-and-cancel "pbcopy"; \
  bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"; \
'


# ================================
#  ステータスライン
# ================================

# ステータスバーの色を設定する (MAY)
## 緑から灰色に変更
set -g status-style bg=colour236,fg=white

# 左ステータスの最大幅 (MAY)
## 表示項目を増やすため
set -g status-left-length 30

# 左ステータス: セッション番号、ペイン名（ホスト名） (MAY)
## ssh する度に pane_title に接続先のホスト名が表示されます
## ただし、更新は接続時のみで、切断時は更新されない点に注意
set -g status-left '\
#[bg=colour024,fg=colour255] #S \
#[bg=colour054,fg=colour255] #{=21:pane_title} '

# 右ステータス: システム時計 (MAY)
## 日付フォーマットを変更
set -g status-right '\
#{?window_bigger,[#{window_offset_x}#,#{window_offset_y}] ,} \
%Y-%m-%d(%a) %H:%M'

# 中ステータス: ウィンドウ情報 (MAY)
## アクティブなウィンドウ情報を強調表示
setw -g window-status-separator ''
setw -g window-status-current-style bg=colour239,bold
setw -g window-status-current-format ' \
#[fg=colour119]#I\
#[fg=colour249]:\
#[fg=colour255]#W\
#[fg=colour249]#F\
 '
setw -g window-status-style bg=default
setw -g window-status-format ' \
#[fg=colour244]#I\
#[fg=colour237]:\
#[fg=colour250]#W\
#[fg=colour244]#F\
 '


# ================================
#  ペイン
# ================================

# ペイン ボーダー (MAY)
## 通常の枠線を灰色に、アクティブな場合は白に
setw -g pane-border-style        bg=default,fg=colour238
setw -g pane-active-border-style bg=default,fg=colour255

```

```sh
#（参考） tmux の設定を読み込み
## tmux コマンドを実行する度に、設定は自動で読み込まれるため、基本的に実行不要
❯ tmux source-file ~/.tmux.conf
```

**補足:**

- [File:Xterm 256color chart.svg - Wikipedia](https://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg) は、256 色の `xterm-256-color` と `カラーコード` の対応表。配色を調整する際に便利。
- tmux 2.6 以降、[reattach-to-user-namespace](https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard) の導入は不要に。
    - `copy-pipe-and-cancel` オプションで `pbcopy` コマンドが単独で使用可能になった。
    - なお、**tmux 3.2 以降**は `copy-command` オプションが[登場](https://github.com/tmux/tmux/wiki/Clipboard#external-tools)し、更に簡潔に記載できる。

# 基本用語

特に 👑 のついた用語は頻出するので、覚えておくこと。

| 用語              | 説明                                                                                                                                                                  |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| tmux サーバー     | バックグラウンドで実行される、tmux の状態を保持するプロセス。<br>tmux コマンドを実行すると自動的に起動し、実行中のプログラムがない場合は自動的に終了する。            |
| tmux クライアント | tmux サーバーに接続するクライアント。<br>普段は意識する必要はないが、サーバーとクライアントに分かれることで、クライアント側で問題が起こっても簡単に復旧できる仕組み。 |
| 👑 ペイン         | tmux 上の**仮想的な端末**。<br>ペインを並べて、複数を同時に表示することも可能。                                                                                       |
| 👑 ウィンドウ     | **ペインを表示する枠**。<br>1 つ以上の**ペイン**を持つ。<br>ウィンドウは 1 度に 1 つずつしか表示できない。                                                            |
| 👑 セッション     | tmux クライアントの接続先。<br>1 つ以上の**ウィンドウ**を持つ。                                                                                                       |
| 外部端末          | tmux のクライアントとしてセッションに接続する**端末**。<br>本例では macOS 標準の「ターミナル.app」を使った。                                                          |
| 👑 デタッチ       | セッションを**バックグラウンド**で起動させたまま、外部端末に戻る。                                                                                                    |
| 👑 アタッチ       | 外部端末上から**セッションに接続**。                                                                                                                                  |

# 使い方

機能が多いため、まずは 👑 の付いた内容から覚えるのがオススメ。

## 「ステータス ライン」について

tmux にアタッチすると、画面下部に「ステータス ライン」が表示される。

デフォルト設定だと**ステータスラインの左側**は、以下を意味する。

```txt:画面イメージ
[<セッション名>] <ウィンドウ番号>:<ウィンドウ名>
```

なお、**<ウィンドウ名> 右側の記号**は、以下を意味する。

- **`*`:** 現在開いているウィンドウ
- **`-`:** 直前に開いていたウィンドウ
- **`Z`:** ペインをズーム中（詳細後述）

**例:**

```txt:画面イメージ
[0] 0:foo 1:bar- 2:baz 3:puz*
```

と表示される場合、以下のことが分かる。

- セッション名は `0`
- 4 つのウィンドウが存在: `foo`, `bar`, `baz`, `puz`
- `puz` は、**現在開いている**ウィンドウ
- `bar` は、**直前に開いていた**ウィンドウ

## 「PREFIX キー」について

アタッチ中に tmux を操作するには、`PREFIX キー`、「任意の操作に対応するキー」を順に入力します。

- 👑 `PREFIX キー` のデフォルトは **`C-b`**。
- 例えば、ヘルプを表示するのは **`PREFIX キー` -> `?` キー** です。（ヘルプの終了は `C-c`）

### PREFIX キーを変更したい場合

デフォルトの `C-b` は、「カーソル左移動」や「ページ戻し」などの一般的なキーバインドと**衝突**する。
この記事ではデフォルト設定のまま説明するが、気になるようなら変更した方が良い。

[公式の例](https://github.com/tmux/tmux/wiki/FAQ#why-is-c-b-the-prefix-key-how-do-i-change-it)では `C-q` を割り当てているが、（まず使わないとはいえ）画面ロック解除のキーバインドと衝突し、片手だとやや押しづらい。
個人的にはひとまず `M-f` (`Alt + F`) にしている。

```sh:.tmux.conf
# 例: PREFIX キーを "C-b" から "M-f" に変更
set -g prefix M-f
unbind C-b
bind M-f send-prefix
```

何のキーを割り当てるかは、以下の記事が参考になるかもしれない。

> cf. [hotkeys - What's the least conflicting prefix/escape sequence for screen or tmux? - Super User](https://superuser.com/questions/74492/whats-the-least-conflicting-prefix-escape-sequence-for-screen-or-tmux)
> cf. [新時代だし、対話シェルキーバインドの棚卸しに Ctrl+A〜Z の挙動に思いを馳せてみた | DevelopersIO](https://dev.classmethod.jp/articles/keybind-ctrl-a-z/)

## セッションの操作

`tmux` コマンドを実行すると、自動的に 1 つのウィンドウと 1 つのペインを持つセッションにアタッチします。

細かい話をすれば、このセッションは自動起動した tmux サーバー上に存在し、同じく自動起動した tmux クライアントがこのセッションに接続しています。

なお、セッション上のウィンドウが全て削除された場合、そのセッションも自動的に削除されます。

- **新規作成:**
    - **`tmux`**: 👑 セッション名が「自動的に振られる 0 以上の数字」のセッションを作成
    - **`tmux new -s <セッション名>`**: 「任意のセッション名」のセッションを作成
- **一覧表示:**
    - **`tmux ls`**: デタッチしたセッション一覧を表示
- **デタッチ:**
    - **`PREFIX キー` -> `d` キー**: アタッチ中のセッションからデタッチ
- **アタッチ:**
    - **`tmux a`**: 直前に閉じたセッションにアタッチ
    - **`tmux a -t <セッション名>`**: 任意のセッションにアタッチ
- **リネーム:**
    - **`PREFIX キー` -> `$` キー**: アタッチ中のセッション名を変更
    - **`tmux rename -t <変更前セッション名> <変更後セッション名>`**: デタッチしたセッション名を変更
- **削除:**
    - **`tmux kill-session -t <セッション名>`**: デタッチしたセッションを削除

## ウィンドウの操作

デフォルトで作成されるウィンドの「**ウィンドウ名**」は実行中の `コマンド名` となり、「**ウィンドウ番号**」は `0` からの連番となります。これらの情報は、画面下部の「ステータスライン」から確認できます。

なお、ウィンドウ上のペインが全て削除された場合、そのウィンドウも自動的に削除されます。

- **新規作成:**
    - **`PREFIX キー` -> `c` キー**: 👑 ウィンドウを作成し、そのウィンドウを表示
- **切り替え:**
    - **`PREFIX キー` -> `n` キー**: 次のウィンドウ番号へ移動
    - **`PREFIX キー` -> `p` キー**: 前のウィンドウ番号へ移動
    - **`PREFIX キー` -> `l` キー**: 直前に開いていたウィンドウへ移動（往復）
    - **`PREFIX キー` -> `<ウィンドウ番号>`**: 任意のウィンドウを開く
- **リネーム:**
    - **`PREFIX キー` -> `,` キー**: ウィンドウ名を変更
- **削除:**
    - **`PREFIX キー` -> `&` キー**: 開いているウィンドウを削除
    - **`tmux killw -t <ウィンドウ番号>`**: デタッチしたセッション上のウィンドウを削除

## ペインの操作

デフォルト作成されるペインは `0` から始まる「**ペイン番号**」を持ちます。

「ペイン名」は自動的に付与され、ユーザーが任意に変更することはできません。

なお、ペイン上の端末を終了させた場合、そのペインも自動的に削除されます。

- **新規作成（分割）:**
    - **`PREFIX キー` -> `%` キー**: 👑 **右側**に新しいペインを作成（ウィンドウを**左右分割**）
    - **`PREFIX キー` -> `"` キー**: 👑 **下側**に新しいペインを作成（ウィンドウを**上下分割**）
- **切り替え:**
    - **`PREFIX キー` -> `o` キー**: 次のペインへ移動
    - **`PREFIX キー` -> `;` キー**: 直前のペインへ移動（往復）
    - **`PREFIX キー` -> カーソルキー**: 任意の方向にあるペインへ移動
        - カーソルキーを連続で押すことで `PREFIX キー` の入力状態を継続できる。
- **削除:**
    - **`exit`**: 👑 端末を終了することで、ペインも自動的に削除
    - **`PREFIX キー` -> `x` キー**: ペインを削除
    - **`tmux killp -t <ペイン番号>`**: デタッチしたセッション上のペインを削除
- **レイアウト変更:**
    - **`PREFIX キー` -> `z` キー**: 👑 一時的に、現在のペインをウィンドウのサイズに最大化（ズーム）
        - もう一度入力することで元に戻る。
        - ズーム中は、ステータスラインの「ウィンドウ名」の右側に `Z` と表示される。
    - **`PREFIX キー` -> `!` キー**: 現在のペインを新規ウィンドウへ移動 （逆はできないかも？）
    - **`PREFIX キー` -> `Space` キー**: レイアウトを変更
    - **`PREFIX キー` -> `Control` キー + カーソルキー**: ペインのサイズを変更
        - Control キーを入力したまま、カーソルキーを連続で押すことで `PREFIX キー` の入力を継続できる。
    - **`PREFIX キー` -> `{` キー**: レイアウトを維持したまま、現在のペインの位置を一つ前へ
    - **`PREFIX キー` -> `}` キー**: レイアウトを維持したまま、現在のペインの位置を一つ後ろへ
    - **`PREFIX キー` -> `Control` キー + `o` キー**: レイアウトを維持したまま、全てのペインの位置を一つずつずらす
- **その他:**
    - **`PREFIX キー` -> `q` キー**: ペイン番号を表示
    - **`PREFIX キー` -> `t` キー**: ペインに時計を表示
        - キー入力で表示解除。

## 「ツリーモード」について

接続されているセッション、ウィンドウ、ペインの情報を確認する画面として、**ツリーモード**があります。

- **`PREFIX キー` -> `w` キー**: ウィンドウ表示からツリーモードへ遷移
    - 画面上部には、ウィンドウやペインなどが表示されます。
    - 画面下部には、ウィンドウのプレビューが表示されます。

ツリーモードでは、`PREFIX キー` を使わずに、以下のショートカットを利用できます。

- **`↑` or `↓` カーソルキー**: 項目を選択
- **`←` or `→` カーソルキー**: アイテムを展開/折りたたむ
- **`Enter` キー**: ツリーモードを終了し、選択したウィンドウやペインなどへ移動
- **`x` キー**: 選択対象を終了
- **`v` キー**: プレビューを表示/非表示
- **`q` キー**: ツリーモードを終了

## 「コピーモード」について

ペインを左右に縦分割している場合、マウスカーソルを使って「ひとつのペイン上の複数行」を選択できない。

例えば macOS の **`⌘` + `⌥` + ドラッグ** で範囲選択する方法もあるが、無駄にスペースが入ったりして不便。

tmux ではペインを一時停止する **コピーモード**があるので、これを使う。

なお、前述のとおり「`vi` スタイル」と、`.tmux.conf` で「クリップボードへコピーする設定」をしていることを前提とする。

### マウス操作する場合

- **`スクロールアップ` or `ドラッグ中`:** 👑 コピーモード開始。ドラッグした範囲を選択
- **`スクロールダウン` or `ドラッグ解除`:** 👑 コピーモード終了 & 選択範囲をクリップボードへコピー

### キー操作する場合

> cf. <https://man.openbsd.org/tmux#WINDOWS_AND_PANES>

- **`PREFIX キー` -> `[`**: ウィンドウ表示からコピーモードへ遷移
    - 遷移後、画面右上に現在のペインの行数が表示されます。
- **`q` キー**: コピーモードをキャンセルして終了
- **カーソルキー**: カーソルを移動。`h`, `j`, `k`, `l` キーでも可能
- **`Space` キー**: 選択開始
- **`Escape` キー**: 選択状態を解除
- **`Enter` キー**: 👑 コピーモードを終了 & 選択範囲をクリップボードへコピー
- **`PgUp`/`PgDn` キー or `C-u`/`C-d`**: 半ページアップ/ダウンへ移
- **`^`/`$` キー**: 行頭/末へ
- **`w`/`b` キー**: 次の/前の単語へ
- **`}`/`{` キー**: 次の/前の段落へ
- **`g`/`G` キー**: 最初の/最後の履歴へ
- **`H`/`L` キー**: 最初の/最後の表示されている行へ
- **`?`/`/` キー**: 前方/後方検索
    - **`n`/`N` キー**: 次の/前の検索結果へ

**補足:**

- マウス操作は便利だが、ペインが分割されている場合に、ドラッグ解除した位置が別ペインだとコピーモードが終了しない。この場合は **`Enter` キー**を使うと良い。
- アタッチ中は、**ダブルクリック**による「単語選択」や、**トリプルクリック**による「行選択」ができない。困るが仕方なさそう。

## 付録: キーバインドの確認

```sh
# PREFIX キー テーブルを参照
❯ tmux lsk -Tprefix
bind-key    -T prefix C-b     send-prefix
bind-key    -T prefix C-o     rotate-window
bind-key    -T prefix C-z     suspend-client
bind-key    -T prefix Space   next-layout
bind-key    -T prefix !       break-pane
（略）

# PREFIX キー テーブルの省略版を参照
❯ tmux lsk -Tprefix -N
C-b     Send the prefix key
C-o     Rotate through the panes
C-z     Suspend the current client
Space   Select next layout
!       Break pane to a new window
（略）

# コピーモード キー テーブルの中の、C-a を確認
❯ tmux lsk -Tcopy-mode C-a
```

## 付録: オプションの細かな説明について

以下は、`.tmux.conf` を編集したい方向けの情報です。

「**どんなオプションがあるのか**」や「**どのオプションの種類に該当するのか**」は[公式ページ](https://github.com/tmux/tmux/wiki/Getting-Started#list-of-useful-options)を参照してください。
また、より詳細な情報は[マニュアル](https://man.openbsd.org/tmux)を参照してください。

オプションの種類と、対応する表示/設定のコマンドは、以下のとおりです。
（「ペイン オプション」や「ユーザー オプション」の説明は割愛）

基本的に 👑 の付いたオプションしか使いません。

| オプションの種類                        | 説明                                    | コマンド（-option は省略可）                                                                                                    |
| --------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| 👑 **サーバー オプション**              | tmux サーバー全体で共有されるオプション | `show-options -s`（`show -s`）<br>`set-option -s`（**`set -s`**）                                                               |
| 👑 **グローバル セッション オプション** | セッション全体で適用されるオプション    | `show-options -g`（`show -g`）<br>`set-option -g`（**`set -g`**）                                                               |
| セッション オプション                   | セッションひとつで適用されるオプション  | `show-options`（`show`）<br>`set-option`（`set`）                                                                               |
| 👑 **グローバル ウィンドウ オプション** | ウィンドウ全体で適用されるオプション    | `show-options -gw`<br>（`show-window-options -g`, `showw -g`）<br>`set-option -gw`<br>（`set-window-option -g`, **`setw -g`**） |
| ウィンドウ オプション                   | ウィンドウひとつで適用されるオプション  | `show-options -w`<br>（`show-window-options`, `showw`）<br>`set-option -w`<br>（`set-window-option`, `setw`）                   |

上記以外の便利なオプションは、以下のとおりです。

- **`show-options`（エイリアス: `show`） コマンド:** 設定を確認します。
    - **`-A` オプション:**
        - 継承されたオプションを含めて表示
        - 継承されたオプションには `*` が付与される

```sh
#（参考） 適用されている status-right オプションの内容を確認
❯ tmux show -A status-right
status-right "#{?window_bigger,[#{window_offset_x}#,#{window_offset_y}] ,}\"#{=21:pane_title}\" %H:%M %d-%b-%y"
```

- **`set-option`（エイリアス: `set`） コマンド:** 設定を上書きします。
    - **`-u` オプション:**
        - オプション設定の解除
        - `set -gu status` なら、グローバル セッション オプションで指定された `status` オプションを解除します。
    - **`-a` オプション:**
        - 指定オプションの末尾に追記

```sh:.tmux.conf
#（参考） status-left に foobar とセットする
set -g status-left "foo"
set -ag status-left "bar"
```

オプションは、tmux 自身が持つ「デフォルト設定」、`~/.tmux.conf` の順に適用されます。
「デフォルト設定」は、以下の方法で確認できます。

```sh
# デフォルト設定を確認するには、構成ファイルなしで新しい tmux サーバーを起動して show コマンドを実行する

#（参考） デフォルトの「サーバー オプション」
## 変更するには "set -s"（= "set-option -s"） オプションを使う
❯ tmux -Lfoo -f/dev/null start\; show -s

#（参考） デフォルトの「グローバル セッション オプション」
## 変更するには "set -g"（= "set-option -g"） オプションを使う
❯ tmux -Lfoo -f/dev/null start\; show -g

#（参考） デフォルトの「グローバル ウィンドウ オプション」
## 変更するには "setw -g"（= "set-option -w -g" = "set-window-option -g"） オプションを使う
❯ tmux -Lfoo -f/dev/null start\; show -gw
```

## 参考文献

- [Home · tmux/tmux Wiki](https://github.com/tmux/tmux/wiki)
    - tmux 公式サイト
- [tmux(1) - OpenBSD manual pages](https://man.openbsd.org/tmux)
    - tmux 公式マニュアル
- [tmux を使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマト](http://kanjuku-tomato.blogspot.com/2014/02/tmux.html)
    - tmux の利用イメージ
- [tmux チートシート - Qiita](https://qiita.com/nmrmsys/items/03f97f5eabec18a3a18b)
    - tmux チートシート
- [GNU Screen と tmux のコマンド比較 - Qiita](https://qiita.com/yoshikaw/items/bcafad028c347f0411c9)
    - GNU Screen と tmux のコマンド比較
- [それゆけ！ターミナル部 第 11 回 tmux をカスタマイズして使いやすくしよう！　｜　 Geekroid](https://mynavi-agent.jp/it/geekroid/2017/03/-11tmux.html)
    - `.tmux.conf` の細かい説明
- [MacOS でも Windows でもまぁまぁ使える tmux + vim 環境を作ってみた - Neo's World](https://neos21.net/blog/2019/09/20-02.html)
    - macOS / Windows の設定共通化
- [tmux のステータスラインの設定を美しくした - 安心院日記](https://blog.black-cat.jp/tags/#tmux)
    - 配色を参考にさせていただいた。