如何在嵌套的tmux中滚动?

5

有时候,我需要使用嵌套的tmux会话(即在tmux中再次使用tmux)。在内部tmux会话中,复制模式下的滚动不起作用,因此在内部会话中非常不方便。

我听说有一种元键可以将tmux命令发送到内部会话。是否有任何有效的键绑定可用于在内部会话中滚动?


1
https://unix.stackexchange.com/questions/130730/how-to-quickly-send-commands-to-nested-tmux-sessions 可能会有所帮助。 - ozkanpakdil
2个回答

1

tmux copy-mode可以实现这个功能。运行该命令将在内部会话中切换到复制模式,您可以像平常一样滚动。

另一个选项是使用bindsend-prefix,将某些键绑定到send-prefix操作,该操作将前缀发送到嵌套会话。在我的情况下,它是:

set -g prefix C-a
bind a send-prefix

默认前缀是C-b,在这种情况下使用b可能更合理。
因此,您只需按Control+A(或B或其他键),然后松开Control并再次按相同的键(在我的情况下为A,在使用默认C-b前缀的人中似乎B更好,个人认为)。这会将前缀发送到内部会话。现在,您按下任何键都会触发内部会话中的命令。例如:[Control+A]然后[%]会在我的电脑上垂直拆分窗口。当然,这是在外部会话中。然后,使用我提到的send-prefix绑定,我可以执行[Control+A],然后[A],然后[%],它会在内部会话中拆分窗口。
这非常方便,可以在连接到服务器时用于滚动内容、搜索等操作,一旦您习惯了它,它几乎就成为肌肉记忆了。此外,您可以执行[Ctrl+A],然后[A],然后[D]来分离内部会话,这将允许您退出ssh连接或完全结束SSH连接(如果您有一个自动启动tmux的配置)。
当然,您还可以将send-prefix绑定到其他键,可能使用-n,这样您就可以将[Ctrl+A]作为前缀,将[Ctrl+S]用于将前缀发送到内部会话。

在内部会话中运行复制模式确实会将内部会话置于滚动模式,但使用鼠标滚动仍然会导致父级会话滚动。有什么诀窍吗? - eglasius

1
我也遇到了这个问题,但是我意识到我的本地tmux.conf使用的是vi的按键绑定来进行复制模式,而我的远程(嵌套)会话没有。你可以通过将以下内容添加到你的本地和远程tmux.conf来在两个会话中都使用vi的按键绑定。
# Use vim keybindings in copy mode
setw -g mode-keys vi

然后,要么执行prefix + prefix + [在嵌套会话中进入复制模式并使用vi键绑定来移动,要么可以将某个按键映射为将前缀发送到嵌套会话中,将以下内容放入您的本地tmux.conf文件中:
# Use Ctrl-a to send prefix to nested session
bind-key -n C-a send-prefix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接