tmuxのステータスライン設定方法!〜カスタマイズしやすいテンプレ付き〜
tmuxで「ステータスライン」をカスタマイズすると、便利&見た目がオシャレになってテンションがアガります。
というわけでステータスラインの設定方法を解説します。
この記事で学べること
長いのでどういう記事かざっと書いておきます。
- ステータスラインとは
- ステータスラインの設定の書き方(構文)
- すぐに設定できるテンプレ(実例)
- トラブルシューティング
※tmux関係の記事は他にも書いています。「まだ知らないぞ」ってことがあれば一緒にご覧ください。
※この記事はバージョン3.5a
のtmuxに基づいて書いています。
ステータスラインとは何か
ステータスラインはtmuxの画面下部に表示できるエリアです。

「tmuxのウィンドウ一覧」「日時」といった情報がデフォルト表示です。カスタマイズすれば「ブランチ名」「今日の天気」といった自由な情報を表示できます。
この記事で最終的に設定できるステータスラインの見た目
この記事では、次の画像のようなステータスラインを設定できるようにするのが目標です。

画像の例ではベルマークが付いていますね。ベルが鳴ったらtmuxのステータスラインでも確認できるように設定しています。
このおかげでClaude Codeのタスク完了がどのウィンドウなのか一目で分かります。
※Nerd FontsとしてHackGen Console NF
(白源)を使っています。
3つの領域
ステータスラインには3つの領域があります。デフォルト表示だと次のような構成。

名前 | 位置 | デフォルトの表示 |
---|---|---|
status-left | 左側 | セッション名 |
window-status-* | 中央 | ウィンドウ一覧 |
status-right | 右側 | 時刻など |
中央だけwindow-status-*
なのは少し特殊だからです。詳しくはあとで説明します。
ステータスラインの書き方
書き方を学んでからじゃないと黒魔術に見えてまうので、ちょっと座学っぽい話になりますがこの段階で習得しておきましょう。
基本的な構文
構文そのものは単純で、tmux コマンド名 オプション
を書いていくだけです。詳しくは別の記事に書いています。
フォーマット部分の書き方
次のように書くと、単に文字列が渡されるだけです。
set-option -g status-left "foo"set-option -g status-right "buz"
ここでstatus-left
のデフォルト値を見てみましょう。
set-option -g status-left "[#S] "
[
と]
は文字列そのままです。#S
は「現在のセッション名」を表す変数です。tmuxでは#〇〇
のように書くことで変数を扱えます。
変数の書き方
通常は#{変数名}
のように書き、よく使われるものには#S
のような短縮形が用意されています。
よく使いそうな変数まとめ
よく使いそうなやつをまとめておきます。詳しくはman 1 tmux
のFORMATS
セクションに全部書いてあります。
変数名 | 短縮形 | 内容 | 例 |
---|---|---|---|
#{session_name} | #S | セッション名 | default 、0 |
#{host} | #H | ホスト名 | eetannMacBook-Pro.local |
#{active_window_index} | アクティブなウィンドウのインデックス | ||
#{window_name} | #W | ウィンドウ名 | プロジェクトA |
#{window_bell_flag} | ベルが鳴ったら1を返す | 1 、0 |
値の確認はstatuls-left
の設定やdisplay-message
の実行が便利です。
tmux set-option -g status-left "#{host}"tmux display-message "#{host}"
外部コマンドの実行
外部コマンドの実行結果を入れたいなら#(コマンド)
と書きます。
set-option -g status-left '#(echo $EDITOR)'
ちなみに表示されるコマンド結果は最後の1行のみです。次の例だとbar
だけが表示されます。
set-option -g status-left '#(echo "foo\nbar")'
条件式
#{?変数名,真の場合,偽の場合}
のように書くと、分岐できます。
set-option -g status-left "#{?pane_in_mode,yes,no}"
変数が存在して0以外の値なら「真」、それ以外は「偽」です。
#{pane_in_mode}
は現在のペインが何らかのモード(コピーモードとか)に入ったときに1
を返す変数です。
(マニア向け)モードって?
マニア向けなのでここは読み飛ばしOKです。
前述の#{pane_in_mode}
でモードの話が出てきました。モードといえばコピーモードですが、tmuxではコピーモード以外のモードもあるようです。
- コピーモード
- ビューモード(
list-keys
の実行など) - 選択モード(
choose-〇〇
の実行など)
モードは#{pane_mode}
で確認できます。
set-option -g status-left "#{pane_mode}"
色とスタイルの設定
tmuxのステータスラインは単に文字列を表示できるだけじゃなく、色や太文字といった装飾もできます。
スタイルの書き方
オプション指定するだけならfg=red
のようにスタイルを直接書きます。
set-option -g pane-border-style fg=red
status-left
のようなフォーマット指定なら#[]
形式で文字列として書きます。
set-option -g status-left "#[fg=red]foo"
上記の場合、赤でfoo
という文字が表示されます。
複数指定するなら,
で区切ります。
set-option -g pane-border-style fg=red,bg=whiteset-option -g status-left "#[fg=red,bg=white]foo"
色の指定
ここまでの例で察しているかもしれませんが、文字色はfg
(foreground=前景)、背景色はbg
(background)に書きます。指定できる値は次のとおりです。
名前で指定
よく使われる色は名前で指定できます。black
、red
、green
、yellow
、blue
、magenta
、cyan
、white
が名前指定できます。
colourX
で指定
colour0
〜colour255
のような指定ができます。対応が分かりづらいので筆者は使っていません。
set-option -g pane-border-style fg=colour1
※colour
です。color
ではありません。
16進数のカラーコードで指定
馴染みのある色指定はやはり16進数のRGBでしょうか。
set-option -g pane-border-style fg=#FF0000
16進数指定(True Color)の対応環境の確認・設定方法は後で解説します。
属性(装飾)の指定
太文字なども指定できます。
set-option -g status-left "#[fg=red,bold]foo"
使えるのはこんな感じ。
名前 | 内容 |
---|---|
bold ,bright | 太文字 |
dim | 薄く表示 |
reverse | 文字色・背景色を入れ替え |
hidden | 非表示 |
italics | 斜体 |
strikethrough | 取り消し線 |
overline | 上線 |
underscore | 下線 |
double-underscore | 二重下線 |
curly-underscore | 波線下線 |
dotted-underscore | 点線下線 |
dashed-underscore | 破線下線 |
blink | 点滅(これだけ謎にアニメーション) |
スタイルを切り替える
スタイルは文字列の途中で切り替えできます。単にもう一度#[]
を使うだけです。
set-option -g status-left "#[fg=red,bold]foo#[fg=white,underscore]bar"
途中でデフォルトのスタイルに切り替えたくなったら#[default]
と書きます。
特定の属性だけオフにしたくなったら#[nobold]
のように#[no〇〇]
と書きます。
set-option -g status-left "#[fg=red,bold]foo#[nobold,underscore]bar"
ユーザーオプションを使って色に名前をつけておく
「ユーザーオプション」として定義しておくと 頻繁に使う色を使いませます 。
ユーザーオプションは変数のようなものでset-option @名前 値
と定義します。
set-option -g @mycolor "#00BBBB"set-option -g status-left "#[fg=#{@mycolor}]foo"
オプションを参照するときは#{@名前}
のように書きます。
オプションと実例
文法説明はここまでです。ここからはカスタマイズしやすい形のテンプレを紹介します。見た目はこんな感じ。

