世界を動かす技術を、日本語で。

Tmuxを美しく使いやすくする (2024)

概要

tmux のカスタマイズ方法と便利な設定例を解説。 tmux.conf ファイル編集による基本的な設定変更方法を紹介。 プレフィックスキーやペイン分割、マウス操作など 操作性向上 のための実践例。 見た目や色設定の調整方法も具体的に説明。 追加リソースや参考リンクも案内。

tmuxカスタマイズ入門:使いやすさを追求する設定例

  • tmux の標準キー操作は慣れないと使いにくい印象
  • 多くのユーザーが自分好みに カスタマイズ している現状
  • カスタマイズは tmux.conf (ホームディレクトリなら~/.tmux.conf)を編集するだけ
    • システム全体用の設定も可能(OSごとに場所が異なるためman tmux参照)
  • プレフィックスキー の変更が最も一般的なカスタマイズ
    • デフォルトの C-b (Ctrl+b)を C-a に変更する例
      • bashの「行頭移動」と競合注意(C-a C-aで回避可能)
      • Caps LockをCtrlに割り当てるとさらに便利
      • 設定例:
        unbind C-b
        set-option -g prefix C-a
        bind-key C-a send-prefix
        
  • ペイン分割 の直感的なキー割り当て
    • デフォルトの"や%よりも、 |- を割り当てることで視覚的に分かりやすく
      bind | split-window -h
      bind - split-window -v
      unbind '"'
      unbind %
      
  • 設定ファイルのリロード を簡単に
    • rキーで即時反映
      bind r source-file ~/.tmux.conf
      
  • ペイン切り替え の高速化
    • Alt+矢印キー(M-Left等)でプレフィックス不要の切り替え
      bind -n M-Left select-pane -L
      bind -n M-Right select-pane -R
      bind -n M-Up select-pane -U
      bind -n M-Down select-pane -D
      
  • マウスモード の有効化
    • クリックでペイン/ウィンドウ選択やリサイズが可能
      set -g mouse on
      
  • ウィンドウ名の自動変更の抑止
    • 手動で付けたウィンドウ名を維持する設定
      set-option -g allow-rename off
      

tmuxの外観をカスタマイズする

  • 色やデザイン の変更はやや高度だが柔軟に設定可能
  • 例:ペインの境界線やステータスバー、メッセージの色指定
    set -g visual-activity off
    set -g visual-bell off
    set -g visual-silence off
    setw -g monitor-activity off
    set -g bell-action none
    setw -g clock-mode-colour yellow
    setw -g mode-style 'fg=black bg=red bold'
    set -g pane-border-style 'fg=red'
    set -g pane-active-border-style 'fg=yellow'
    set -g status-position bottom
    set -g status-justify left
    set -g status-style 'fg=red'
    set -g status-left ''
    set -g status-left-length 10
    set -g status-right-style 'fg=black bg=yellow'
    set -g status-right '%Y-%m-%d %H:%M '
    set -g status-right-length 50
    setw -g window-status-current-style 'fg=black bg=red'
    setw -g window-status-current-format ' #I #W #F '
    setw -g window-status-style 'fg=red bg=black'
    setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '
    setw -g window-status-bell-style 'fg=yellow bg=red bold'
    set -g message-style 'fg=yellow bg=red bold'
    
  • 色指定 は「red」「yellow」等の名前または「colour0~colour256」も利用可能
  • ターミナルのカラースキーム も合わせて変更推奨
    • オリジナルの「Root Loops」カラースキームも紹介

参考リソース・さらなる学習

  • GitHub や各種コードホスティングサービスで「tmux.conf」や「dotfiles」を検索
    • 多数の実例や設定例を入手可能
  • Reddit の/r/dotfilesや/r/unixpornも参考になる情報源
  • 自身の dotfilesリポジトリ も公開中
  • 詳細なカスタマイズ方法は tmuxのmanページ (man tmux)や tmux wiki のConfiguring tmuxセクションを参照
  • 最新情報や詳細なオプションは公式ドキュメントが最適

まとめ

  • tmux は簡単に自分好みにカスタマイズ可能
  • キー割り当てや見た目、操作性を自分に合った形に調整できる
  • 豊富なリソースを活用して、快適なターミナル環境を構築

Hackerたちの意見

それを諦めたのは、https://zellij.dev/ を見つけたからだね。タブやペインの設定がすごく良くて、マウスでのスクロールやテキスト選択がしやすいから、コピー&ペーストも楽なんだよね。

数年間tmuxを使ってたけど、ある日Zellijを見つけたんだ。UIが格段に良くて、全体的なユーザー体験も最高で、一瞬で惚れ込んじゃった。

100%同意。tmuxはしっくり来なかったけど、Zellijは5分で馴染んだ。Vimを長年使ってるから、すごく親しみやすかった。

いいね、今日はラッキーな1万人のうちの一人だよ。ありがとう。

最近2週間、zmxを使ってる。まだちょっとバグがあるけど(画面の再描画)、ghosttyと一緒に使うとかなり快適だよ。https://github.com/neurosnap/zmx

