tmux は GNU Screen のような仮想端末を提供します。
~/.tmux.conf
# プレフィックスキー
set -g prefix C-t
# C-t C-t でトグル
bind C-t last-window
# Vim 風のキーバインド
setw -g mode-keys vi
# ステータスバーの色
set -g status-fg white
set -g status-bg black
setw -g window-status-current-fg black
setw -g window-status-current-bg yellow
# 履歴の長さ
set-option -g history-limit 10000
$ tmux new -s セッション名
C-t d
$ tmux ls
直近のセッション
$ tmux a
セッション名を指定
$ tmux a -t セッション名
他のクライアントをデタッチしてからアタッチ
tmux a -d
tmux a -d -t セッション名
$ tmux kill-session -t セッション名
C-t c
C-t C-t
previous
C-t p
next
C-t n
C-t w
C-t ,
C-t $
C-t [
範囲選択の開始 (スペースキー) → 範囲選択の完了 (エンター) → 貼り付け (C-t ]
)
C-t ?
C-t &
.tmux.conf
に以下の設定を追加します。C-t
e
で同時に複数ペインを操作できるようになります。
bind e setw synchronize-panes on
bind E setw synchronize-panes off
ペインを水平方向または垂直方向に追加
C-t %
C-t "
ペインを移動
C-t o
C-t ;
ペインを破棄
C-t x
ペインを整理
C-t space
ペインを拡大、戻す
C-t z
ペイン番号を環境変数で取得できます。
echo ${TMUX_PANE}
%7
echo ${TMUX_PANE} | sed 's/%//' | awk '{ printf "%04d\n", $1 }'
0007
コマンドラインから tmux を設定することができます。以下の例は、複数サーバに同時に ssh を行いたい場合に便利です。
#!/bin/bash
set -eu
set -o pipefail
NAME="awesome-window"
LAYOUT="tiled" # "even-horizontal" "even-vertical"
CMDS=(
"ssh host1"
"ssh host2"
"ssh host3"
"ssh host4"
"ssh host5"
"ssh host6"
"ssh host7"
"ssh host8"
"ssh host9"
)
tmux new-window -n ${NAME}
for i in $(seq ${#CMDS[@]}); do
tmux send-keys -t ${NAME}.$(expr $i - 1) "${CMDS[$i - 1]}"
if [ $i -ne ${#CMDS[@]} ]; then
tmux split-window -t ${NAME}
tmux select-layout -t ${NAME} ${LAYOUT}
fi
done
tmux set-window-option -t ${NAME} synchronize-panes on