Tips & Tricks

tmuxの便利なテクニックとノウハウを紹介します。

ネストしたtmuxセッション

ローカルとリモートで両方tmuxを使う場合、2階層のtmuxが実行されます。

外側のtmuxを一時無効化

Ctrl+b Ctrl+b

2回プレフィックスキーを押すと、内側のセッションにコマンドが送信されます。

.tmux.confで設定

# ~/.tmux.conf

# 外側のtmux用色
set -g status-bg blue
set -g status-fg white

# ローカルキーとリモートキーを区別
bind -n M-a send-keys C-a  # Alt+a を Ctrl+a に

コマンド履歴

ペイン履歴をファイルに保存

tmux capture-pane -t <session> -p > output.txt

履歴を全て確認

Ctrl+b [

でコピーモードに入ると、スクロール履歴が確認できます。

レイアウト保存・復元

現在のレイアウトを保存

tmux list-windows -t <session> -F "#{window_layout}"

出力されたレイアウト文字列を記録。

レイアウトを復元

tmux select-layout -t <session> <layout-string>

キーバインドのデバッグ

入力されたキーを確認

showkey -a

または tmux内で:

Ctrl+b ?

でキーバインド一覧を表示。

パフォーマンス最適化

不要な設定を削除

# ~/.tmux.conf

# 頻繁な描画を避ける
set -g status-interval 5

# シェル統合を無効化(不要な場合)
set -g default-shell /bin/bash

SSH接続時の最適化

# ~/.tmux.conf

# SSH接続時は画面更新を抑制
set -g aggressive-resize on

ペアプログラミング

複数ユーザーが同じセッションを共有

# ユーザーA がセッション作成
tmux new-session -s pair -c ~/project

# ユーザーB がセッション接続
tmux attach -t pair

# 別の方法:所有者がウィンドウを共有可能に
tmux new-session -s shared
tmux send-keys "chmod 777 /tmp/tmux-*" Enter

セッションソケットの権限設定:

# セッション作成時にソケット権限を設定
TMUX_SOCK="/tmp/tmux-shared"
mkdir -p "$TMUX_SOCK"
tmux new-session -S "$TMUX_SOCK/session" -s shared
chmod 777 "$TMUX_SOCK"
chmod 777 "$TMUX_SOCK"/session

# 別ユーザーが接続
tmux -S "$TMUX_SOCK/session" attach -t shared

SSH接続保持

SSH KeepAlive設定

# ~/.ssh/config

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 10

tmuxでSSH接続を保つ

# ~/.tmux.conf

# セッション生成にかかる時間を設定
set -g default-command "exec /bin/bash"

マウス操作の活用

マウス機能の有効化

set -g mouse on

マウスでできる操作

スムーズなアニメーション設定

# ~/.tmux.conf

# ペイン分割のアニメーション効果
set -g pane-border-status bottom

# ウィンドウ切り替え時のアニメーション(対応端末のみ)
set -g transition-speed fast

画面キャプチャと共有

現在の画面をスクリーンショット

tmux capture-pane -t <session>:<window>.<pane> -p > screenshot.txt

画面を記録(スクリーン記録)

#!/bin/bash
# tmux-record.sh

tmux capture-pane -t mywork -p > recording.txt

while true; do
    clear
    cat recording.txt
    sleep 1
    tmux capture-pane -t mywork -p > recording.txt
done

Vimとの統合

tmuxペイン内でVim検索結果をコピー

" ~/.vim/plugin/tmux-copy.vim

nnoremap <leader>c :!tmux send-keys -t right 'search' C-m<CR>

vim-tmux-navigatorプラグイン

# Vim内でもtmux内でも同じキーバインドでナビゲート

# ~/.vimrc
Plugin 'christoomey/vim-tmux-navigator'

複数ディスプレイ・モニター

ウィンドウを別ディスプレイに移動

# セッション内のウィンドウを別セッションに移動
tmux move-window -s <session1>:<window> -t <session2>

デスクトップ環境での使用

# ウィンドウマネージャーと連携
tmux send-keys -t <pane> "open -n -a Firefox" Enter

トラブルシューティング

セッションが応答しない

# セッション一覧確認
tmux ls

# 強制削除
tmux kill-session -t <stuck-session>

# 全セッション削除(危険)
tmux kill-server

ペイン操作が遅い

# status-interval を増やす
set -g status-interval 10

# 不要なプラグインを削除

キーバインドが効かない

# キーバインド確認
tmux list-keys

# 設定ファイル再読み込み
tmux source-file ~/.tmux.conf

自動化スクリプト

朝のセッション設定スクリプト

#!/bin/bash
# morning-setup.sh

SESSION="morning"

tmux new-session -d -s $SESSION

# メールチェック
tmux send-keys -t $SESSION "mutt" Enter

# カレンダー確認
tmux new-window -t $SESSION
tmux send-keys -t $SESSION "cal" Enter

# ニュース確認
tmux new-window -t $SESSION
tmux send-keys -t $SESSION "newsboat" Enter

tmux attach -t $SESSION

終了時のセッションバックアップ

#!/bin/bash
# backup-sessions.sh

BACKUP_DIR="$HOME/.tmux/backups"
mkdir -p "$BACKUP_DIR"

# 全セッション情報をバックアップ
tmux list-sessions -F "#{session_name}" | while read session; do
    tmux capture-pane -t "$session" -p > "$BACKUP_DIR/$session.txt"
done

参考リンク