Wie kann ich mit tmux eine Reihe von Fenstern öffnen, ohne sie manuell einzugeben?

43900
JUST MY correct OPINION

Ich möchte also eine projektspezifische tmuxSitzung erstellen, in der bestimmte Befehle in bestimmten Bereichen automatisch angezeigt werden. Nach einem Online-Tutorial und der tmuxManpage habe ich eine Konfigurationsdatei erstellt:

new -n estruct ls neww -n estruct2 ls splitw -v -p 50 -t 0 ls 

Das Ergebnis ist ... nichts. tmuxstartet mit einem einzigen Fenster und einem einzigen Fenster in diesem Fenster, ohne dass Befehle ausgeführt werden.

Wie gehe ich vor, um eine Konfigurationsdatei zu erstellen, die es mir tatsächlich erlaubt, eine Reihe von Fenstern und Fenstern zu erstellen, bei denen bestimmte Befehle vorab ausgeführt werden?

30

6 Antworten auf die Frage

36
Chris Johnsen

Ihre Konfigurationsdatei funktioniert, aber es gibt einige Komplikationen.

Kurzlebige Befehle

Zunächst werden die Befehle, die Sie starten (Instanzen von ls ), sehr schnell ausgeführt. Die Fenster und Fenster für die Befehle werden erstellt, verschwinden jedoch, sobald ein Befehl beendet wird.

Wenn Sie tatsächlich solche One-Shot-Befehle in Ihrer endgültigen Konfiguration verwenden möchten, sollten Sie wahrscheinlich die Fensteroption remain-on-exit(und möglicherweise die Sitzungsoption verwenden set-remain-on-exit, um einen Standard für alle in der Sitzung erstellten Fenster anzugeben). Wenn remain-on-exitein Fenster eingestellt ist, verschwindet es nicht, wenn der Befehl beendet wird. Wahrscheinlich möchten Sie das respawn-windoweinem Key zuordnen (Hinweis: respawn-windowRespawn des ursprünglichen Befehls; respawn-paneist auch in tmux 1.5 verfügbar, um einzelne Bereiche zu respawn ).

bind-key R respawn-window  # set global r-o-e so that initial window of initial session gets it set -g set-remain-on-exit on  # create a session and its windows/panes new -n estruct ls neww -n estruct2 ls splitw -v -p 50 -t 0 ls  # restore global r-o-e set -g set-remain-on-exit off  # let session r-o-e inherit from global value for future windows set -u set-remain-on-exit 

Wenn Sie nichts dagegen haben, dass Ihr Anfangsfenster Nummer 1 anstelle von Nummer 0 ist, können Sie den globalen Wert nicht ändern:

bind-key R respawn-window  # create a session with a throw-away window new true  # for future windows, stay open after the command exits set set-remain-on-exit on  # create the windows we really want neww -n estruct ls neww -n estruct2 ls splitw -v -p 50 -t 0 ls  # for future windows, revert r-o-e to global value set -u set-remain-on-exit 

Wenn Sie nur lseinen vereinfachten Platzhalterbefehl verwendet haben und tatsächlich einen interaktiven Befehl in Ihren Fenstern / Fenstern erzeugen möchten, sollten Sie wahrscheinlich nur den Befehl erzeugen, den Sie ausführen möchten. Wenn der gewünschte Befehl zu lange dauert es bis zur Inbetriebnahme während verwenden tmux Tests ersetzen dann eine Shell oder anderen einfachen interaktiven Befehl (zB top, sqlite3usw.).

new-session Ist der Standardbefehl

Zweitens ist die Ausführung von tmux ohne Befehlsargument (z. B. tmux) gleichbedeutend mit der Verwendung des new-sessionBefehls (dh es tmuxist das gleiche wie tmux new-session). Sie .tmux.conferstellen eine Sitzung für ihre Fenster / Fenster ( newist ein Alias ​​für new-session) und eine weitere Sitzung wird für den impliziten new-sessionBefehl erstellt, der durch Starten von tmux ohne Befehlsargument angegeben wird . Wenn Sie die Standardstatusleiste verwenden, wird [1]in der „zusätzlichen“ Sitzung links von der Statusleiste ein a angezeigt (die erste Sitzung, die in der erstellten Sitzung erstellt wurde, .tmux.confist die Nummer 0).

Wenn Sie die Erstellung einer zusätzlichen Sitzung vermeiden möchten, verwenden Sie tmux attachstatt einfach tmux. Die Befehle .tmux.confwerden ausgeführt, wobei Sitzung 0 erstellt wird, und der Client wird an diese Sitzung angehängt, anstatt eine neue zu erstellen.

