O tmux se comporta de maneira diferente entre as linhas de comando e o arquivo de configuração equivalente (.tmux.conf)
linha de comando:
bash$ tmux new \; split-window -h \;
arquivo de configuração (.tmux.conf), (e então, na linha de comando, apenas digitamos 'tmux')
new
split-window -h
A versão da linha de comando mostra uma janela dividida na inicialização e cria apenas uma sessão. No entanto, a versão do arquivo de configuração se comporta de maneira diferente:
- Ele cria 2 sessões, com nomes de sessão "0" e "1", em vez de apenas uma sessão.
- A sessão "0" possui janelas divididas, idênticas ao que vi na versão de linha de comando.
- A sessão "1" possui uma única janela completa.
- Para na sessão "1".
Assim, na versão do arquivo de configuração, finalmente chego à sessão “1” na tela. Se eu fizer uma 'saída' e anexar a sessão 0, ela irá para a sessão "0" com os mesmos resultados da versão da linha de comando.
Se, alternativamente, o arquivo de configuração contiver apenas a linha dividida:
split-window -h
então, quando 'tmux' é digitado, ele mostra uma mensagem de erro na inicialização:
.tmux.conf:1: no current target
E não há janelas divididas (já que o comando da janela dividida falha: como podemos ver, ele reclama que a 1ª linha da configuração não tem nenhum alvo atual).
Aparentemente, a versão da linha de comando é o que eu quero/preciso.
O que há de errado com a versão do arquivo de configuração?
A diferença está no
tmux
comando que você digita manualmente após a edição.tmux.conf
.Muitos problemas com o tmux se tornam mais compreensíveis quando você percebe e lembra que o servidor tmux e cada cliente tmux são processos separados. Em algumas circunstâncias, um cliente inicia um servidor.
.tmux.conf
é para o servidor, não para clientes.tmux
sem argumentos se comporta comotmux new-session
akatmux new
. Ele inicia um servidor tmux, se necessário. Quando um servidor tmux é iniciado, ele analisa.tmux.conf
antes de lidar com solicitações de clientes tmux.Portanto, se ainda não houver nenhum servidor em execução, seu único
tmux
cria um servidor tmux e executa:Seu cliente acaba anexado à sessão criada com last
new-session
, aquela que ele solicitou implicitamente.Se você quiser que seu cliente se conecte a uma sessão já criada, use
tmux attach-session
akatmux attach
outmux a
. Observe que caso ainda não exista um servidor tmux,attach-session
tentará criá-lo e a sessão que você.tmux.conf
criará contará como "já criada" quando a solicitação do cliente for finalmente atendida. Isso é mencionado na documentação :Em
.tmux.conf
questão, você precisatmux a
(não apenastmux
) anexar à sessão criada a partir do arquivo. Observe que se o servidor tmux já existir, ele não será analisado.tmux.conf
novamente, vocêtmux a
tentará se conectar a alguma sessão existente (se houver).Alguns usuários (inclusive eu) preferem voltar para uma sessão existente, então usam
tmux new-session -A
outmux a || tmux
em seus shells. Esses comandos funcionam bem com o seu arquivo.tmux.conf
.Se você deseja
split-window -h
executar qualquer sessão recém-criada, um gancho como este é o caminho:(é um comando tmux, de um shell será
tmux set-hook …
).