tmuxを入れ子にするとプレフィックスキー操作が煩雑になるのでこれまでつかわないでいたが、1つのリモートサーバーに複数のシェルを立ち上げたいときにいちいちsshログインするのはやっぱメンドクサイ。リモートでtmuxがうごいていればnew-windowやsplit-windowでさっとシェルを立ち上げられるのに。

tmux公式としては内側のtmuxでprefix2を設定するかprefix連打で対応しろってことだとおもっている。

ちょっと調べてみたがnested tmuxのイケてる実装はなさそうで、でもアイデアはこのnested Tmuxからいただいて、ちょっと作ってみた。

bind-key -n F7 run-shell 'NESTED=$(tmux show-option -v @nested); tmux set-option @nested "X$NESTED"; tmux set-option prefix None; tmux set-option status-style bg=red; test "$NESTED" = "" || tmux send-keys F7'
bind-key -n F9 run-shell 'NESTED=$(tmux show-option -v @nested); tmux set-option @nested "${NESTED#X}"; if test "$NESTED" = "X"; then tmux set-option prefix C-l; tmux set-option status-style bg=white; else tmux send-keys F9; fi'
bind-key F7 send-key F7
bind-key F9 send-key F9

set-option -g status-left "[#S]#{?@nested, #{@nested},}"

使い方

  • F7とF9がホットキーになっている。なぜF7/F9なのかというと、HHKBだと押しやすいから。ちなみにHHKBのFnは左Altにしている。
  • F7をおすと外側のtmuxのprefixが無効化されてprefixキーが内側のtmuxに直接届くようになる。
  • F9を押すと外側のtmuxのprefixが有効になる。

問題点

  • prefixは外側と内側で同じになってる想定。ちがってても動くけど。
  • prefix,F7,F9,bg=が決め打ちなのはダサい。
  • F7連打すると最内側のシェルにF7が貫通する。
  • マウスでwindow/paneの移動をされると厄介。