まずは色の定義
最初に色を定義します。
set-option -g @c-base-100 "#001C23"set-option -g @c-base-content "#FFD6A7"set-option -g @c-primary "#BEFF00"set-option -g @c-primary-content "#507000"set-option -g @c-neutral "#003741"set-option -g @c-neutral-content "#FFD6A7"set-option -g @c-info "#00BAFE"set-option -g @c-info-content "#042E49"
デフォルトスタイルの設定
status-style
でデフォルトのスタイルを設定します。
set-option -g status-style "bg=#{@c-base-100}"
今回は設定しませんが、領域ごとにもデフォルトスタイルを指定できます。
status-left-style
window-status-style
status-right-style
status-rightを設定する
まずは簡単なstatus-right
を見てみましょう。画像右下の「日時」の部分です。

これは次のように定義します。
set-option -g status-right '#( \ label="%m/%d(%a) %H:%M"; \ bg="#{@c-base-100}"; \ color="#{@c-info}"; \ text_fg="#{@c-info-content}"; \ echo " #[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color]"; \)'
シンタックスハイライトで分かりやすくするために#()
の中身だけ書いておきます。
label="%m/%d(%a) %H:%M";bg="#{@c-base-100}";color="#{@c-info}";text_fg="#{@c-info-content}";echo " #[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color]";
少し長いですがやっていることは単純で「変数を定義してechoで出力」です。
どうしても見にくいという場合は#()
の中身をシェルクスクリプトに書き出してそれを読み込むのもありです。
status-leftの実例
実は筆者はstatus-left
を空にしてたので、今回の記事を書くにあたって仕事時間の表示してみました。
画像左下のCHILL
の部分です。

