Adventskalender 16. Dezember 2024 - I'll be back.

Smalltalk
Antworten
Liffi
Beiträge: 2344
Registriert: 02.10.2004 01:33:05

Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Liffi » 16.12.2024 07:14:31

Dieses Türchen schließt sich ein an ein Türchen aus dem Adventskalender von 2022 an: in viewtopic.php?t=185703 hat uname damals tmux erklärt und warum es nützlich ist. Falls ihr das noch nicht gelesen habt, unbedingte Leseempfehlung.
Heute zeige ich euch, wie ich tmux benutze und erläutere den Plugin-Mechanismus, ein paar Plugins und mit tmuxinator auch ein Programm um sessions vorzubereiten.

Grundsätzliches
Ich befinde mich eigentlich immer in einer tmux-Session, weil es praktisch keine Nachteile hat. Wenn ich ein Terminal starte, werde ich schon begrüßt mit:

Code: Alles auswählen

current tmux sessions:
debianforum *
default *
attach or create (empty if none):
In diesem Fall existieren bereits zwei genutzte Sessions, debianforum und default. Ich kann entweder durch Tippen (es wird per grep gesucht, man muss also nicht den ganzen Namen eingeben) eine bestehende wieder aufnehmen oder eine neue eröffnen. Die Sterne hinter den Sessions weisen darauf hin, ob die Session bereits irgendwo aktiv genutzt wird oder nicht.
Hierfür nutze ich https://github.com/huboles/zshmux. Der Name deutet auf die zsh hin, aber es funktioniert laut Autor generell mit jeder bash-kompatiblen Shell.

Tmuxinator
Manchmal möchte ich eine vorbereitete, aber noch nicht aktive Session starten, dafür gehe ich mit [enter] direkt in die Shell.
Dann starte ich eine Session mit tmuxinator start meine_session um meine_session zu starten.

Woher weiß tmuxinator nun, was meine_session bedeutet?

eine neue Session vorbereiten
tmuxinator new meine_session erzeugt eine neue Konfiguration, die bei mir dann in ~/.config/tmuxinator/meine_session.yml liegt. Zugleich wird im editor die Konfigurationsdatei geöffnet. Hier beispielhaft eine von mir, ich habe unwichtig Teile rausgelassen und den Rest kommentiert.

Code: Alles auswählen

name: meine_session # Der Name der Session, wird so in tmux übernommen
root: ~/ # Startverzeichnis für die terminals

startup_window: shell # welches Fenster soll am Anfang Fokus bekommen?

windows: # Alle Fenster die direkt erstellt werden sollen inklusive der Befehle, die direkt beim Starten ausgeführt werden
  - chezmoi:
    - chezmoi cd
    - git pull
  - editor:
      layout: main-vertical
      panes:
        - editor:
          - vim
        - shell:
          - zsh
          - clear
  - shell:
    - zsh
    - clear

Wenn ich die wie oben beschrieben starte, wird in diesem Fall eine neue tmux session mit 3 Fenstern gestartet. Im ersten gehe ich in den chezmoi-Ordner und schaue nach Änderungen, im zweiten habe ich zwei "Panes", also Unterfenster, in einem starte ich den vim. im anderen eine Shell und im dritten Fenster habe ich eine weitere normale Shell.
Vorausgewählt ist die Shell, weil ich da direkt loslegen möchte.
Grundsätzlich kann man hier mit beliebigen vielen Fenstern loslegen und diese auch noch in "Panes" unterteilen.
Ich nutze es auch auf der Arbeit, weil ich dort mit einem Dutzend Projekte zu tun habe und kann jedes von denen auf diese Art starten. Dort fahre ich dann z.B. direkt docker hoch, zeige log files in einem Fenster und habe schon die Verzeichnisse geöffnet, von denen ich erwarte, dass ich ohnehin dort rein muss.

Plugins
Zusätzlich zu tmuxinator nutze ich noch den Plugin-Mechanismus von tmux um es mit weiteren Fähigkeiten zu versehen. Um tmux plugin-fähig zu machen, benötigt man den tmux plugin manager.
Den kann man folgendermaßen in seine tmux config eintragen:

