工作环境:

工作环境:

我的 tmux 2.1 状态栏有问题。正如手册所解释的,我会在 ~/.tmux.conf 中写入:

set -g status-right "#(/bin/pwd) %R %d/%m/%g"
set -g status-interval 1

我启动tmux后状态栏是/home/conformist。但如果我更改 cwd(如 cd /)——状态栏仍然是 $HOME。

如果我将 conf 更改为:

set -g status-right "#{pane_current_path} %R %d/%m/%g"

我想在状态栏 $HOME 像 ~ 一样查看,但不能这样做,因为 pwd 不会改变(并且 pwd | perl -pne s-$HOME-~- 也不起作用)。

答案1

工作环境:

操作系统

  • 操作系统 10.14.5

终端

多路复用器

  • 多路复用器2.9a

状态右侧字段示例

~/.tmux.config要调用所提供示例中的外部 bash 脚本,该文件位于此处:~/.tmux_path.sh

~/.tmux.config

set -g status-interval 1
set -g status-right-length 150
set -g status-right "#(~/.tmux_path.sh #{pane_current_path}) %Y-%m-%d %H:%M:%S"

示例 bash 脚本读取 #{pane_current_path) arg。 basename截断起始路径并仅显示当前路径。如果用作窗口 ID,这很好。注意:这是假设$HOME = /home/user人们可能需要进行调整-f-1,4-以匹配所需的结果。

~/.tmux_path.sh

#!/bin/sh
printf '\033%s\007' $(echo "$1" | awk '{print "~"$1}' | cut -d/ -f-1,4-)

使脚本可执行

chmod +x ~/.tmux_path.sh

窗口命名示例

  • 注意:使用~/.tmux_path.sh与上面相同的内容

~/.tmux.conf

set -g status-interval 1
set -g window-status-current-format "[#[fg=white] #(~/.tmux_path.sh #{pane_current_path})]"
set -g window-status-format "#[fg=black] #(~/.tmux_path.sh #{pane_current_path})"

答案2

呼唤/bin/pwd是行不通的,因为程序是由同一个进程运行的(它是不是你的外壳)。如果您使用的是bash,则可以修改提示以发送转义序列,以tmux使用示例所示的转义序列更改窗口名称:

printf '\033kWINDOW_NAME\033\\'

下面是一个单独的 shell 脚本来演示转义序列:

#!/bin/sh
printf '\033k%s\033\\' $(pwd)

它与 xterm 标题使用的转义序列不同,但您可以应用中的建议Bash 提示符 HOWTO以同样的方式。

进一步阅读:

相关内容