# 月〜金の10:00〜19:00まではWORK、それ以外はCHILLset-option -g status-left '#( \ hour=$(date +%H); \ dow=$(date +%u); \ bg="#{@c-base-100}"; \ color="#{@c-info}"; \ text_fg="#{@c-info-content}"; \ if [ $dow -ge 1 ] && [ $dow -le 5 ] && [ $hour -ge 10 ] && [ $hour -lt 19 ]; then \ label="WORK"; \ else \ label="CHILL"; \ fi; \ echo "#[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color] "; \)'
「長っ!」って思うかもしれませんがやっていることは単純です。
#()
の中身を見てみましょう。単に時間帯で文字をWORK
かCHILL
に分岐しているだけです。
hour=$(date +%H);dow=$(date +%u);bg="#{@c-base-100}";color="#{@c-info}";text_fg="#{@c-info-content}";if [ $dow -ge 1 ] && [ $dow -le 5 ] && [ $hour -ge 10 ] && [ $hour -lt 19 ]; then label="WORK";else label="CHILL";fi;echo "#[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color] ";
ウィンドウ一覧の部分
window-status-*
(ウィンドウ一覧)はちょっと特殊です。まずは画像をご覧ください。window-status-format
で一つひとつのウィンドウに対してフォーマットを指定します。

「現在のウィンドウ」はwindow-status-current-format
、「区切り文字」はwindow-status-separator
に書きます。
ウィンドウ一覧関係のオプションでよく使いそうなのが次のやつ。
オプション | 内容 |
---|---|
window-status-separator | 区切りの指定 |
window-status-style | 一つひとつのウィンドウのスタイル |
window-status-format | 一つひとつのウィンドウのフォーマット |
window-status-current-style | 現在のウィンドウのスタイル |
window-status-current-format | 現在のウィンドウのフォーマット |
window-status-bell-style | ベルが鳴ったときのウィンドウのスタイル |
〇〇-style
と〇〇-format
のような同じ名前から始まるオプションは、〇〇-style
→〇〇-format
の順に読み込まれます。つまり、両方に同じ属性を書いたら 〇〇-format
の方が優先 されます。
window-status-separatorの設定
ここでもう一度、今回設定するステータスラインを見てみましょう。

ウィンドウ一つひとつをタブとして表現し、区切りは無しです。デフォルトだと空白であるため、変更します。
set-option -gw window-status-separator ""
window-status-formatの設定
続いて、ウィンドウ一つひとつのフォーマットを指定します。
set-option -gw window-status-format '#( \ label=" #W "; \ bg="#{@c-base-100}"; \ color="#{@c-neutral}"; \ text_fg="#{@c-neutral-content}"; \ if [ "#{window_bell_flag}" = "1" ]; then \ label=" #W "; \ color="#{@c-info}"; \ text_fg="#{@c-info-content}"; \ fi; \ echo "#[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color]"; \)'
↓見やすくスクリプトの部分だけ抜き出したバージョン。
label=" #W ";bg="#{@c-base-100}";color="#{@c-neutral}";text_fg="#{@c-neutral-content}";if [ "#{window_bell_flag}" = "1" ]; then label=" #W "; color="#{@c-info}"; text_fg="#{@c-info-content}";fi;echo "#[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg]$label#[bg=$bg,fg=$color]";
まず#W
は最初の方で説明したとおり「ウィンドウ名」です。
#{window_bell_flag}
は「ベルが鳴ったら1を返す変数」です。window-status-bell-style
だとフォーマットを指定ができないため、ここで分岐を入れて定義しています。
記事冒頭に書いたように、Claude Codeのタスク完了に鳴ったベルをステータスラインでも確認できるので便利です。
ベルってどうやって確認する?
次のようにprintf "\a"
でベルが鳴ります。
sleep 2; printf "\a"
実行してすぐに別のウィンドウに移動し、ウィンドウが変化するか確認しましょう。
window-status-bell-style
実はデフォルトだとベルが鳴ったウィンドウはスタイルがreverse
(反転)してしまいます。これは望ましくないため、bold
を指定しました。none
でもよいです。
set-option -gw window-status-bell-style "bold"
window-status-current-format
続いて、現在のウィンドウのフォーマット指定です。window-status-format
からベルの分岐を無くし、色を変えただけです。
set-option -gw window-status-current-format '#( \ label=" #W "; \ bg="#{@c-base-100}"; \ color="#{@c-primary}"; \ text_fg="#{@c-primary-content}"; \ echo "#[bg=$bg,fg=$color]#[bg=$color,fg=$text_fg,bold]$label#[bg=$bg,fg=$color,nobold]"; \)'
ついでにボーダーも設定
どうせならボーダーの色も合わせたいですよね。
set-option -g pane-border-style "fg=#{@c-base-content}"set-option -g pane-active-border-style "fg=#{@c-primary}"
トラブルシューティング
overline(上線)が表示されない
まずはターミナルがSGRに対応しているか調べましょう。
SGRとは
SGR(Select Graphic Rendition)とは、文字色や装飾を制御するためのしくみです。rendition
は「表現」「演出」などの意味です。
SGRに対応しているか?
たとえばWeztermだと対応しています。
手っ取り早く確認するなら、まずはtmuxを実行していない状態で次のコマンドを実行します。
# prefix + d などでデタッチしてから実行!printf "\n \x1b[53moverline\x1b[0m \n"
次のように上線が表示されれれば対応しています。

