如何从 tmux 重置终端仿真器?

如何从 tmux 重置终端仿真器?

我想彻底“清除” tmux 窗格。当我执行类似以下操作时

bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter" 

建议 https://stackoverflow.com/questions/10543684/how-can-i-clear-scrollback-buffer-in-tmux,我能够清除回滚缓冲区并获得一个干净的屏幕。

但是当我按 Shift+PageUp 和 Shift+PageDown 时,我能够从终端仿真器本身(而不是 tmux)看到先前的输出。通常,您可以执行reset命令来清除终端仿真器的回滚历史记录。

是否可以reset通过 tmux 访问终端仿真器?同时清除上面的回滚?

建议的几种解决方法是:

1) 保留Urxvt.saveLines: 0或启动Urxvt -sl 0- 这是合乎逻辑的,因为如果您在 tmux 中,则不需要终端仿真器的回滚。

2)分离、重置并重新连接 tmux - 这看起来很麻烦。

答案1

您想要的是printf "\033c" > $client_tty$client_ttytmux 客户端正在运行的 TTY 在哪里。\033c是 ANSI 重置命令的转义序列。

您可以使用 列出所有连接的客户端及其 TTY tmux list-clients。使用 将其限制为特定会话-t $session_name,并使用 仅输出 TTY -F '#{client_tty}'。因此,要重置所有连接的 tmux 客户端,您需要类似以下操作:

for client_tty in $(tmux list-clients -F '#{client_tty}'); do
    printf "\033c" > $client_tty
done

您还需要tmux refresh在所有通过此方式重置的客户端上发出操作,以将 tmux 恢复到其正常状态。

相关内容