如何在shell中获取当前tmux窗口号?

如何在shell中获取当前tmux窗口号?

为了节省一行显示空间,我想隐藏底部状态栏并将当前 tmux 窗口号放在我的 shell 提示符中,以便更容易知道我在哪里。

GNU screen 有一个环境变量WINDOW,但似乎 tmux 没有这样的变量,那么有什么方法可以获取 shell 中的当前窗口号?

我尝试过TMUX_PANE,但它不断增加,例如,当您关闭一个窗口(或窗格)并打开一个新窗口时。我检查是否存在TMUX_PANE以检测 shell 是否在 tmux 窗口中运行。

答案1

tmux 的术语中没有“窗口号”。有“窗口索引”和唯一的“窗口ID”。默认状态行显示每个窗口的前者,所以我认为您的意思是“window_index”。

tmux display-message -p -F '#{window_index}'

有关窗口索引的信息是从活动窗格中获取的,因此如果您只需在活动窗格中键入上述命令就足够了。一般来说,您可能需要一个可以在任何窗格中工作并确定针对其自己的窗格的类似命令:

tmux display-message -p -F '#{window_index}' -t "$TMUX_PANE"

display-message已记录这里#{variables}显示了您可以使用的其他内容这里

例子PS1

PS1="\$(tmux display-message -p -F '#{window_index}' -t \"\$TMUX_PANE\") \u@\h:\w$ "

笔记:

  • 如果您将窗格移动到另一个窗口(例如使用tmux swap-pane …),已打印的提示将不会更新,旧的窗口索引将在那里,这可能会误导您。打印提示移动窗格将显示新的窗口索引。

    您的 shell 可能支持也可能不支持更新当前提示符的机制(例如zsh)。更新所有旧提示(屏幕上仍然可见以及窗格历史记录中的提示)将非常棘手,我不希望存在任何简单的解决方案。

  • 反斜杠 in\$(tmux …)可以防止$(…)在赋值时PS1被求值。每次要打印提示时都会对其进行单独评估。如果没有反斜杠,PS1将包含在赋值期间获得的窗口索引。然后,如果您将窗格移动到另一个窗口,即使是新打印的提示也会显示旧的窗口索引。

相关内容