tmux側でoverlineの設定を追加
まずtmuxの外で次のコマンドを実行します。
# prefix + d などでデタッチしてから実行!echo $TERM
この値をメモして、tmuxに次の設定をします。
set-option -gu terminal-featuresset-option -as terminal-features ',YOUR-TERM-NAME:overline'
YOUR-TERM-NAME
の部分はさっき実行した「echo $TERM
の値」を書きます。
-a
は追記オプションです。これだけだと設定再読み込みのたびに追記されてしまうため、直前に-gu
でデフォルト値に戻しています。
複数の環境で使っている場合はその環境の分だけ書きます。
set-option -gu terminal-featuresset-option -as terminal-features ',TERM-FOO:overline'set-option -as terminal-features ',TERM-BAR:overline'
面倒な人は',*:overline'
でもOKです(未対応の環境で困るかも?)。
重要!再起動!
最後にtmuxを再起動します。
# prefix + d などでデタッチしてから実行!tmux kill-servertmux new-session -s default # セッションの作成方法はお好きに
最後まで表示されない
ウィンドウ幅は十分なのにステータスラインが途中で途切れてしまうなら、長さ設定を変えましょう。
set-option status-left-length 50 # デフォルトが10set-option status-right-length 80 # デフォルトが40
逆にステータスラインを非表示にしたい
ターミナル録画CLIのvhsを使っているときは、逆にステータスラインを非表示にしたいかもしれません。そういうときはoff
にします。
set-option status "off"
※デフォルトの値はon
です。
16進数の対応環境の確認・設定方法
使っているターミナルが16進数の色指定(True Color)に対応しているかはtermstandard/colorsの対応表で確認します。
次のコマンドでも確認できます。
printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"
オレンジで表示されれば対応しています。たとえば2025年8月23日現在のMacのTerminal.appでは非対応のため、実行すると白色でした。
非対応の環境ならターミナルを乗り換えましょう。
16進数指定を使えるようにするには
対応環境の場合、まずは次のようにterminal-features
にRGB
を追記します。
set-option -gu terminal-featuresset-option -sa terminal-features ",*:RGB"
昔からtmuxを使っている人はterminal-overrides
に*:Tc
などを書いていたかもしれませんが、tmux3.2以降は上記のようにterminal-features
に書きます。
最後にtmuxを再起動します。
# prefix + d などでデタッチしてから実行!tmux kill-servertmux new-session -s default # セッションの作成方法はお好きに
これで16進数の色指定が効きます。
色どうやって決めたらいいの?
筆者はdaisyUIのテーマabyss
を参考にしました。daisyuiのテーマはOklch色空間で書かれているため、oklch.comでRGBに変換して使いました。
文字化けがある・ズレる
記事前半でさらっと書きましたが、この記事のテンプレではNerd Fontsを使っています。具体的にはHackGen Console NF
(白源)です。
ターミナルで正しく設定できているか確認してください。
また、フォントによってはタブ表現などがズレることがあります。その際は別のフォント・文字を使いましょう。
他におすすめの文字はある?
今回は左右がカプセルっぽい見た目、ウィンドウ一覧がタブ表現でした。Nerd Fontsではチートシートでe0
と検索するとPowerline系でよく使われるやつがヒットするので見てみてください。
長くなりましたが、これでtmuxのステータスラインを自在にカスタマイズできるはずです。
ちなみにステータスラインは最大5行まで表示できるらしいです(やっている人見たことない)。