Ich rufe gerne :clear-history
Fenster mit einem riesigen Scrollback auf. Ich möchte jedoch ein Skript erstellen, um diesen Befehl an alle Bereiche in den verschiedenen Fenstern zu senden.
Ich weiß, wie ich dank dieser Frage einen Befehl an alle Fenster senden kann, aber wie kann ich einen Befehl auch an alle Fenster in welchem Fenster senden?
send-keys
und synchronize-panes
von der tmux manpage kommen mir in den Sinn, aber ich bin mir nicht sicher, wie ich sie zusammen heiraten soll. Aber vielleicht gibt es einen einfacheren Weg, dies zu tun.
Zusätzliche Beobachtungen:
Wenn Sie ein wenig darüber nachdenken, werden tmux list-panes -a
anscheinend alle Bereiche der aktuellen Sitzung aufgelistet. Ziemlich nützlich, um damit zu beginnen. Wohin gehe ich von hier aus?
Antworten:
Haben Sie versucht, im tmux-Fenster mit mehreren Fenstern zu folgen?
quelle
Ctrl-b :setw synchronize-panes off
~/.tmux.conf
indem Sie hinzufügen:bind -n C-x setw synchronize-panes on
undbind -n M-x setw synchronize-panes off
on/off
. Sobind -n C-x setw synchronize-panes
bind -n C-x setw synchronize-panes
welche Verknüpfung hinzufüge , sollte ich drücken, um sie aufzurufen? Ist es Präfix + C & x. Ich habe viele Optionen ausprobiertEin bisschen spät zur Party, aber ich wollte keine Synchronisierungsfenster setzen und deaktivieren, nur um einen Befehl zu senden, also habe ich eine Wrapper-Funktion um tmux erstellt und eine benutzerdefinierte Funktion namens hinzugefügt
send-keys-all-panes
.Ich erstelle auch einen Wrapper um den Befehl tmux, um das Aufrufen dieser Funktion zu vereinfachen (der Einfachheit halber). Der Wrapper und der obige Code sind alle hier .
Dadurch kann ich alle Fenster ausführen
tmux send-keys-all-panes <command>
odertmux skap <command
an sie senden<command>
.Beachten Sie, dass tmux auf meine Wrapper-Funktion tmux_pp ausgerichtet ist.
quelle
prefix + :
<prefix>:
?: run "yourscript.sh yourargs..."
) aufzurufen . Wenn Ihr Befehl ausgegeben wurde, zeigt Ihr aktiver oder angegebener Bereich die Ergebnisse an, bis Sie q drücken. In diesem Fall sollte dies jedoch nicht der Fall sein. Natürlich können Sie dies alias / nach Ihren Wünschen binden. Abgesehen davon können innere Prozesse Ihre Tastenanschläge oder deren Auswirkungen unterschiedlich interpretieren, sodass#{pane_current_cmd}
möglicherweise eine Whitelist oder eine Blacklist erforderlich ist. Ich habe Strg + K gebunden, um Strg + L und Clear-History zu senden; Dies funktioniert gut für Muscheln, verstopft aber Vims Puffer. Ich müsste verfeinert werden, bevor ich meine Strg + k senden kann.<prefix>:
vor jedem Befehl zu senden , die Ausgabe nach dem Verlassen des Befehls zu verlieren und alle Fallstricke, die dies sind kommen mit der Ausführung über Tmux. Zum Beispiel führt<prefix>:run "man cat"
dies nicht dazu, dass der Mensch inpidof man
oder sogarps auxf | grep man
als "weniger" in meinem aktuellen Pager für den Menschen erscheint.Update Juni 2019
Kurze Darstellung, wie Sie Ihre eigene Bindung für die Synchronisierung von Fenstern konfigurieren .
Folgendes wurde zu meinem hinzugefügt
tmux.conf
(die Kommentare gelten sicherlich für meine Gesamtkonfiguration):Jetzt kann ich die Möglichkeit zum Synchronisieren von Befehlen über mehrere Bereiche hinweg umschalten
<C-a><C-y>
.(Ja, ich habe den Bindeschlüssel erneut Strg a zugeordnet.)
quelle
Keine der oben genannten Antworten hat bei mir funktioniert (tmux v2.3), aber dies geschah über die Bash-Befehlszeile:
Ein allgemeineres Skript für andere tmux-Befehle als 'clear-history' würde dieses Element nur durch einen Parameter ersetzen, z. $ 1. Seien Sie vorsichtig, wenn Sie beabsichtigen, ein Skript für eine Reihe von tmux-Befehlen zu schreiben, da auf jedes "-t $ {_ pane}" angewendet werden muss.
Beachten Sie, dass der
-a
Parameter totmux list-panes
erforderlich ist, um alle Bereiche in allen Fenstern in allen Sitzungen abzudecken. Ohne dies sind nur Fenster in Ihrem aktuellen tmux-Fenster betroffen. Wenn Sie mehr als eine tmux Sitzung geöffnet haben und wollen nur den Befehl Scheiben in der aktuellen Sitzung anwenden, ersetzen-a
mit-s
(Es ist alles in der tmux Manpage).Ich habe nicht die Mod-Punkte, um jede der oben genannten Antworten direkt zu kommentieren. Deshalb haben sie hier nicht für mich funktioniert:
Das Problem, das ich mit der Antwort von @ shailesh-garg hatte, war, dass die Synchronisierung nur Befehle betraf, die innerhalb der Fenster ausgegeben wurden, nicht tmux-Befehle, die mit
Ctrl-B :
außerhalb der Fenster ausgegeben wurden .Die drei Probleme, die ich mit @kshenoys Antwort hatte, waren folgende:
quelle
meine tmux version ist 1.9a und das funktioniert bei mir, ein schlüssel reicht sowohl zum ein- als auch zum aus
quelle
Ersetzen Sie die "Sitzungs-ID" und den "Befehl" entsprechend.
quelle
:D
Alter, Sie müssen Ihrer Antwort eine Beschreibung hinzufügen, da sie nur sehr wenig Text enthält. Aus diesem Grund erkennt Stackoverflow sie als Spam oder Post von geringer Qualität. Fügen Sie einfach einige Details hinzu, damit sie nicht darunter angezeigt werden.Dies ist meine Dienstprogrammfunktion, die den Befehl nur ausführt, wenn im Bereich nichts ausgeführt wird.
Beispiel für eine Sitzung mit dem Namen dev, bei der eine Python-Virtualenv in allen Bereichen aktiviert wird, die sich in befinden,
bash
oderzsh
die Ausführung des Befehls in Bereichen mit vim oder einer anderen ausführbaren Datei vermieden wird:oder leichter zu merken: um es in der aktuellen Sitzung zu tun:
Finden Sie meine Konfigurationsdatei mit dieser Funktion.
quelle