💻

tmux のインストールと初期設定

2023/08/25に公開

tmuxはターミナルをセッションという単位で管理して実行することができるツールである。
機械学習用のLinuxマシンにssh接続して学習などを行う際、通常のssh接続では学習の完了まで接続を維持する必要があり、クライアント側もPCの電源が切れない状態になる。またssh接続が勝手にタイムアウトされてしまう可能性もある。

tmuxは学習を実行してからssh接続を切断しても実行中のセッションはホスト側に残るので引き続き処理は行われる。後は、学習の終了後にセッションに再度接続することで実行結果などを確認することができる。

セッションはホスト側で管理されているのでセッション名さえわかれば、クライアントが変わっても接続可能である。
※ただし、ホストマシンが再起動されるとセッションは全て削除されてしまうので注意。


インストール方法

※以降、Ubuntu 22.04 LTSでの検証を前提とする。

以下のコマンドインストール。

sudo apt install tmux

インストール後はtmuxで起動できる。
なお、この場合はセッション名は自動的に設定される。


セッション・ウィンドウ・ペインとは

tmuxにはセッション・ウィンドウ・ペインという概念が存在する。
以下の図を参照。

セッション・ウィンドウ・ペインの概念


セッションの作成

以下でセッション名を指定してセッションを作成することが出来る。

tmux new -s [セッション名]

タスクに応じてセッション名を変更するのが無難。


セッションの削除

tmux kill-session -t [作成済のセッション名]

全てのセッションを削除したい場合はtmux kill-serverで削除できる。


セッションのアタッチ

tmux aコマンドで直前にアタッチしていたセッションにアタッチすることができる。

セッション名を指定してアタッチしたい場合は以下

tmux a -t [作成済のセッション名]

Prefix

tmuxではprefixと組み合わせることでターミナル上で使用できるショートカットが存在する。
prefixとはtmuxのショートカットを実行するためのトリガーキーと解釈すれば問題ない。
prefixに設定されているキーを入力してから指定のキーを押すことでショートカットを実行できる。
prefixを入力してから次のコマンドを入力するときはprefixを離すこと


コマンドリスト

以下、個人的によく使うコマンド。

コマンド 概要 備考
prefix -> d セッションから抜ける -
prefix -> s セッションの一覧 tmux ls でも可能
prefix -> % ペイン分割(左右) 一つのセッション内でターミナルを上下左右に分割することが出来る。<br>各ペインに対しても分割できるので、4分割以上も可能
prefix -> " ペイン分割(上下) 一つのセッション内でターミナルを上下左右に分割することが出来る。
各ペインに対しても分割できるので、5分割以上も可能
prefix -> o ペイン切替 ペインのインデックス順に切り替わる
prefix -> arrow ペイン切替 任意方向のペインに切り替え
prefix -> q ペイン切替 コマンド入力後に表示される各ペインのインデックスを入力することで任意のペインに移動
prefix -> x ペイン終了 各ペインでexitコマンドを実行でも可能
セッション内で実行したコマンドは上記の手順で正しくセッションを終了しないとホスト側にコマンド履歴が残らないので注意すること。
killやPCの再起動などでセッションが削除されるとホスト側のコマンド履歴には残らない。
prefix -> c ウィンドウの作成 作成したウインドウはprefix -> pで次の、prefix -> nで前のウインドウに切り替え
prefix -> , ウィンドウ名の変更 -
prefix -> セッション名の変更 -
prefix -> ! フォーカスされているペインを新しいウィンドウに移動 -

~/.tmux.confについて

tmuxはユーザーディレクトリ直下に格納している~/.tmux.conf設定ファイルから設定を読み込んで起動する。

以下自分用のテンプレート(tmux >= 2.9以上を前提に記載)

テンプレート
~/.tmux.conf
# マウスでウィンドウ・ペインの切り替えやリサイズを可能にする
set-option -g mouse on

# 右クリックでのコンテキストメニューの表示機能を無効化
unbind -n MouseDown3Pane

# コピーモードのキー操作をviライクにする
set-window-option -g mode-keys vi

# ウィンドウ履歴の最大行数
set-option -g history-limit 50000

# 新規ウィンドウを同じディレクトリで起動
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}" -v
bind '%' split-window -c "#{pane_current_path}" -h

# ---

