我怎样才能让所有的 tmux 面板都有自己独特的 shell 历史记录?

How can I make all tmux panes have their own unique shell history?

前言:我当前的 tmux 配置在多个 windows 多个会话中有多个窗格。

不断出现的问题是,当我在一个 window 中工作时,我所有的历史都很好,并且在 window 的窗格之间分开,当我交换 windows/sessions 时, 该历史记录最初也是分开的,但直到我在不同的 window/session.

中输入一个命令

一旦发生这种情况,所有窗格的所有历史记录都会合并在一起,有时无法找到某个窗格的实际最后一个命令,具体取决于我进入该窗格的时间。

有什么方法可以避免这种情况并让每个窗格都有自己的 shell 历史记录?

如果您使用 bash shell,您的命令历史将写入由 HISTFILE 变量定义的文件,默认为 ~/.bash_history。在 tmux 窗格中,您可以访问看起来像这样的变量 $TMUX_PANE

$ echo $TMUX_PANE
%3

您可以通过向 ~/.bashrc 文件中添加如下内容来创建每个窗格的历史记录:

if [[ $TMUX_PANE ]]; then
  HISTFILE=$HOME/.bash_history_tmux_${TMUX_PANE:1}
fi

这将存储窗格 2 的历史记录,例如 ~/.bash_history_tmux_2

这个想法的缺点是你最终会在你的主目录中得到一堆 .bash_history_tmux_* 文件。