背景
我在 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了解更多信息。