如何让 tmux 告诉 bash 在新打开的窗口中显示当前目录的 *logical* 版本?

fly*_*ger 6 bash tmux cd-command

背景

我在 VirtualBox 中使用 tmux 2.0、Ubuntu 14.04.2 LTS。

为了让 tmux 使用与当前窗口相同的路径打开新窗口,我将此行添加到我的~/.tmux.conf文件中:

bind c new-window -c "#{pane_current_path}"
Run Code Online (Sandbox Code Playgroud)

请注意,在 tmux 中,如果我通过 symlinkcd从家到子目录,然后检查并得到:pwdpwd -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
Run Code Online (Sandbox Code Playgroud)

问题是

如果我在新的 bash 提示中打开一个新的tmux 窗口,则~/pythons该窗口将采用物理路径:

/media/sf_Google_Drive/Home/Programs/Pythons$     # Not an awesome prompt
Run Code Online (Sandbox Code Playgroud)

问:是的,它打开到了正确的目录……但是有没有办法让 tmux 使用逻辑路径而不是完整的物理路径启动 bash ?

或者,也许我可以添加一些东西.bashrc来实现这一点?

编辑:

要检查是否有任何配置设置导致此问题,我尝试注释掉所有行,~/.tmux.conf除了

bind c new-window -c "#{pane_current_path}"
Run Code Online (Sandbox Code Playgroud)

但我仍然得到完整的物理路径。我还尝试echo~/.bashrc文件顶部输入当前(逻辑)路径。不幸的是,这与父窗口丑陋的物理路径相呼应,它显然已成为新窗口的物理逻辑路径。因此 tmux 2.0 必须通过以下值将其传递给新的 bash 实例"#{pane_current_path}"

此外,我刚刚发现这个最近打开的 tmux 问题:pane_current_path 与窗格的 PWD #33 不一致,表明此行为源自 tmux 代码。

问:所以也许我的问题应该是,是否有解决方法?

fly*_*ger 0

以下内容对我有用。

添加以下~/.bashrc行:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\u@\H:\w$ '
Run Code Online (Sandbox Code Playgroud)

并在 中~/.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"'
Run Code Online (Sandbox Code Playgroud)

重新启动 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