Code: Alles auswählen

# List of plugins
set -g @plugin 'tmux-plugins/tpm'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
Falls tmux schon läuft, kann man es folgendermaßen aktivieren:

Code: Alles auswählen

# type this in terminal if tmux is already running
tmux source ~/.tmux.conf
Um dann ein Plugin hinzuzufügen, reicht es zweite Schritte zu unternehmen:
1. Plugin in die tmux config eintragen, hier mal mit extrakto als Beispiel:

Code: Alles auswählen

# search for any output. prefix + tab
set -g @plugin 'laktak/extrakto'
2. Prefix + I (großes i) um alle neuen Plugins zu installieren.

Eine Liste der derzeit verfügbaren Plugins kann man sich hier anschauen.

extrakto
Beispielhaft stelle ich eines meiner genutzten Plugins vor, extrakto.
Wenn das wie oben installiert ist, reicht ein Drücken von Prefix + tab aus, um es zu aktivieren.
Dann wird ein Menü gezeigt, in dem man per regulärem Ausdruck alles auswählen kann, was als Output in diesem Fenster passiert ist. Sehr praktisch um Wörter oder ganze Zeilen zu kopieren ohne die Maus zu bemühen.
Um das Ganze mal in Aktion zu sehen könnt ihr euch folgendes Video anschauen, wo der Autor von extrakto ein wenig mit git herumspielt und ein paar der Fähigkeiten zeigt.


Ich hoffe, ich konnte euch einen brauchbaren Eindruck, wie ich tmux nutze, geben. Um es nicht ausufern zu lassen verzichte ich mal auf die Beschreibung der anderen zehn Plugins, die ich nutze. Falls Interesse besteht, kann ich aber auch das noch gerne machen.

rodney
Beiträge: 370
Registriert: 09.12.2016 04:15:59

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von rodney » 16.12.2024 18:54:53

Liffi hat geschrieben: ↑ zum Beitrag ↑
16.12.2024 07:14:31
Ich hoffe, ich konnte euch einen brauchbaren Eindruck, wie ich tmux nutze, geben. Um es nicht ausufern zu lassen verzichte ich mal auf die Beschreibung der anderen zehn Plugins, die ich nutze. Falls Interesse besteht, kann ich aber auch das noch gerne machen.
Erstmal Danke fuer das Tuerchen. Ich nutze ein aehnliches Setup (tmuxp anstatt tmuxinator) inkl. Extrakto-Plugin und waere natuerlich auch an den anderen, von dir genutzten, Plugins interessiert.

P.S.: Nutzt du eigene Filter in Extrakto? Meine (quick and dirty) Filter:

Code: Alles auswählen