# ウィンドウの作成・移動・入れ替えのキーバインド
bind -n S-left prev
bind -n S-right next
bind -n C-S-left swap-window -t -1
bind -n C-S-right swap-window -t +1

# セッション移動のキーバインド
bind -n S-down switch-client -n
bind -n S-up switch-client -p

# ---

# 境界線の表示を点線に変更
set -g pane-border-lines simple

# true colorを表示できるようにする
set-option -g default-terminal "tmux-256color"

# アクティブなペインの色
# set -g pane-active-border-style fg=blue
set -g pane-active-border-style fg=red
# 非アクティブなペインの色
# set -g pane-border-style fg=yellow
set -g pane-border-style fg=green

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-cpu'

# status-right
set-option -g status-right-length 100
set-option -g status-right "host: #h #{cpu_bg_color} CPU: #{cpu_percentage} [%Y-%m-%d (%a) %H:%M:%S]" 

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
  • S-leftShift + を示す。
  • C-S-leftCtrl + Shift + を示す。

tmux起動中に上記の設定ファイルを変更した場合は以下のコマンドで反映可能

tmux source ~/.tmux.conf

ファイル下部のpluginについて次節で説明する。


pluginについて

標準機能以外の機能をpluginとして追加することができる。
pluginを使うためにはtpm(tmux plugin manager)を導入する必要がある。
以下のコマンドでダウンロード

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

ダウンロード後、設定ファイルの編集

末尾に以下を追加

plugin
~/.tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-cpu'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '1'
set -g @plugin 'tmux-plugins/tmux-logging'

# status-right
set-option -g status-right-length 100
set-option -g status-right "host: #h #{cpu_bg_color} CPU: #{cpu_percentage} [%Y-%m-%d (%a) %H:%M:%S]" 

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

設定後にtmuxを起動した後にprefix -> Iを入力後、Enterを入力すればプラグインのインストールが開始される。

または、tpmインストール後に以下のコマンドでもインストール可能

~/.tmux/plugins/tpm/bin/install_plugins

プラグインインストールを自動化したい時に使う。

以下に各pluginについて説明する。

tmux-plugins/tpm

  • tmux のプラグインマネージャー
  • プラグインを導入する上で必須
  • ~/.tmux.confの末尾に記述する必要がある。

tmux-plugins/tmux-sensible

  • 基本的なオプションを自動的に設定するプラグイン
  • 以下のオプションが自動的に設定される
    tmux-sensible
    # utf8対応
    set -g utf8 on
    set -g status-utf8 on
    
    # VimでEscキーを押したときの反応をよくする
    set -s escape-time 0
    
    # スクロールバッファサイズを増やす
    set -g history-limit 50000
    
    # tmuxメッセージの表示時間
    set -g display-time 4000
    
    # ステータスラインの更新間隔
    set -g status-interval 5
    
    # Mac OS X向けの設定
    set -g default-command "reattach-to-user-namespace -l $SHELL" 
    
    # 256色表示
    set -g default-terminal "screen-256color" 
    
    # ステータスラインのキーバインドをemacs風にする
    set -g status-keys emacs
    
    # フォーカスイベントを有効化
    set -g focus-events on
    
    # 異なるサイズの端末からアクセスしたときにリサイズ 
    setw -g aggressive-resize on
    

    ※既にユーザーによって設定されている項目はそちらの設定が優先される

tmux-plugins/tmux-cpu

status_barにcpu使用率を表示可能にするプラグイン

tmux-plugins/tmux-resurrect

  • PC再起動後にセッションを復元させるプラグイン
  • Auto Saveではないので再起動前に手動保存しておく必要がある。
  • 保存: prefix + Ctrl-s
  • 復元: prefix + Ctrl-r
  • 保存されるのは以下
    • セッション
    • ウィンドウ
    • ペイン
    • コマンド履歴
    • 各ペインでのカレントディレクトリ
  • コマンド実行時のlogは保存されない
  • セッションの状態は.local/share/tmux/resurrect配下にテキストファイルとして格納される

