![如何将热键发送到嵌套 tmux 会话](https://linux22.com/image/206667/%E5%A6%82%E4%BD%95%E5%B0%86%E7%83%AD%E9%94%AE%E5%8F%91%E9%80%81%E5%88%B0%E5%B5%8C%E5%A5%97%20tmux%20%E4%BC%9A%E8%AF%9D.png)
我的本地和远程计算机上都有这样的 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 构建允许您在内部会话的窗格中移动并在到达边界时透明地“跳出”到外部会话的逻辑将非常困难(再次强调:如果可能的话,以一种稳健的方式)。