tmuxで現在のディレクトリと同じ階層のウィンドウを開く

通常、tmuxでnew-windowをするとtmux起動時のディレクトリでウィンドウが開かれてしまうので、 なんとか出来ないかと思いつつ放置していた。

公式サイトのFAQを探っていたら、 解決方法が載っていたので、さっそく設定してみる。

tmuxのウィンドウには固有の環境変数があり、tmux set-env name [value]で設定出来るみたい、 これを使って各ウィンドウごとのカレントディレクトリをcd毎に設定していく。 また、各ウィンドウのIDはtmux display -p '#I'で獲得出来る。 サンプルコードではプロンプトに設定コードを埋め込んでいる。

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

僕の環境はzshなので、chpwd関数に挿入した。 ディレクトリが変わるごとに環境変数のTMUXPWD_xにカレントディレクトリを変更していく。

# .zshrc
function chpwd(){
  [ -n $TMUX ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD
}

後は以下のコードを.tmux.confに設定する。

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec $SHELL"'

これで目的の挙動になった。

コメント



作成日: 2011-05-12 05:53:37 更新日: 2011-05-12 05:53:37