tmux-plugins/tmux-continuum

  • 自動でセッションを保存するプラグイン
  • 以下の設定を行うとtmux起動時に自動で復元可能になる。また、セッションの保存が1分間隔で行われる。
    ~/.tmux.conf
    set -g @plugin 'tmux-plugins/tmux-continuum'
    set -g @continuum-restore 'on'
    set -g @continuum-save-interval '1'
    
  • 以下を~/.bashrcに記載するとssh接続時などにtmuxのセッションがあれば、アタッチするセッションを選択する機能を追加することができる。
    fzfをインストールしていること前提
    セッション選択
    ~/.bashrc
    PERCOL=fzf
    CMDLINE=$(cat /proc/$$/cmdline | xargs --null)
    if [[ ! -n $TMUX && "-bash" = ${CMDLINE} ]]; then
      # get the IDs
      ID="`tmux list-sessions`" 
      if [[ -z "$ID" ]]; then
        tmux new-session
      fi
      create_new_session="Create New Session" 
      ID="$ID\n${create_new_session}:" 
      ID="`echo -e "$ID" | $PERCOL | cut -d: -f1`" 
      if [[ "$ID" = "${create_new_session}" ]]; then
        tmux new-session
      elif [[ -n "$ID" ]]; then
        tmux attach-session -t "$ID" 
      else
        :  # Start terminal normally
      fi
    fi
    

    teeでの追記用

    tee -a ~/.bashrc << "EOF" > /dev/null
    
    PERCOL=fzf
    CMDLINE=$(cat /proc/$$/cmdline | xargs --null)
    if [[ ! -n $TMUX && "-bash" = ${CMDLINE} ]]; then
      # get the IDs
      ID="`tmux list-sessions`"
      if [[ -z "$ID" ]]; then
        tmux new-session
      fi
      create_new_session="Create New Session"
      ID="$ID\n${create_new_session}:"
      ID="`echo -e "$ID" | $PERCOL | cut -d: -f1`"
      if [[ "$ID" = "${create_new_session}" ]]; then
        tmux new-session
      elif [[ -n "$ID" ]]; then
        tmux attach-session -t "$ID"
      else
        :  # Start terminal normally
      fi
    fi
    
    EOF
    

tmux-plugins/tmux-logging

  • カレントペインのログをテキストファイルとして出力するプラグイン
  • prefix + shift + Pでロギング開始、再度prefix + shift + Pでロギング停止
  • ロギングを忘れてもprefix + alt + shift + pでさかのぼれる範囲で出力履歴を保存
  • prefix + alt + cで出力履歴を消去

セッション作成時に自動でロギングを開始したい

tmux-loggingと組み合わせることでセッション起動、ペイン作成時に自動でロギングを開始することができる。
~/.bashrcに以下を追加

自動ロギング
~/.bashrc
# tmux auto logging
    TMUX_LOG_SAVE_DIR="$HOME/tmux_logs"
    if [ ! -d ${TMUX_LOG_SAVE_DIR} ]; then
    mkdir -p ${TMUX_LOG_SAVE_DIR}
    fi
if [ -n "$TMUX_PANE" ] && [ "$TMUX_PANE_AUTORUN" != "0" ]; then
  # set TMUX_LOGGING to the path of your tmux-logging installation.
  TMUX_LOGGING="$HOME/.tmux/plugins/tmux-logging"
  log_file="${TMUX_LOG_SAVE_DIR}/$(date +%Y%m%d-%H%M%S)-$(hostname)-tmux.log"
  $TMUX_LOGGING/scripts/start_logging.sh "${log_file}" "${TMUX_PANE}"

  # Prevent autocommand in subshells. We only want the top shell within a
  # tmux pane to run these commands.
  export TMUX_PANE_AUTORUN=0
fi

teeでの追記用

tee -a ~/.bashrc << "EOF" > /dev/null

# tmux auto logging
if [ -n "$TMUX_PANE" ] && [ "$TMUX_PANE_AUTORUN" != "0" ]; then
    # set TMUX_LOGGING to the path of your tmux-logging installation.
    TMUX_LOGGING="$HOME/.tmux/plugins/tmux-logging"
    log_file="$HOME/$(date +%Y%m%d-%H%M%S)-$(hostname)-tmux.log"
    $TMUX_LOGGING/scripts/start_logging.sh "${log_file}" "${TMUX_PANE}"

    # Prevent autocommand in subshells. We only want the top shell within a
    # tmux pane to run these commands.
    export TMUX_PANE_AUTORUN=0
fi

EOF

このままだとログファイルのANSIコードも出力されるのででログが見づらい。
ansifilterをインストールしておくときれいな状態で保存される。

