Isso é o que está acontecendo:
-
tmux new 'tmux source-file ~/.tmux/dev'O comando
newcria uma nova sessão com uma única janela que possui um único painel. O comandotmux source-file ~/.tmux/devé executado nesse novo painel.- Então, você tem uma nova sessão
N(onde N é algum número), com - uma única janela
N:0(ou o que tiverbase-indexdefinido como), com - um único painel
N:0.0(ou o que você tiverbase-pane-indexdefinido como) - executando o comando
tmux source-file ~/.tmux/dev.
- Então, você tem uma nova sessão
-
O comando
source-fileé processado.- Os painéis extras são adicionados.
- O painel 0 está (re) selecionado.
- O comando
send-keys, em seguida, "tipos"vim .+ Digite no painel 0.
Esta entrada é ignorada porque este painel está apenas executando o cliente tmux que enviou o comandosource-file.
- O cliente tmux sai, fechando assim o painel 0.
Portanto, o bit inesperado é que o painel 0 (ou seja, N:0.0 ) está executando (apenas) o comando source-file , que ignora o comando "digitado". Esse painel nunca executa um shell interativo que possa interpretar o comando "digitado".
Existem pelo menos algumas maneiras de corrigir isso:
-
Inicie o
~/.tmux/devcomnew-windowpara que o painel 0 esteja executando o seu "comando padrão" (ou seja, provavelmente um shell interativo).Esse método tem a vantagem de não presumir que o painel atual está executando um shell interativo e também de não assumir que o painel atual é
0(ou seja, o que acontece se você executar sua série original de comandos em um painel que é parte de uma janela já dividida?). Isso significa que você pode vincular com segurançasource-file ~/.tmux/deva uma chave que possa ser executada em qualquer contexto (desde que crie uma nova janela para todos os seus painéis). No shell, você pode executartmux source-file ~/.tmux/dev(para criar uma nova janela na sessão atual) ou seutmux new 'tmux source-file ~/.tmux/dev'original para criar uma nova sessão.Uma pequena desvantagem desse método é que quando você executa
tmux new 'tmux source-file ~/.tmux/dev', a janela inicial ainda executará o cliente que enviasource-filee sai rapidamente. Isto significa que a sua "janela principal" (aquela com as divisões) será uma mais alta que a suabase-indexe uma futura nova janela será colocada antes da "janela principal". Você poderia consertar isso usando algo assim:tmux new 'tmux move-window -t 99 \; source-file ~/.tmux/dev'Ele move a janela inicial (efêmera) para um índice alto, de modo que
new-windowem~/.tmux/devacabe embase-index. -
Use (por exemplo)
tmux new 'tmux source-file ~/.tmux/dev ; zsh -l'para que o painel acabe executando um shell interativo após o término do comandosource-file.A parte feia disso é que você acaba “codificando” seu shell preferido nesse comando. Além disso, a entrada
send-keys(vim .+ Enter) é tecnicamente enviada antes do início do shell; provavelmente está tudo bem, mas nem sempre é completamente confiável.Você pode evitar "codificar" seu shell consultando tmux para o
default-command(ou, se não estiver definido,default-shell(ou, se não estiver definido, usando SHELL)) , mas isso pode ser mais trabalho do que você realmente quer fazer.