Eu gosto de chamar :clear-history
painéis com uma enorme rolagem. No entanto, quero criar um script para enviar este comando a todos os painéis nas várias janelas.
Sei como enviar um comando para todas as janelas, cortesia desta pergunta , mas como envio um comando para todos os painéis de que janela também?
send-keys
e synchronize-panes
da página de manual do tmux vêm à mente, mas não tenho certeza de como casar com eles. Mas talvez haja uma maneira mais simples de fazer isso.
Observações extras:
Pensando um pouco sobre isso, tmux list-panes -a
parece listar todos os painéis na sessão atual. Muito útil para começar. Para onde eu vou daqui?
Respostas:
Você já tentou seguir na janela tmux com vários painéis
fonte
Ctrl-b :setw synchronize-panes off
~/.tmux.conf
adicionando:bind -n C-x setw synchronize-panes on
ebind -n M-x setw synchronize-panes off
on/off
. Entãobind -n C-x setw synchronize-panes
bind -n C-x setw synchronize-panes
qual atalho devo pressionar para chamar? É o prefixo + C & x. Eu tentei muitas opçõesUm pouco atrasado para a festa, mas eu não queria definir e desabilitar painéis de sincronização apenas para enviar um comando, então criei uma função de wrapper em torno do tmux e adicionei uma função personalizada chamada
send-keys-all-panes
.Também crio um wrapper em torno do comando tmux para simplificar a chamada dessa função (por conveniência). O wrapper e o código acima estão todos aqui .
Isso me permite executar
tmux send-keys-all-panes <command>
outmux skap <command
enviar<command>
para todos os painéis.Observe que o tmux é um alias à minha função de wrapper tmux_pp.
fonte
prefix + :
<prefix>:
?: run "yourscript.sh yourargs..."
); se o seu comando tiver saído, o painel ativo ou especificado exibirá os resultados até você pressionar q, mas, nesse caso, não deve. Claro que você pode alternar / vincular isso ao seu gosto. Como um aparte, os processos internos podem interpretar as teclas digitadas ou seus efeitos de maneira diferente; portanto, uma lista de permissões ou uma lista negra#{pane_current_cmd}
podem ser necessárias. Eu tenho ctrl + k obrigado a enviar ctrl + le limpar histórico; isso funciona bem para conchas, mas derruba o buffer do Vim. Eu precisaria de aperfeiçoamento antes de poder transmitir meu ctrl + k.<prefix>:
antes de cada comando, perdendo a saída após sair do comando e todas as armadilhas que vem com a execução através do Tmux. Por exemplo,<prefix>:run "man cat"
não resulta em homem aparecendo em , nempidof man
mesmops auxf | grep man
como 'menos', meu pager atual para homem.Atualização junho 2019
Ilustração rápida sobre como configurar sua própria ligação para painéis de sincronização .
Adicionado o seguinte no meu
tmux.conf
(os comentários certamente se aplicam à minha configuração geral):Agora, posso alternar a capacidade de sincronizar comandos em vários painéis com
<C-a><C-y>
.(Sim, remapeei a tecla de ligação para Ctrl a).
fonte
Nenhuma das respostas acima funcionou para mim (tmux v2.3), mas isso aconteceu na linha de comando do bash:
Um script mais generalizado, para comandos tmux que não sejam 'clear-history', substituiria esse elemento apenas por um parâmetro, por exemplo. $ 1. Tenha cuidado se você pretende escrever um script para lidar com uma série de comandos tmux, pois "-t $ {_pane}" precisará ser aplicado a cada um.
Observe que o
-a
parâmetro paratmux list-panes
é necessário para cobrir todos os painéis em todas as janelas em todas as sessões. Sem isso, apenas os painéis na janela atual do tmux serão afetados. Se você tiver mais de uma sessão do tmux aberta e quiser aplicar o comando apenas aos painéis da sessão atual, substitua-a
por-s
(Está tudo na página de manual do tmux).Eu não tenho os pontos de modificação para comentar diretamente em cada uma das respostas acima, então aqui está o porquê eles não estavam trabalhando para mim:
O problema que tive com a resposta do @ shailesh-garg foi que a sincronização afetava apenas os comandos emitidos dentro dos painéis, não os comandos tmux emitidos usando os
Ctrl-B :
que estão fora dos painéis.Os três problemas que tive com a resposta de @kshenoy foram:
fonte
minha versão do tmux é 1.9a, e isso funciona para mim, uma chave é suficiente para ligar e desligar
fonte
Substitua o "id da sessão" e o "comando" de acordo.
fonte
:D
cara, você precisa adicionar alguma descrição à sua resposta, pois ela possui um texto muito mínimo e, por esse motivo, o Stackoverflow a detecta como spam ou postagem de baixa qualidade, basta adicionar alguns detalhes para que ela não apareça embaixo dela.Esta é a minha função utilitária para fazê-lo, apenas executando o comando quando não houver nada em execução no painel.
Exemplo direcionado a uma sessão chamada dev, ativando um python virtualenv em todos os painéis que estão dentro
bash
ouzsh
evitando a execução do comando em painéis com vim ou qualquer outro executável:ou mais fácil de lembrar: fazê-lo na sessão atual:
Encontre meu arquivo de configuração com esta função.
fonte