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

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

背景

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

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

bind c new-window -c "#{pane_current_path}"

请注意,在 tmux 中,如果我cd从 home 到一个子目录通过符号链接,然后检查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

问题是

如果我打开一个新的tmux 窗口~/pythons新的 bash 提示符下呈现身体的小路:

/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 与 pane 的 PWD 不一致 #33表明此行为源自 tmux 代码。

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

答案1

以下内容对我有用。

添加~/.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了解更多信息。

相关内容