sudo apt install -y ansifilter

こちらを参考にした。
上記スクリプトではホームディレクトリ直下にログファイルを保存するようにしている。


Trouble Shooting & Tips

セッションにアタッチした際にウィンドウサイズが小さく表示される

特定のセッションにアタッチするとウィンドウサイズが小さく表示されることがある。
これは同じウィンドウに複数のクライアントがアタッチしている場合、ウィンドウサイズがアタッチしているクライアントの最小のウィンドウサイズに設定されるtmuxの仕様のため。

アタッチする際に以下のように-dオプションを付与すれば自分以外のアタッチしているユーザーを強制的にでタッチすることができる。

tmux a -d
tmux a -t [作成済のセッション名] -d

セッション名の変更

既に作成しているセッションのセッション名を以下のコマンド変更することができる。

tmux rename -t [BEFORE_SESSION_NAME] [AFTER_SESSION_NAME]

コンソールのスクロール

tmuxではマウスでのスクロールはデフォルトではできない。
prefix -> [でコピーモードを開始すればホイールでスクロールすることが出来る。

colour[数字]で指定できる色がわからない

こちらを参照

ステータスバーに表示する情報を追加したい

こちらで紹介されているスクリプトを導入することでメモリ使用量, ロードアベレージ, 稼働時間を表示することができる。

各スクリプトは~/bin配下に格納し、実行権限を付与しておくこと

chmod +x ~/bin/used-mem
chmod +x ~/bin/loadaverage
chmod +x ~/bin/pc-running-time 

表示例は以下

~/.tmux.conf
set-option -g status-right-length 200
set -g status-right "#{cpu_bg_color} CPU: #{cpu_percentage} #[fg=white]#[fg=black,bg=white] host: #h #[fg=black]#[fg=white,bg=black] %Y-%m-%d (%a) %H:%M:%S #[fg=white]#[fg=black,bg=white] #(echo $LANG) #[fg=black]#[fg=white,bg=black] up #(~/bin/pc-running-time) #[fg=white]#[fg=black,bg=white] load_average(#(~/bin/loadaverage)) #[fg=black]#[fg=white,bg=black] Mem #(~/bin/used-mem)%% "

表示列が長くなってしまうので、画面が小さい場合は見切れてしまうので注意。
適宜不要なものは削除すること。

ステータスバーを2行で表示したい

set-option -g status 2を設定することで2行表示にすることができる。
記述方法はこちらを参考

以下、記載例

ステータスバー2行テンプレート
~/.tmux.conf
# カスタムフォントを設定
set -g @custom-style '#[fg=white,bg=black]'
set -g @custom-reverse-style '#[fg=black,bg=white]'

# ステータスラインを2行に設定
set-option -g status 2

# 1行目の設定
# 左寄せ
set -g status-format[0] '#{?pane_in_mode,#[bg=yellow] COPY ,#{@custom-reverse-style}#{?client_prefix,#[reverse],} TMUX }'
set -ag status-format[0] '#[align=left]#{@custom-style} USER: #(echo $USER) #{@custom-reverse-style}#{@custom-reverse-style} DISPLAY#(echo $DISPLAY) #[default]#[fg=white]'
# 右寄せ
set -ag status-format[0] '#[align=right]#[fg=black]#{@custom-style} up #(~/bin/pc-running-time) #[fg=white]#{@custom-reverse-style} load_average(#(~/bin/loadaverage)) #[fg=black]#{@custom-style} Mem #(~/bin/used-mem)%% #[fg=white]#{@custom-reverse-style} disk:(#(~/bin/disk-info))'

# 2行目の設定
# status-left
set -g status-format[1] '#[align=left range=left #{status-left-style}]#[push-default]#{T;=/#{status-left-length}:status-left}#[pop-default]#[norange default]#'
# window-status
set -ag status-format[1] '[list=on align=#{status-justify}]#[list=left-marker]<#[list=right-marker]>#[list=on]#{W:#[range=window|#{window_index} #{window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-format}#[pop-default]#[norange default]'
set -ag status-format[1] '#{?window_end_flag,,#{window-status-separator}},#[range=window|#{window_index} list=focus #{?#{!=:#{window-status-current-style},default},#{window-status-current-style},#{window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-current-format}#[pop-default]#[norange list=on default]#{?window_end_flag,,#{window-status-separator}}}#[pop-default]#[norange default]'
# status-right
# status-right の設定
set-option -g status-right-length 200
set -g status-right '#{cpu_bg_color} CPU: #{cpu_percentage} #[fg=black]#{@custom-style} LANG: #(echo $LANG) #[fg=white]#{@custom-reverse-style} host: #(~/bin/gip) #[fg=black]#{@custom-style} %Y-%m-%d (%a) %H:%M:%S '
set -ag status-format[1] '#[nolist align=right range=right #{status-right-style}]#{T;=/#{status-right-length}:status-right}#[pop-default]#[norange default]'

なお、window-statusの部分の記述は設定ファイルを何も記載しない状態で、tmux show-options -gで出力された初期値を参考にした。

set -g status-format[0] '#{?pane_in_mode,#[bg=yellow] COPY ,#{@custom-reverse-style}#{?client_prefix,#[reverse],} TMUX }'の部分はこちらを参考に記述

また、host: #(~/bin/gip)の部分については個人的にIPアドレスも表示しておきたいので以下のスクリプトを追加した。

tee ~/bin/gip << "EOF" > /dev/null
#!/bin/bash

ip route get 8.8.8.8 | head -1 | awk '{print $7}'

EOF
chmod +x ~/bin/gip

EC2のパブリックIPアドレスの場合は以下

tee ~/bin/ec2_ip << "EOF" > /dev/null
#!/bin/bash

ec2-metadata | grep public-ipv4 | awk -F"[ :]" '{print $3}'

EOF
chmod +x ~/bin/gip

ただし、あらかじめ以下のコマンドでamazon-ec2-utilsパッケージをインストールしておくこと

sudo apt install -y amazon-ec2-utils

disk:(#(~/bin/disk-info))の部分についてはストレージ残容量も表示しておきたいので以下のスクリプトを追加した。

tee ~/bin/disk-info << "EOF" > /dev/null
#!/bin/bash

df -h | awk '$6 ~ /^\/$/ {print $4 "/" $2}'

EOF
chmod +x ~/bin/disk-info

アクティブ・非アクティブなウィンドウをわかりやすくする

こちらを参考に以下を追記

~/.tmux.conf
# アクティブなウィンドウの色
set -g window-active-style 'bg=#1c1c1c'
# 非アクティブなウィンドウの色
set -g window-style 'bg=#262626'

ポップアップでウィンドウを表示

こちらに記載のスクリプトをそのまま追加

ウィンドウポップアップ
~/.tmux.conf
# ウィンドウポップアップ
bind C-p popup -xC -yC -w95% -h95% -E -d "#{pane_current_path}" '\
  if [ popup = $(tmux display -p -F "#{session_name}") ]; then \
    tmux detach-client ; \
  else \
    tmux attach -c $(tmux display -p -F "#{pane_current_path}") -t popup || tmux new -s popup ; \
  fi \
'

teeでの追記用

tee -a ~/.tmux.conf << "EOF" > /dev/null

# ウィンドウポップアップ
bind C-p popup -xC -yC -w95% -h95% -E -d "#{pane_current_path}" '\
  if [ popup = $(tmux display -p -F "#{session_name}") ]; then \
    tmux detach-client ; \
  else \
    tmux attach -c $(tmux display -p -F "#{pane_current_path}") -t popup || tmux new -s popup ; \
  fi \
'

EOF
  • prefix + ctrl + Pでポップアップウィンドウでtmuxを表示することが出来る
  • 再度同じコマンドで非表示にすることができる
  • あくまで非表示なのでターミナル自体はバックグラウンド起動している

最終的な~/.tmux.conf

前述までの内容を全て導入した~/.tmux.confが以下となる。

~/.tmux.conf
~/.tmux.conf
# マウスでウィンドウ・ペインの切り替えやリサイズを可能にする
set-option -g mouse on

# 右クリックでのコンテキストメニューの表示機能を無効化
# unbind -n MouseDown3Pane

# コピーモードのキー操作をviライクにする
set-window-option -g mode-keys vi

# ウィンドウ履歴の最大行数
set-option -g history-limit 50000

# 新規ウィンドウを同じディレクトリで起動
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}" -v
bind '%' split-window -c "#{pane_current_path}" -h

# ---

# ウィンドウの作成・移動・入れ替えのキーバインド
bind -n S-left prev
bind -n S-right next
bind -n C-S-left swap-window -t -1
bind -n C-S-right swap-window -t +1

# セッション移動のキーバインド
bind -n S-down switch-client -n
bind -n S-up switch-client -p

# ---

# 境界線の表示を点線に変更
set -g pane-border-lines simple

# true colorを表示できるようにする
set-option -g default-terminal "tmux-256color"

# アクティブなペインの色
set -g pane-active-border-style fg=blue
# set -g pane-active-border-style fg=red
# 非アクティブなペインの色
set -g pane-border-style fg=yellow
# set -g pane-border-style fg=green

# アクティブなウィンドウの色
set -g window-active-style 'bg=#1c1c1c'
# 非アクティブなウィンドウの色
set -g window-style 'bg=#262626'

# ---

# カスタムフォントを設定
set -g @custom-style '#[fg=white,bg=black]'
set -g @custom-reverse-style '#[fg=black,bg=white]'

# ステータスラインを2行に設定
set-option -g status 2

# 1行目の設定
# 左寄せ
set -g status-format[0] '#{?pane_in_mode,#[bg=yellow] COPY ,#{@custom-reverse-style}#{?client_prefix,#[reverse],} TMUX }'
set -ag status-format[0] '#[align=left]#{@custom-style} USER: #(echo $USER) #{@custom-reverse-style}#{@custom-reverse-style} DISPLAY#(echo $DISPLAY) #[default]#[fg=white]'
# 右寄せ
set -ag status-format[0] '#[align=right]#[fg=black]#{@custom-style} up #(~/bin/pc-running-time) #[fg=white]#{@custom-reverse-style} load_average(#(~/bin/loadaverage)) #[fg=black]#{@custom-style} Mem #(~/bin/used-mem)%% #[fg=white]#{@custom-reverse-style} disk:(#(~/bin/disk-info))'

# 2行目の設定
# status-left
set -g status-format[1] '#[align=left range=left #{status-left-style}]#[push-default]#{T;=/#{status-left-length}:status-left}#[pop-default]#[norange default]#'
# window-status
set -ag status-format[1] '[list=on align=#{status-justify}]#[list=left-marker]<#[list=right-marker]>#[list=on]#{W:#[range=window|#{window_index} #{window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-format}#[pop-default]#[norange default]'
set -ag status-format[1] '#{?window_end_flag,,#{window-status-separator}},#[range=window|#{window_index} list=focus #{?#{!=:#{window-status-current-style},default},#{window-status-current-style},#{window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{window-status-last-style},default}}, #{window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{window-status-bell-style},default}}, #{window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{window-status-activity-style},default}}, #{window-status-activity-style},}}]#[push-default]#{T:window-status-current-format}#[pop-default]#[norange list=on default]#{?window_end_flag,,#{window-status-separator}}}#[pop-default]#[norange default]'
# status-right
# status-right の設定
set-option -g status-right-length 200
set -g status-right '#{cpu_bg_color} CPU: #{cpu_percentage} #[fg=black]#{@custom-style} LANG: #(echo $LANG) #[fg=white]#{@custom-reverse-style} host: #(~/bin/gip) #[fg=black]#{@custom-style} %Y-%m-%d (%a) %H:%M:%S '
set -ag status-format[1] '#[nolist align=right range=right #{status-right-style}]#{T;=/#{status-right-length}:status-right}#[pop-default]#[norange default]'

# ---

# ウィンドウポップアップ
bind C-p popup -xC -yC -w95% -h95% -E -d "#{pane_current_path}" '\
  if [ popup = $(tmux display -p -F "#{session_name}") ]; then \
    tmux detach-client ; \
  else \
    tmux attach -c $(tmux display -p -F "#{pane_current_path}") -t popup || tmux new -s popup ; \
  fi \
'

# ---

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-cpu'
set -g @plugin 'jaclu/tmux-menus'
# set -g @plugin 'tmux-plugins/tmux-resurrect'
# set -g @plugin 'tmux-plugins/tmux-continuum'
# set -g @continuum-restore 'on'
# set -g @continuum-save-interval '1'
# set -g @plugin 'tmux-plugins/tmux-logging'

if "test ! -d ~/.tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'


reference

status関連

plugin関連

Discussion