使用活动窗格pwd自动更新tmux状态栏

Jez*_*mas 7 tmux

在tmux中,状态栏通常显示窗口列表中窗格的当前工作目录.如果我在窗口中有两个窗格,并且两个窗格具有不同的工作目录,是否可以使用我当前关注的窗格的当前工作目录自动更新状态栏?

为了澄清,如果我有一个带有两个窗格的窗口,并且第一个窗格在~,第二个窗格在~/Sites,我希望状态栏中的窗口列表说1:〜当我专注于第一个窗格时,1:〜/我专注于第二个窗格时的网站.

gos*_*pes 6

除了之前的答案,我想补充一点,您不必依赖 status-interval 选项。等待看到变化并不是很优雅。您可以手动更新事件的状态栏:

tmux refresh-client -S
Run Code Online (Sandbox Code Playgroud)

我在窗格/窗口/会话切换后使用此选项。在我的 tmux 配置中,您会发现例如切换窗格:

bind -r k select-pane -U\; refresh-client -S
bind -r j select-pane -D\; refresh-client -S
bind -r l select-pane -R\; refresh-client -S
bind -r h select-pane -L\; refresh-client -S
Run Code Online (Sandbox Code Playgroud)

我之前发布过这个:手动刷新状态栏


cas*_*ams 6

这是执行此操作的另一种方法。

工作环境:

操作系统

  • 操作系统 10.14.5

终端

多路复用器

  • 多路复用器2.9a

~/.tmux.config

set -g status-interval 1
set-window-option -g window-status-separator ""
set-window-option -g window-status-current-format " *#{b:pane_current_path} "
set-window-option -g window-status-format " #{b:pane_current_path} "
Run Code Online (Sandbox Code Playgroud)

笔记

  • 显示密码#{b:pane_current_path}
  • 显示完整路径#{pane_current_path}

将首页显示为~

path="#(if [[ $HOME == #{pane_current_path} ]]; then echo \"~\" ; else echo #{b:pane_current_path}; fi)"


set-window-option -g window-status-separator ""
set-window-option -g window-status-current-format " $path "
set-window-option -g window-status-format " $path "
Run Code Online (Sandbox Code Playgroud)

tmux 插件

tmux 空间主题


sci*_*tor 5

提示下的Tmux窗格PWD

有几种方法可以做到这一点.我自己做.最简单,最可自定义的方法是设置tmux可以访问的全局变量.

首先它添加到您的.bashrc.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)'
Run Code Online (Sandbox Code Playgroud)

现在,创建一个显示此变量的脚本,例如~/bin/display_tmux_pane_pwd.sh:

#!/bin/bash
tmux showenv -g TMUX_PWD_$(tmux display -p "#D" | tr -d %)  | sed 's/^.*=//'
Run Code Online (Sandbox Code Playgroud)

剩下的就是将其添加到满意度中.tmux.conf:

set -g status-left '#(~/bin/display_tmux_pane_pwd.sh)'
Run Code Online (Sandbox Code Playgroud)

切换窗格后更新可能需要一段时间,因此您可以使用此命令更改它.默认情况下,它每15秒更新一次,这将使其为5秒.根据需要更改它.

set -g status-interval 5
Run Code Online (Sandbox Code Playgroud)

其他程序中的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
Run Code Online (Sandbox Code Playgroud)