J'aime appeler des :clear-history
volets avec un énorme défilement. Cependant, je souhaite créer un script pour envoyer cette commande à tous les volets des différentes fenêtres.
Je sais comment envoyer une commande à toutes les fenêtres, grâce à cette question , mais comment envoyer une commande à tous les volets de quelle fenêtre également?
send-keys
et synchronize-panes
de la page de manuel tmux viennent à l'esprit, mais je ne sais pas comment les marier ensemble. Mais il existe peut-être un moyen plus simple de le faire.
Observations supplémentaires:
En y réfléchissant un peu, tmux list-panes -a
semble répertorier tous les volets de la session en cours. Assez utile pour commencer. Où est-ce que je vais d'ici?
Réponses:
Avez-vous essayé de suivre dans la fenêtre tmux avec plusieurs volets
la source
Ctrl-b :setw synchronize-panes off
~/.tmux.conf
en ajoutant:bind -n C-x setw synchronize-panes on
etbind -n M-x setw synchronize-panes off
on/off
. Sobind -n C-x setw synchronize-panes
bind -n C-x setw synchronize-panes
quel raccourci dois-je appuyer pour appeler? Est-ce le préfixe + C & x. J'ai essayé beaucoup d'optionsUn peu tard à la fête, mais je ne voulais pas définir et désactiver les panneaux de synchronisation juste pour envoyer une commande, j'ai donc créé une fonction wrapper autour de tmux et ajouté une fonction personnalisée appelée
send-keys-all-panes
.Je crée également un wrapper autour de la commande tmux pour simplifier l'appel de cette fonction (pour plus de commodité). Le wrapper et le code ci-dessus sont tous ici .
Cela me permet d'exécuter
tmux send-keys-all-panes <command>
outmux skap <command
d'envoyer<command>
à tous les volets.Notez que tmux a un alias de ma fonction wrapper tmux_pp.
la source
prefix + :
<prefix>:
?: run "yourscript.sh yourargs..."
); si votre commande a généré, votre volet actif ou spécifié affichera les résultats jusqu'à ce que vous appuyiez sur q, mais dans ce cas, il ne devrait pas. Bien sûr, vous pouvez alias / lier ceci à votre guise. En passant, les processus internes peuvent interpréter vos frappes ou leurs effets différemment, de sorte qu'une liste blanche ou une liste noire#{pane_current_cmd}
peut être nécessaire. J'ai ctrl + k lié pour envoyer ctrl + l et effacer l'historique; cela fonctionne bien pour les shells, mais écrase le tampon de Vim. J'aurais besoin de raffinement avant de pouvoir diffuser mon ctrl + k.<prefix>:
avant chaque commande, de perdre la sortie après avoir quitté la commande, et tous les pièges qui viennent avec l'exécution via Tmux. Par exemple,<prefix>:run "man cat"
ne fait pas apparaître l'homme danspidof man
ou mêmeps auxf | grep man
, ni comme «moins», mon téléavertisseur actuel pour l'homme.Mise à jour juin 2019
Illustration rapide de la configuration de votre propre liaison pour la synchronisation des volets .
Ajout de ce qui suit dans mon
tmux.conf
(les commentaires s'appliquent certainement à ma configuration globale):Maintenant, je peux basculer la possibilité de synchroniser les commandes sur plusieurs volets avec
<C-a><C-y>
.(Oui, j'ai remappé la touche de liaison sur Ctrl a).
la source
Aucune des réponses ci-dessus n'a fonctionné pour moi (tmux v2.3), mais cela a fonctionné à partir de la ligne de commande bash:
Un script plus généralisé, pour les commandes tmux autres que 'clear-history', remplacerait simplement cet élément par un paramètre, par exemple. 1 $. Faites attention si vous avez l'intention d'écrire un script pour gérer une série de commandes tmux, car "-t $ {_ pane}" devra être appliqué à chacune.
Notez que le
-a
paramètre totmux list-panes
est requis pour couvrir tous les volets de toutes les fenêtres de toutes les sessions. Sans cela, seuls les volets de votre fenêtre tmux actuelle seront affectés. Si vous avez plusieurs sessions tmux ouvertes et que vous souhaitez uniquement appliquer la commande aux volets de la session en cours, remplacez-a
par-s
(Tout est dans la page de manuel tmux).Je n'ai pas les points de mod pour commenter directement chacune des réponses ci-dessus, alors voici pourquoi ils ne fonctionnaient pas pour moi:
Le problème que j'ai eu avec la réponse de @ shailesh-garg était que la synchronisation n'affectait que les commandes émises dans les volets, pas les commandes tmux émises en utilisant
Ctrl-B :
qui sont en dehors des volets.Les trois problèmes que j'ai rencontrés avec la réponse de @kshenoy étaient les suivants:
la source
ma version tmux est 1.9a, et cela fonctionne pour moi, une touche suffit pour activer et désactiver
la source
Remplacez «session id» et «command» en conséquence.
la source
:D
mec, vous devez ajouter une description à votre réponse car elle contient très peu de texte et pour cette raison, Stackoverflow le détecte comme un spam ou un message de mauvaise qualité, ajoutez simplement des détails pour qu'il n'apparaisse pas en dessous.C'est ma fonction utilitaire pour le faire, n'exécutant la commande que lorsqu'il n'y a rien en cours d'exécution dans le volet.
Exemple ciblant une session appelée dev, activant un virtualenv python dans tous les volets qui se trouvent dans
bash
ouzsh
, évitant d'exécuter la commande dans les volets avec vim ou tout autre exécutable:ou plus facile à retenir: pour le faire dans la session en cours:
Trouvez mon fichier de configuration avec cette fonction.
la source