如何讓 tmux 告訴 bash 在新打開的視窗中顯示目前目錄的 logical 版本?
背景
我在 VirtualBox 中使用 tmux 2.0、Ubuntu 14.04.2 LTS。
為了使 tmux 打開與目前視窗具有相同路徑的新視窗,我將此行添加到我的
~/.tmux.conf
文件中:bind c new-window -c "#{pane_current_path}"
請注意,在 tmux 中,如果我通過 symlink
cd
從家到子目錄,然後檢查並得到:pwd``pwd -P
~$ cd pythons ~/pythons$ # An awesome prompt ~/pythons$ pwd # According to "man pwd" this shows the "logical" path /home/qiime/pythons ~/pythons$ pwd -P # and this shows the "physical" path /media/sf_Google_Drive/Home/Programs/Pythons
問題是
如果我在新的 bash 提示符下打開一個新的tmux 視窗,則採用物理路徑:
~/pythons
/media/sf_Google_Drive/Home/Programs/Pythons$ # Not an awesome prompt
**問:**是的,它打開到了正確的目錄……但是有沒有辦法讓 tmux 使用邏輯路徑而不是完整的物理路徑來啟動 bash?
或者,也許我可以添加一些東西
.bashrc
來實現這一點?編輯:
要檢查是否有任何配置設置導致此問題,我嘗試註釋掉
~/.tmux.conf
除bind c new-window -c "#{pane_current_path}"
但我仍然得到完整的物理路徑。我還嘗試
echo
從文件頂部獲取目前(邏輯)路徑~/.bashrc
。不幸的是,這與父視窗醜陋的物理路徑相呼應,這顯然已經成為新視窗的物理和邏輯路徑。所以 tmux 2.0 必須通過值將它傳遞給新的 bash 實例"#{pane_current_path}"
此外,我剛剛發現這個最近打開的 tmux 問題:pane_current_path 與窗格的 PWD #33 不一致,表明此行為源於 tmux 程式碼。
**問:**所以也許我的問題應該是,有解決方法嗎?
以下對我有用。
到
~/.bashrc
,添加以下行:PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\u@\H:\w$ '
並
~/.tmux.conf
添加以下行:bind-key c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"' bind-key % run-shell 'tmux splitw -h "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"' bind-key '"' run-shell 'tmux splitw -v "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'
重啟 tmux。
來源
請參閱“如何在與目前視窗相同的目錄中打開新視窗?”部分。在http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ。
請注意,必須將 .bashrc 行末尾的字元從上面連結中的原始字元更改為
'\u@\H:\w$ '
,才能正確顯示完整的 bash 提示符。有關更多資訊,請參見http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html。