出现提示时的 Tmux 窗格 PWD
有多种方法可以做到这一点。我自己做。最简单且最可定制的方法是设置 tmux 可以访问的全局变量。
首先将其添加到您的.bashrc
or .zshrc
文件,在每次提示后设置 PWD 变量:
# create a global per-pane variable that holds the pane's PWD
export PS1=$PS1'$( [ -n $TMUX ] && tmux setenv -g TMUX_PWD_$(tmux display -p "#D" | tr -d %) $PWD)'
现在,创建一个显示此变量的脚本,例如~/bin/display_tmux_pane_pwd.sh
:
#!/bin/bash
tmux showenv -g TMUX_PWD_$(tmux display -p "#D" | tr -d %) | sed 's/^.*=//'
剩下的就是将其添加到 satis-bar 中.tmux.conf
:
set -g status-left '#(~/bin/display_tmux_pane_pwd.sh)'
切换窗格后可能需要一段时间才能更新,因此您可以使用此命令进行更改。默认情况下,它每 15 秒更新一次,这将使其更新为 5 秒。根据您的喜好更改它。
set -g status-interval 5
其他程序中的 Tmux-pane PWD
有时打开一个窗格或窗口并立即执行程序而不是启动另一个 shell 很有用(例如tmux new-window vim
)。这样,当您关闭该程序时,您也会关闭该窗口。不幸的是,我上面描述的方式需要提示才能广播 PWD 的状态。然而,在许多程序中,您可以相当轻松地解决这个问题。这是我的示例.vimrc
文件,以便 vim 在更改缓冲区时更新 PWD 状态。
if exists("$TMUX")
" Get the environment variable
let tmux_pane_name_cmd = 'tmux display -p \#D'
let tmux_pane_name = substitute(system(g:tmux_pane_name_cmd), "\n", "", "")
let tmux_env_var = "TMUX_PWD_" . substitute(g:tmux_pane_name, "%", "", "")
unlet tmux_pane_name tmux_pane_name_cmd
function! BroadcastTmuxCwd()
let filename = substitute(expand("%:p:h"), $HOME, "~", "")
let output = system("tmux setenv -g ".g:tmux_env_var." ".l:filename)
endfunction
autocmd BufEnter * call BroadcastTmuxCwd()
endif