Todd Freed hat recht, der "richtige" Weg, dies zu tun, ist die Verwendung \;
. Art von. Aber es gibt einen Haken.
Sie fügen eine Folge von tmux-Befehlen zusammen, indem Sie tmux die Konjunktion geben ;
. In einer Datei, die von tmux stammt, könnte man also sagen
new-session "monitor1" ; split-window -v "monitor2"
wenn Sie das aus irgendeinem Grund alles in einer Zeile haben wollten. Jetzt können Sie diese einzeilige zusammengesetzte Anweisung auch tmux
von einer Shell an den Befehl übergeben, aber das ;
muss maskiert werden, damit die Shell es als ein weiteres Argument für interpretiert tmux
. Somit ist das Äquivalent des Obigen aus der Schale
$ tmux new-session "monitor1" \; split-window -v "monitor2"
In ähnlicher Weise benötigt der bind-key
Befehl tmux eine Reihe von Argumenten, bei denen es sich um den Befehl tmux handelt, und Argumente, die ausgeführt werden, wenn die Taste gedrückt wird. Wenn Sie sich C-q
aus einer von tmux bereitgestellten Datei an die obige Sequenz binden möchten, würden Sie sagen
bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"
Hier haben wir das Kommando ;
von tmux umgangen , so dass tmux es nicht als Ende des bind-key
Befehls interpretiert , sondern als weiteres Argument, bind-key
um es zu veranlassen, einen zusammengesetzten Befehl als gebundenen Wert des C-q
Schlüssels zu bilden.
Was passiert also, wenn wir tmux dazu bringen wollen, das von der Shell aus zu tun? Eine ganze Menge zu entkommen.
$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"
Zuerst müssen wir das \
und das ;
jeweils aus der Shell entfernen , wodurch die Shell die beiden Zeichen \;
als Argument an übergibt tmux
. Dies entgeht dann dem ;
Befehl tmux, wodurch die gesamte zusammengesetzte Anweisung als Bindung von zugewiesen wird C-q
.
Nun, wenn Sie ein komplexes tmux-Setup wie dieses wiederholt verwenden, würde ich vorschlagen, dass Sie eine tmux-Datei erstellen, um diese zu speichern:
# In split-windows.tmux:
new-session "monitor1"
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
# ...etc...
Und dann:
$ tmux source split-windows.tmux # (or even make an alias for this)
Es wird viel einfacher sein, so zu bleiben.
\;
:$ tmux bind-key -n C-q new-session "monitor1" '\;' split-window -v "monitor2"
Die eigentliche Antwort lautet also: Sie verketten Befehle mit einem Backslash, gefolgt von einem Semikolon.
Du würdest das in deine tmux.conf schreiben oder von der tmux ":" Eingabeaufforderung ausführen
quelle
Sie können dies mit einer kleinen Problemumgehung tun. Ähnlich wie bei der Antwort, in der vorgeschlagen wird, ein Skript auszuführen (das Ihren Fall gut behandelt), kann dies im Allgemeinen durch Verwenden von "run-shell" und Aufrufen von tmux selbst als Shell-Befehl erfolgen.
Dieser Befehl sendet 'xyz'-Schlüssel, den Befehl tmux' clear-history 'und ruft dann die integrierte' clear'-Shell auf.
Die gesamte Zeichenfolge ist nur eine Befehlsfolge mit mehreren Shell-Befehlen.
quelle
Sie können den Tastenkombinationen Ihrer
.tmux.conf
Datei so etwas hinzufügen :Und in können
tmux-new-session.sh
Sie haben:quelle
Alles, was hier gezeigt wird, wird nicht funktionieren, weil das so ist
Führt den Befehl2 sofort aus und q ist nur an die Sendetasten "Befehl1" gebunden.
Hier ist die Lösung:
In der Datei ~ / .tmux / reload.tmux sind mehrere Befehle abzulegen:
quelle