[hash]
regex: ([a-fA-F0-9]{7,})
[ipv4]
regex: (\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b)
[bs-quote]
regex: `([^`\n\r]+)`
[email]
regex: \b([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})\b
[iso-date]
regex: (\d{4}-\d{2}-\d{2})
[de-date]
regex: (\d{1,2}\.\d{1,2}\.\d{2,4})

Liffi
Beiträge: 2344
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Liffi » 17.12.2024 07:57:56

rodney hat geschrieben: ↑ zum Beitrag ↑
16.12.2024 18:54:53
Erstmal Danke fuer das Tuerchen. Ich nutze ein aehnliches Setup (tmuxp anstatt tmuxinator) inkl. Extrakto-Plugin und waere natuerlich auch an den anderen, von dir genutzten, Plugins interessiert.
tmuxp habe ich mir auch mal angeschaut, aber wieder verworfen, vermutlich weil der Unterschied zwischen den Funktionalitäten nicht groß genug war um zu wechseln. Zumindest erinnere ich mich nicht an mehr.

Hier noch meine weiteren Plugins:
  • jaclu/tmux-menus # hilft mir selten genutzte tmux Funktionen per Menü zu finden. Lauscht auf Prefix + \
  • b0o/tmux-autoreload # automatischer reload der tmux.config nach Änderung
  • ofirgall/tmux-window-name # Fensternamen vom Programm ableiten. Hilft mir vor allem bei "spontanen" Sessions
  • tmux-plugins/tmux-pain-control # nette default key bindings für Fenster- und Panenavigation, die gut für mich passen
  • MunifTanjim/tmux-mode-indicator # zeigt verschachtelte tmux sessions an, passiert schon mal, wenn ich remote auch noch attache
  • MunifTanjim/tmux-suspend # Wechsel zwischen innerer und äußerer Session (wenn remote attached)
  • tmux-plugins/tmux-resurrect # falls doch mal der Rechner abschmiert, den letzten Zustand wiederherstellen
  • tmux-plugins/tmux-continuum # gehört zu resurrect
  • omerxx/tmux-sessionx # bequem zwischen sessions hin- und herschalten
P.S.: Nutzt du eigene Filter in Extrakto? Meine (quick and dirty) Filter:

Code: Alles auswählen

[hash]
regex: ([a-fA-F0-9]{7,})
[ipv4]
regex: (\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b)
[bs-quote]
regex: `([^`\n\r]+)`
[email]
regex: \b([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})\b
[iso-date]
regex: (\d{4}-\d{2}-\d{2})
[de-date]
regex: (\d{1,2}\.\d{1,2}\.\d{2,4})
Das sieht gut aus. Bisher nutze ich keine eigenen Filter, aber jetzt schon ;-).

Nutzt du sonst noch andere Plugins?

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Meillo » 17.12.2024 08:42:52

Ist ja krass, dass tmux inzwischen aehnlich konfigurier- und erweiterbar ist wie vim und die zsh.

Ich selbst nutzt nur eine Vanilla-Installation, bei der ich eine Handvoll Tastenkombinationen und die Statuszeile angepasst habe.

Was ich brauchen koennte, waere ein Ressurect, das die Fenster mit den vorigen Arbeitsverzeichnissen oeffnen kann. Als ich es mir mal angeschaut hatte, da konnte tmux-ressurect nur das Fensterlayout wiederherstellen. Das ist fuer mich nicht relevant, da ich nur eine lineare Liste von Fenstern nutze, also ohne Unterteilungen/Panes. Falls aber mal jemand einen Server neu startet und ich meine tmux-Session dadurch verliere, dann wuerde ich gerne danach wieder wissen, woran ich davor gearbeitet hatte, d.h. in erster Linie die Arbeitsverzeichnisse. Kann das irgendeines der Plugins?
Use ed once in a while!

Liffi
Beiträge: 2344
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Liffi » 17.12.2024 09:02:58

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.12.2024 08:42:52
Ist ja krass, dass tmux inzwischen aehnlich konfigurier- und erweiterbar ist wie vim und die zsh.
Das Ökosystem ist schon erstaunlich groß, auch wenn vieles noch ein bisschen sperriger als bei vim und zsh ist.
Ich selbst nutzt nur eine Vanilla-Installation, bei der ich eine Handvoll Tastenkombinationen und die Statuszeile angepasst habe.
Meine wichtigste Änderung ist sicher der Wechsel des Prefix von ctrl+b zu `. Den benötige ich sonst selten (benutze $() in der Shell) und er liegt beim ANSI-Layout an einer brauchbaren Stelle.
Zweitwichtigste Änderung: tmux soll bei 1 anfangen zu zählen, nicht bei 0, weil die 0 so schrecklich weit weg ist.
Was ich brauchen koennte, waere ein Ressurect, das die Fenster mit den vorigen Arbeitsverzeichnissen oeffnen kann. Als ich es mir mal angeschaut hatte, da konnte tmux-ressurect nur das Fensterlayout wiederherstellen. Das ist fuer mich nicht relevant, da ich nur eine lineare Liste von Fenstern nutze, also ohne Unterteilungen/Panes. Falls aber mal jemand einen Server neu startet und ich meine tmux-Session dadurch verliere, dann wuerde ich gerne danach wieder wissen, woran ich davor gearbeitet hatte, d.h. in erster Linie die Arbeitsverzeichnisse. Kann das irgendeines der Plugins?
https://github.com/tmux-plugins/tmux-resurrect macht eigentlich genau das, was du möchtest. Alle Verzeichnisse in allen Panes werden wieder hergestellt. Zusätzlich kann man optional sogar noch vim-Sessions wiederherstellen.
Per Default kann er folgende Programme wiederherstellen (bzw. neustarten):
vi vim nvim emacs man less more tail top htop irssi weechat mutt.
Die Liste kann man aber auch noch erweitern wenn ich das möchte.

Ob du auch tmux-continuum möchtest, hängt davon ab, ob du lieber zu gewissen Zeitpunkten deine Session selber sichern möchtest oder ob das automatisch geschehen soll.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Meillo » 17.12.2024 09:15:20

Liffi hat geschrieben: ↑ zum Beitrag ↑
17.12.2024 09:02:58
Meine wichtigste Änderung ist sicher der Wechsel des Prefix von ctrl+b zu `. Den benötige ich sonst selten (benutze $() in der Shell) und er liegt beim ANSI-Layout an einer brauchbaren Stelle.
Zweitwichtigste Änderung: tmux soll bei 1 anfangen zu zählen, nicht bei 0, weil die 0 so schrecklich weit weg ist.
Als ehemaliger screen-User verwende ich weiterhin ^A und noch einige mehr der screen-Tastenkombinationen. (Und da ich die Shell im vi-Mode betreibe, fehlt mir ^A dort auch nicht.) 0 ist bei mir die root-Shell, falls ich sie offen habe, da ist es ganz in Ordnung, dass sie weiter weg ist. ;-)
Liffi hat geschrieben: ↑ zum Beitrag ↑
17.12.2024 09:02:58
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.12.2024 08:42:52
Was ich brauchen koennte, waere ein Ressurect, das die Fenster mit den vorigen Arbeitsverzeichnissen oeffnen kann. Als ich es mir mal angeschaut hatte, da konnte tmux-ressurect nur das Fensterlayout wiederherstellen. Das ist fuer mich nicht relevant, da ich nur eine lineare Liste von Fenstern nutze, also ohne Unterteilungen/Panes. Falls aber mal jemand einen Server neu startet und ich meine tmux-Session dadurch verliere, dann wuerde ich gerne danach wieder wissen, woran ich davor gearbeitet hatte, d.h. in erster Linie die Arbeitsverzeichnisse. Kann das irgendeines der Plugins?
https://github.com/tmux-plugins/tmux-resurrect macht eigentlich genau das, was du möchtest. Alle Verzeichnisse in allen Panes werden wieder hergestellt. Zusätzlich kann man optional sogar noch vim-Sessions wiederherstellen.
Ach, interessant. Als ich es vor einiger Zeit mal getestet hatte, konnte es das noch nicht. Windows, Arbeitsverzeichnisse und vi-Sessions wiederherstellen ist das was ich brauche. Dann schaue ich mir das nochmal neu an. :THX:
Use ed once in a while!

