20

我是 tmux 的新手,我正在尝试编辑我的 tmux.conf 文件以使状态栏的左侧反映:

[SessionName] [CurrentPane] [CurrentWorkingDirectory]

我能够显示SessionNameand CurrentPane。但是我无法显示CurrentWorkingDirectory.

我尝试了几种#(shell command)选择:

  1. #(tmux select-pane -t :.#P; pwd):但这会打印一些其他 $PWD 变量,该变量反映当前窗格中 bash 会话的当前目录。

  2. #(tmux select-pane -t :.#P; tmux send-keys pwd Enter) 首先,虽然它确实打印了CurrentWorkingDirectory如果我在终端中。它在终端中打印它,而不是像我想要的那样在状态栏中打印。其次,无论我是否在终端中,它每 15 秒输入一次“pwd Enter”,如果你不那么快(像我一样),这很麻烦。

我已经尝试了这些选项,但无济于事,是否可以做我想做的事?如何?

4

3 回答 3

27

有一个变量,它似乎不在手册页中,但在开发版本中提到。对我来说,它适用于 tmux 的 1.8 版本。

set -g status-left "#{pane_current_path}"

请注意,当您将其置于窗口状态时,它也可以工作。每个窗口状态都会提及各自的工作目录。

setw -g window-status-format "#{pane_current_path}".
于 2014-01-24T09:14:47.430 回答
7

我不确定如何在 bash 中执行此操作,但在 zsh 中,有一个钩子会在每个命令之前运行。在您的 .zshrc 中:

precmd () {
    tmux set -qg status-left "#S #P $(pwd)"
}

这将在tmux您每次运行命令时运行该命令。希望这可以帮助。由于bash没有precmd,我不知道该怎么做。

于 2013-05-20T22:40:22.037 回答
3

不幸的是,建议的解决方案不适用于版本 1.7 - OpenSuse 12.3 的“官方版本”,但我设法找到了解决方案:
/etc/tmux.conf

setw -g window-status-current-format "#T(#I:#W#F)"  
setw -g window-status-format "#T(#I:#W#F)"  

这里#T - 告诉显示当前窗格标题,可以使用一些转义序列设置。为了在每个 shell 命令中执行此操作,请在以下位置放置.bashrc

[[ -n "$TMUX" ]] && PROMPT_COMMAND='echo -n -e "\e]2;${PWD/${HOME}/~}\e\\"'  

这适用于我在 OpenSuse 12.3、tmux 1.7、bash 4.2.53 上。

于 2015-09-06T18:15:05.430 回答