tmux のインストールと初期設定
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 -> %
|
ペイン分割(左右) | 一つのセッション内でターミナルを上下左右に分割することが出来る。<b r>各ペインに対しても分割できるので、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以上を前提に記載)
テンプレート
# マウスでウィンドウ・ペインの切り替えやリサイズを可能にする
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-left
はShift
+←
を示す。 -
C-S-left
はCtrl
+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
# 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
をインストールしていること前提セッション選択
~/.bashrcPERCOL=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
に以下を追加
自動ロギング
# 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
表示例は以下
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行テンプレート
# カスタムフォントを設定
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
アクティブ・非アクティブなウィンドウをわかりやすくする
こちらを参考に以下を追記
# アクティブなウィンドウの色
set -g window-active-style 'bg=#1c1c1c'
# 非アクティブなウィンドウの色
set -g window-style 'bg=#262626'
ポップアップでウィンドウを表示
こちらに記載のスクリプトをそのまま追加
ウィンドウポップアップ
# ウィンドウポップアップ
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
# マウスでウィンドウ・ペインの切り替えやリサイズを可能にする
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
- 【tmux】ssh接続先に応じて、自動でペインの背景色とタイトルを変更する
- .tmux.conf 内で tmux のバージョン判定
- [tmux] 端末起動時に自動で新規セッションを作成 or 既存セッションにアタッチ #Linux - Qiita
- tmux 非アクティブのウインドウペインの背景色を変更 #Linux - Qiita
- Can't increase scrollback buffer size in tmux
- 256 COLORS - CHEAT SHEET
- How does the tmux color palette work?
- tmuxの知られざるパワフルな機能を紹介してみる - VISASQ Dev Blog
status関連
- tmux の status line の設定方法
- Macでtmuxのステータスラインに起動時間/ロードアベレージ/メモリ使用率を表示 - よんちゅBlog (hatenablog.com)
- How to use status-format[] to customize a multiple status line? #2225
- tmuxのstatus lineの設定例 · 気まぐれブログ (yuntan.tech)
plugin関連
- tmuxにプラグイン(TPM)のインストールと設定
- tmux のプラグインを導入したので使いこなすために覚えておきたいことをチートシート的にメモ
- tmuxメモ : Tmux sensibleプラグインで基本オプションをセット
- tmuxメモ : プラグインでバッテリ、CPU情報等をステータスバーに表示
- 再起動前のtmux環境を復活させる
- [Tmux] セッションを自動保存・リストア
- tmuxメモ : Tmux Loggingでロギングとキャプチャ - もた日記 (hatenablog.com)
- 新しいペインのログを自動的にオンにする ·問題 #28 ·tmux-plugins/tmux-logging (github.com)
Discussion