tmux 在命令行和等效配置文件 (.tmux.conf) 之间的行为不同
命令行:
bash$ tmux new \; split-window -h \;
配置文件(.tmux.conf),(然后,在命令行中,我们只需键入“tmux”)
new
split-window -h
命令行版本在启动时很好地向我显示了一个分割窗口,并且它只创建一个会话。但是,配置文件版本的行为有所不同:
- 它创建 2 个会话,会话名称为“0”和“1”,而不仅仅是一个会话。
- 会话“0”具有分割窗口,与我在命令行版本中看到的相同。
- 会话“1”有一个完整窗口。
- 它在会话“1”处停止。
因此,在配置文件版本中,我终于在屏幕上到达会话“1”。如果我执行“退出”,然后附加会话 0,那么它会转到会话“0”,其结果与命令行版本相同。
或者,如果配置文件仅包含分割行:
split-window -h
然后当输入“tmux”时,它会在启动时显示一条错误消息:
.tmux.conf:1: no current target
并且没有分割窗口(因为分割窗口命令失败:正如我们所看到的,它抱怨配置的第一行没有当前目标。)
显然,命令行版本是我想要/需要的。
配置文件版本有什么问题?
区别在于
tmux
编辑后手动输入的命令.tmux.conf
。当您意识到并记住 tmux 服务器和每个 tmux 客户端是单独的进程时,tmux 的许多问题就会变得更容易理解。在某些情况下,客户端启动服务器。
.tmux.conf
适用于服务器,不适用于客户端。tmux
没有参数的行为就像tmux new-session
akatmux new
。如果需要,它会启动一个 tmux 服务器。当 tmux 服务器启动时,它会.tmux.conf
在处理来自 tmux 客户端的请求之前进行解析。因此,如果没有正在运行的服务器,您将
tmux
创建一个 tmux 服务器并执行:您的客户端最终会附加到使用最后一个创建的会话
new-session
,即它隐式请求的会话。如果您希望客户端附加到已创建的会话,请使用
tmux attach-session
akatmux attach
或tmux a
。请注意,如果还没有 tmux 服务器,attach-session
将尝试创建它,并且当最终处理来自客户端的请求时,您将创建的会话.tmux.conf
将被视为“已创建”。文档中提到了这一点:对于
.tmux.conf
有问题的情况,您需要tmux a
(不仅仅是tmux
)附加到从文件中创建的会话。请注意,如果 tmux 服务器已经存在,它将不会.tmux.conf
再次解析,您tmux a
将尝试附加到某些现有会话(如果有)。一些用户(包括我)更喜欢返回到现有会话,因此他们在 shell 中使用
tmux new-session -A
或。tmux a || tmux
这些命令与您的.tmux.conf
.如果您想
split-window -h
运行任何新创建的会话,那么可以使用这样的挂钩:(这是一个 tmux 命令,来自 shell
tmux set-hook …
)。