OK, ich bin vielleicht so dick wie ein Wal-Sandwich hier, aber im Moment habe ich eine Konfigurationsdatei, die nur "splitw" enthält - sonst nichts - und ich bekomme immer noch keinen geteilten Bildschirm Es sagt, dass es die aktuelle Sitzung nicht einrichten kann. Wenn ich "new" davor füge, bekomme ich ... ein Fenster, einen Bereich. Ich kann nicht scheinen, dass mein Leben beim Start zwei Scheiben bekommt. JUST MY correct OPINION vor 14 Jahren 2
Eine Konfigurationsdatei mit `new`, dann funktioniert 'splitw' für mich, wenn ich * tmux * über` tmux attach 'starte. Dabei ist zu beachten, dass `.tmux.conf` (oder die mit der Option -f` angegebene Datei) nur verwendet wird, wenn noch kein Server ausgeführt wird. Prüfen Sie, ob ein Server über `tmux ls` läuft. Wenn Sie die Befehle aus einer Datei ausführen möchten, während ein Server bereits ausgeführt wird, machen Sie es wie folgt: `tmux source-file / path / to / conf-file-erstellt-a-session-and-windows \; attach` (wenn Sie dies ausführen, wenn kein Server vorhanden ist, wird zuerst Ihre `.tmux.conf` (oder die` -f`-Datei) und dann Ihre `source-file`-Datei ausgeführt. Chris Johnsen vor 14 Jahren 1
Die Konfigurationsdatei wird mit -f angegeben - also werde ich 'tmux new -f myconfig' angeben. Der Inhalt dieser Konfigurationsdatei enthält ** nur ** `new` gefolgt von` splitw`. Ich töte alle tmux-Prozesse, bevor ich die Befehlszeile `tmux -f myconfig` versuche. Ich bekomme keine zwei Scheiben. Ich bin wirklich ratlos darüber, was ich über diesen Punkt hinaus tun muss (abgesehen davon, dass ich tmux einfach aufgegeben habe). JUST MY correct OPINION vor 14 Jahren 0
@Just: Unabhängig davon, ob Sie "-f" verwenden oder nicht, "tmux" ohne Befehlsargument ist dasselbe wie "tmux new-session" (das für neue Server eine neue Sitzung über der Funktion Ihrer Konfigurationsdatei erstellt ). Ihr Pre-Split-Fenster wird in Sitzung 0 erstellt, der implizite Befehl 'new-session' erstellt jedoch eine zusätzliche Sitzung (Sitzung 1; suchen Sie in Ihrer Statuszeile nach '1'). Verwenden Sie `tmux -f myconfig attach ', um zu vermeiden, dass die neue Sitzung erstellt wird, die Ihr Pre-Split-Fenster verbirgt. Chris Johnsen vor 14 Jahren 4
OK, ich denke, das Lesen zu lernen, wird sich irgendwann für mich auszahlen. :) Danke für die Mühe und die Antwort. Jetzt funktioniert alles gut. Ich wünschte, es gäbe hier einen Ruf "Trinkgeld", damit ich Ihnen mehr als nur eine akzeptierte Antwort geben könnte. JUST MY correct OPINION vor 14 Jahren 1
"Dick wie ein Wal-Sandwich" +1 chiggsy vor 13 Jahren 0
Mein Gott, wie wurde diese Antwort nicht positiv bewertet? +1 chiggsy vor 13 Jahren 0
Respawn-Fenster ist bereits in meinem Homebrew Tmux 1.5 vorhanden Wojtek Kruszewski vor 12 Jahren 0
9
John Schmitt

Ich verstehe nicht, was ich unter "manuell eingeben" verstehe, aber so mache ich es. Ich habe ein "Autostart" -Skript geschrieben, das mein Fenstermanager startet. Es beinhaltet:

tmux start-server  for i in ~/sessions_tmux/*.session; do "$i"; done 

wo jede .session-Datei ungefähr so ​​aussieht:

#!/bin/bash  SESSION_NAME="flaskr_tutorial" if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then echo "Already inside a tmux session, do not know what to do" exit 1 fi tmux -q has-session -t "$SESSION_NAME" if [ $? ]; then exit 0 fi NEWCWD=~/projects/flaskr/ ( cd "$"; tmux new-session -d -s "$SESSION_NAME" ) tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter ( cd "$"; tmux split -h -t "$SESSION_NAME" ) tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter 

Warten Sie, es gibt noch mehr! Ich habe eine ständig wachsende Anzahl von .session-Dateien, die ich mit konsole auflade:

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs 

wo work_console.tabs ungefähr so ​​aussieht:

. . . title: projectx;; command: tmux attach -t projectx title: flaskr;; command: tmux attach -t flaskr_tutorial . . . 

Dann drücke ich F12, um die Konsole zu starten.

konsole scheint kaputt zu sein, also habe ich zu [terminal] (http://www.xfce.org/projects/terminal/) gewechselt, was gut funktioniert. Ich habe einen detaillierteren [post] (http://sourceforge.net/mailarchive/message.php?msg_id=29900965) auf der tmux-users-Mailingliste. John Schmitt vor 12 Jahren 0
Nur ein kleiner Kommentar, den Sie ersetzen können! -z 'mit' -n 'in deinen Tests;) lilorox vor 6 Jahren 1
5
Kris

Ich fand teamocil sehr nützlich für die Automatisierung von Tmux-Fenstern / -Sitzungen.

Es ist in Ruby geschrieben, also müssen Sie das installiert haben.

Hier ist eine Beispielkonfiguration:

session: name: 'my project' windows: -name: vim root: '~/code/my_project' splits: - cmd: vim - cmd: guard 

Sie können eine Anordnung von Fenstern und Spalten haben.

5
Jasen

Angenommen, Sie möchten 3 Serverüberwachungsaufgaben starten (hier ping localhost), Sie müssen sich nicht mit Konfigurationsdateien und gespeicherten Sitzungen beschäftigen. Dies kann alles über die Befehlszeile erfolgen.

tmux new-session 'ping 127.0.0.1' \; \ split-window 'ping 127.0.0.1' \; \ split-window 'ping 127.0.0.1' \; \ select-layout even-vertical 
Danke für die Einfachheit - genau das Beispiel, nach dem ich gesucht habe! dsz vor 9 Jahren 0
4
Pablo Olmos de Aguilera C.

Eine andere Alternative zu teamcoil ist tmuxinator . Es wird aktiv weiterentwickelt und funktioniert recht gut. Es wird auch empfohlen (und überprüft) für das erstaunliche tmux: Produktive Entwicklung ohne Maus von The Pragmatic Bookshelf .

Ich fand es ein bisschen sauberer als teamocil (aber trotzdem sehr ähnlich) und verwende es jetzt. Ich bin ziemlich zufrieden damit, wie es funktioniert! Aktau vor 11 Jahren 0
4
user1757247

**

  • Speichern Sie besser Ihre Sitzung!

** Ich habe festgestellt, dass ich für einen faulen Administrator wie mich lieber die Sitzung von tmux retten würde, anstatt stundenlang zu versuchen, sie perfekt zu bauen. Ich verwalte mehr als 30 Server und meine tmux-Sitzungen sind dynamisch, wobei sich die Konfiguration ständig ändert. Es war Schmerzen im Nacken, bis ich kürzlich herausfand, dass tmux-resurrect dieses Plugin einfach großartig ist. Versuche es. Derzeit haben Ubuntu-Repositories tmux 1.8, dieses Plugin benötigt 1.9, daher müssten Sie ein Upgrade durchführen

sudo apt-get install python-software-properties software-properties-common sudo add-apt-repository ppa:pi-rho/dev sudo apt-get update sudo apt-get install tmux=2.0-1~ppa1~t 

Danach können Sie es installieren

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path 

Dann dd diese Zeile am Ende von ~ / .tmux.conf (wenn ~ / .tmux.conf nicht verfügbar ist, erstellen Sie eine leere Datei)

run-shell ~/clone/path/resurrect.tmux 

Ich füge diese Zeile auch am Ende der Datei ~ / .tmux.conf hinzu, damit das Plugin Sitzungen für alle von mir ausgeführten Programme speichert

set -g @resurrect-processes ':all:' 

Laden Sie dann die tmux-Umgebung erneut.

tmux source-file ~/.tmux.conf 

Das ist es! Du bist fertig. Führen Sie nun tmux wie gewohnt aus, ändern Sie die Größe Ihrer Fenster, erstellen Sie neue Fenster, erstellen Sie neue Sitzungen ... usw. Wenn Sie mit der erreichten Konfiguration zufrieden sind (in mehreren Fenstern und mehreren Sitzungen), klicken Sie einfach auf STRG + B und dann auf STRG + S, um die Sitzung zu speichern. Um die Ergebnisse zu testen, töten Sie einfach alle tmux

killall tmux 

Dann tmux erneut ausführen

tmux 

Klicken Sie dann innerhalb von Tmux auf Strg + B und dann auf Strg + R (zum Wiederherstellen). Magisch werden alle Ihre Fenster, Bereiche und Sitzungen mit derselben Geometrie und Anordnung wiederhergestellt. Hoffe, dass das helfen würde.