如何将热键发送到嵌套 tmux 会话

如何将热键发送到嵌套 tmux 会话

我的本地和远程计算机上都有这样的 tmux 配置。

is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"'

bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"

我正在尝试移至远程会话中的另一个窗格,但它不会发送到嵌套会话。如何发送 caps lock + h 来干净地在所有窗格之间切换?

答案1

我假设您ssh从本地窗格运行,然后tmux在远程端运行。

一个简单的解决方案是添加ssh到正则表达式。缺点是无论远程端send-keys C-h是否有,都可以工作。检查远程端tmux是否存在并非易事(如果可能的话,以可靠的方式进行)。tmux

此外,您可能还想要tmux;这将涵盖本地嵌套的 tmux 会话。

您修改的代码:

is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)(g?(view|n?vim?)(diff)?|ssh|tmux)$"'
bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"

请注意select-pane -L,内部会话中不知道外部会话的窗格。它只会选择内部会话的窗格。 IMO 构建允许您在内部会话的窗格中移动并在到达边界时透明地“跳出”到外部会话的逻辑将非常困难(再次强调:如果可能的话,以一种稳健的方式)。

相关内容