フラッシュスペースが限られてる埋め込みデバイスがいくつかある。tmuxはzellijよりずっと小さいし、比べ物にならない。Zellijは50メガバイト近くあるけど、tmuxとその依存ライブラリ(libcを除いて、いつもあるけど)は約2メガバイトだよ。

この感覚、みんな共感してるみたいだね。tmuxユーザー向けの良い変換ガイドってある?数年前にzellijが流行り始めたときに試してみたけど、あんまりピンとこなかったんだよね。

tmuxを何度も試したけど、シーケンスを覚えられなかった。でもzellijはすぐに使いやすくて、「発見」しやすかったから、プラグイン(rust wasm)を書き始めたんだ。背景色をパネルやタブでサポートするPRも出したら受け入れられたし。毎月寄付もしてるよ。コミュニティのバランスが良いし、リード開発者もビジョンを持ってるし、意見はあるけど意見も受け入れてくれるし、集中してると思う。

私も同じことをしたけど、最近はzellijがちょっと重くなりすぎて戻っちゃった。tmuxpを使ってtmuxセッションを構築して、autosshでいろんなsshセッションに接続してるけど、こっちの方がずっと満足してるよ。

ウィンドウマネージャーやグラフィックスを発見してから、ターミナルでそれらをエミュレートするための中途半端な機能を使うのをやめた。tmuxはネットワーク接続が切れた後にプログラムに再接続するために使ってるだけで、他にはあまり使ってないかな。そういう機能だけを残して、再接続時に最後の数ページのスクロールバックを再生するバージョンがあれば歓迎だね。

zellijの唯一の(私にとっては致命的な)弱点は、キーボードからのコピー/ペースト(画面/スクロールバックから)がサポートされてないことと、複数のコピー/ペーストバッファがないこと。tmuxでは大体60〜90秒ごとにそれをやってるから、zellijの開発者が折れない限り(彼らは「正しい方法」としてデータをテキストエディタにパイプして使うことを提案してるけど、システムのコピー・ペーストバッファをサポートしてないのが難点だね)。

何年か前に週末に「tmux 2: mouse-free productivity」を読んだんだけど、これが生産性においてかなり影響力のある本だったかも。今も最新情報を更新してるみたいだね: https://bookshop.org/p/books/tmux-3-productive-mouse-free-de...

この本、tmuxの作者やその起源について一度も触れてないんだね :(

参考にしてくれてありがとう。

iTerm2のtmuxコントロールモードに感動してるよ。これでリモートターミナルウィンドウをローカルのウィンドウ管理ツールで管理できるんだ。今、ghosttyでも実装中らしいし、楽しみ! [0] https://github.com/tmux/tmux/wiki/Control-Mode [1] https://github.com/ghostty-org/ghostty/issues/1935#issuecomm...

tmuxをカスタマイズしすぎて、クリーンインストールでの使い方を忘れちゃったんだ。サーバーにsshで入るときに困る。デフォルトがもうちょっと良ければいいんだけど、今はそのまま使ってる。しばらくすると慣れるけど、いつも変えなきゃいけないのはマウスのスクロールで、正確なコマンドを頭に入れられないんだよね。

じゃあ、scp ~/.tmux.conf remotehost: でいいんじゃない?

「ドットファイル」のリポジトリ持ってる?tmuxやzshの設定ファイルとかが入ってるやつ。

「tmuxをカスタマイズしすぎて、クリーンインストールしたときの使い方を忘れちゃった。サーバーにSSH接続するときはこれが問題になるんだ。gnu emacsでも同じ問題があったけど、ディスクが壊れたときに自分のカスタム設定を失っちゃった…結局、ほぼバニラのemacsを使うことにした :)」

何度もこの問題に直面したことがある。最後にこの痛みを和らげたのは、tmuxのデフォルト設定を上書きしないように気をつけて、非衝突の設定だけを追加することだった。そうすれば、新しいマシンや不慣れなマシンでtmuxを使うときも、基本機能はそのままで、カスタマイズの楽しさだけが欠ける感じになる。例えば、既存のプレフィックスバインディング(ctrl-b)はそのままにして、日常使いに便利なもの(ctrl-spaceとか)を追加する感じ。

「Claude、tmuxの設定をあのボックスにscpして」

Shift+Enterがうまくいかなくて、tmuxからzellijに移ったんだけど、最初はかなり感動して新しい筋肉記憶を作るのに数週間かけたんだ。でも、なんかZellijがパニックでクラッシュしちゃって、プロセスが孤児になっちゃった。だからtmuxに戻ることにして、Shift+Enterの問題の簡単な解決策を見つけたよ。もし探してる人がいたら、解決策は「bind-key -T root S-Enter send-keys C-j」で、https://github.com/anthropics/claude-code/issues/6072から借りたものだよ。

マルチプレクサプロセスが死んでも、その子プロセスが動き続けるってことはあるのかな?最悪のシナリオ(ペインがハングしてtmuxセッションが応答しなくなる)でも、tmuxサーバーを殺せば、後で個別のプロセスを探して殺さなくて済むっていうのを頼りにしてるんだ。