Liffi
Beiträge: 2344
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von Liffi » 17.12.2024 10:27:12

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.12.2024 09:15:20
Als ehemaliger screen-User verwende ich weiterhin ^A und noch einige mehr der screen-Tastenkombinationen.
ctrl+a ist zumindest ein bisschen fingerfreundlicher als ctrl+b. Ich verstehe den Hintergrund, dass man ctrl+a nicht doppelt belegen wollte, aber dennoch fühlt sich das nicht gut an.

uname
Beiträge: 12396
Registriert: 03.06.2008 09:33:02

Re: Adventskalender 16. Dezember 2024 - I'll be back.

Beitrag von uname » 17.12.2024 12:43:29

Auch wenn mein oben zitierter Adventskalender-Beitrag Matrjoschka-Terminals (Tmux) von 2022 und meine diversen Beiträge zur Fernwartung mit SSH-Remote-Port-Forwarding inkl. tmux was anderes suggerieren. Eingentlich nutze ich Debiantmux nur mit dem immer gleichen Aufruf "tmux attach || tmux new", evtl. öffne ich mal weitere Unterfenster und den Detach-Befehl kenne ich natürlich auch auswendig. Das macht bei mir "tmux" aus. Toll ist auch, dass tmux im Gegensatz zu Debianscreen scheinbar keine ncurses-Probleme wie z. B. bei mocp (Debianmoc) oder Debianmc hat.

Antworten