我正在尝试将tmux设置为这样工作:
因此每个内部会话都直接嵌套在外部会话中。
如果我像这样设置.tmux.conf
:
unbind C-b
set -g prefix C-a
bind-key -n C-b send-prefix
本地内部会话正确接收C-b
前缀,但远程内部会话不会。
如果我将tmux.conf
更改为:
unbind C-b
set -g prefix C-a
然后远程内部会话接收C-b
,但本地会话不接收。{/ p>
有没有办法配置tmux,以便本地和远程嵌套会话都能收到C-b
前缀?
答案 0 :(得分:0)
tmux手册说,如果我读得正确,1)前缀是服务器级设置,2)所有会话都由单个服务器管理。这意味着你不能在具有不同前缀的同一主机上获得外部和内部会话,除非你使用相应的选项作为非默认套接字启动多个服务器而另一个配置用于第二个服务器。
或者,使用GNU屏幕而不是tmux更容易。它允许在命令行中使用前缀规范,并以更简单的方式限制服务器数量。
UPDATE [2017-07-05]:现代tmux有足够的每会话配置,包括切换前缀,尽管有点麻烦。
答案 1 :(得分:0)
受到this blog post启发的Tmux脚本,我找到了一个解决方案。我把它放在我的localhost上的shell启动脚本(例如.bashrc)中:
tmux_outer() {
SESSION=$1
tmux -2 new-session -d -s $SESSION
tmux set prefix C-a
tmux -2 attach-session -t $SESSION
}
tmux_inner() {
SESSION=$1
env TMUX='' tmux -2 new-session -s $SESSION
}
并删除了我的.tmux.conf
我原来的.tmux.conf中的问题:
unbind C-b
set -g prefix C-a
bind-key -n C-b send-prefix
似乎是set -g prefix C-a
,它将前缀全局设置为C-a
。在我的shell函数中,我创建了一个处于分离状态的外部会话,仅为该会话将前缀设置为C-a
,然后附加到该会话。
当我在localhost或远程主机上启动内部会话时,它具有默认的tmux前缀C-b
。由于外部会话没有尝试捕获和发送C-b
,因此两个内部会话都会收到C-b
,没有任何问题。