たけっぱ横丁

the technical document for Vim(Editor), Natural Language Proecssing(NLP) tools and Programming(Python, Ruby, C++ etc).

Nested tmux向け.tmux.conf

Remote Server に 作業用のtmuxを常駐している.

僕の環境では,

自宅PC -> Remote server -> 各種サーバ

とつなげることが多く, Remote serverにtmuxを常駐させることによって 作業状態を保存して置けるのが, かなり嬉しいのでtmuxをネストして使うことが多い.

しかしながら ネストしたtmuxでのprefixの使い分けが 苛ついてて仕方ないので, ネストしたtmuxをシームレスに使える設定を考案.

以下に述べようと思う.

Nested tmux向け設定

まずtmux では以下の設定でC-qにprefixを付け替えられる.

set-option -g prefix C-q

ネストしたtmuxでは, 以下の様に設定してやれば C-s がネストしたtmuxのprefixになる.

bind -n C-s send-prefix

しかしながら prefixの使い分けは, 非常にややこしく操作ミスも大きいくせに リスクが大きい.

よくあるのが, 中のtmuxのpaneを昨除しようと思ったら, 外側のtmuxのペインを削除し, tmuxごと消えてしまうということ, またその逆も然りである.

従ってネストした時には, 今のprefixが ネストしたtmuxのprefixであると直感的操作ミスも少なくなるだろう.

ということで, Nested tmux 向けに以下のように設定を行うことで解決. 僕はCtrl+矢印でウィンドウの移動を行っているので, その移動の際にsshのチェックを行うだけである

bind -n C-q send-key C-q
bind -n C-Left  run-shell 'tmux previous-window; \
        tmux if-shell "$is_ssh" " \
            set-option -q prefix C-s " " \
            set-option -q prefix C-q "'
bind -n C-Right  run-shell 'tmux next-window; \
        tmux if-shell "$is_ssh" " \
            set-option -q prefix C-s" "\
            set-option -q prefix C-q; unbind C-s"'

以上の設定はtmux1.8のみで動作を確認している