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 代码。
问:所以也许我的问题应该是,是否有解决方法?
以下内容对我有用。
添加以下~/.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。