もし探してる人がいたら、解決策は「bind-key -T root S-Enter send-keys C-j」だよ。探してたんだ、ありがとう!

面白いね。僕はshift+enterが効かないけど、option+enterだとtmuxの中のClaude Codeのプロンプトボックスで新しい行ができるよ。

shift-enterって何するの?

みんな、tmuxのコントロールモードって知ってた?これを使うと、ホストターミナルがtmuxのタブを実際のタブとして扱うようになるんだ。つまり、スクロールバックやタブナビゲーション、コピー&ペースト、キーボードショートカットなんかがネイティブに処理されて、tmuxのタブが視覚的に見えるようになる!すべてのターミナルでのサポートはあまり良くないけど、iTerm 2ではすごくうまく動くよ。iTermでtmux -CCを試してみて。tmux初心者の僕にとって、これはまさにゲームチェンジャーだった :)

なんてこった。

これが僕がMacを使う唯一の理由だね。10年経っても、オープンソースのLinuxターミナルでこれを実装したものは見たことないよ。

僕にとっては、bind-key -n M-n new-window bind-key -n M-1 select-window -t :1 bind-key -n M-2 select-window -t :2 bind-key -n M-3 select-window -t :3 bind-key -n M-4 select-window -t :4 bind-key -n M-5 select-window -t :5 bind-key -n M-6 select-window -t :6 bind-key -n M-7 select-window -t :7 bind-key -n M-8 select-window -t :8 bind-key -n M-9 select-window -t :9 が足りない。これで素早く切り替えられるから。僕のシステムでは、ワークスペース用にSuper-{1-9}、tmuxのペイン用にAlt-{1-9}を使ってる。あと、viっぽいコピー・モード(選択してコピーできるやつ)が欲しいなら、Alt-/で開くように設定してる:bind-key -n M-/ copy-mode set -g status-keys vi set-window-option -g mode-keys vi # vで選択をトリガー bind-key -T copy-mode-vi v send-keys -X begin-selection # waylandを使ってるならwl-copy # コピー・モードでのマウス選択でコピー bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel "wl-copy" # yでコピー bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy" それと、Ctrl-Shift-vでシステムクリップボードをペーストできるよ。設定は~/.config/tmux/tmux.confに入れてもいいし。編集:もしパワーライン風のデザインが欲しいなら: set -g pane-border-style "fg=colour252" set -g pane-active-border-style "fg=colour25" set -g status-style "bg=default,fg=default" set -g status-left "#[fg=colour231,bg=colour25,bold] #S #[fg=colour25,bg=default,nobold]" set -g status-right "#[fg=colour67,bg=default]#[fg=colour231,bg=colour67] %Y-%m-%d %H:%M #[fg=colour25,bg=colour67]#[fg=colour231,bg=colour25,bold] #h " setw -g window-status-format "#[fg=colour243,bg=default] #I #W " setw -g window-status-current-format "#[fg=colour28,bg=default,reverse]#[fg=colour231,bg=colour28,bold,noreverse] #I #W #[fg=colour28,bg=default,noreverse]" パワーラインフォントが必要だよ。

もっと使いやすいプレフィックスキー > tmuxユーザーの間で最も一般的な変更は、ちょっと使いにくいC-bから、もう少しアクセスしやすいものにプレフィックスを変更することだね。私はデフォルトのプレフィックスキーの使いにくさが好き。ほとんど事故で発動したことがないから。 > 直感的な分割コマンド > 私が個人的に覚えるのが難しいのは、パネルを分割するコマンドなんだ。「|」で縦に分割、「%」で横に分割ってのが、私の脳には合わない。この点はすごく直感的だと思う。二つの'が並ぶと横に分割、二つの°がほぼ水平な線で分割すると縦に分割って感じ。 > 簡単な設定リロード 私がtmuxを学び始めた10年前の最初の週に、設定を何百回もリロードしたけど、ここ5年で正確に言うと1回しかリロードしてないと思う。覚えるべきことじゃないよね。

tmux大好き!完璧に使えるよ!たった400行のカスタム設定ファイルがあればいいんだ![1] [1] https://doc.xn0.org/.tmux.conf ただし、ちょっと冗談だけど真面目な話。tmuxは初めからユーザーフレンドリーでは全くない。でも、異常な量の調整をした後はすごく良くなるから、これは賛成か否定か、見る人によるね。

tmuxに対する主な不満は、ネストした使い方なんだよね(ローカルマシンでtmuxセッションを立てて、そこから別のマシンにsshして、さらにそのリモートマシン内でtmux attachするっていう)。ネストしたセッションを簡単にサポートしてくれるターミナルマルチプレクサやセッションデーモンってないかな?

リモートホストでいろんなタスクをこなすために、"外側"のtmuxプロセスと"内側"のtmuxプロセスをサポートするために、結構な量の設定を書いたんだ。どんなソフトウェアがこれを管理するかは分からないけど、少なくとも外側のセッションでCtrl+aを使って、内側のセッションでCtrl+bを使うように設定したら、うまくいってるよ。セッションを簡単に参照できるようにソケットを指定するエイリアスも作ったから、混乱することもないし。