$ tmux — corso in 10 lezioni
Lezione 10 di 10

Sessioni che sopravvivono al riavvio

tmux tiene in piedi il lavoro finché la macchina è accesa. L'ultimo passo è farlo sopravvivere anche a un riavvio — e mettere insieme tutto il resto: plugin, finestre a comparsa, l'editor che parla con i pannelli.

Teoria

I plugin, con e senza gestore

Un plugin di tmux è quasi sempre uno script di shell che aggiunge comandi e tasti. Si può installare a mano — git clone e una riga run-shell nel file di configurazione — ma con più di due plugin conviene tpm, il gestore ufficioso.

installare tpm
$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
in fondo al ~/.tmux.conf — l'ordine conta
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'christoomey/vim-tmux-navigator'

# salva anche i programmi in esecuzione, non solo i pannelli
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-strategy-vim 'session'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'

# QUESTA RIGA VA PER ULTIMA, sempre
run '~/.tmux/plugins/tpm/tpm'
TastiEffetto
prefix Iinstalla i plugin elencati (I maiuscola)
prefix Uaggiorna i plugin
prefix Alt+urimuove quelli non più elencati
prefix Ctrl+sresurrect: salva lo stato adesso
prefix Ctrl+rresurrect: ripristina l'ultimo stato salvato

resurrect registra sessioni, finestre, pannelli, disposizioni e cartelle in un file sotto ~/.local/share/tmux/resurrect/; continuum lo chiama da solo ogni quindici minuti e ripristina all'avvio del server. Insieme fanno sì che un riavvio del computer costi dieci secondi invece di dieci minuti di ricostruzione.

Ripristina i pannelli, non i processi. Di fabbrica resurrect riapre le shell nelle cartelle giuste ma non rilancia i comandi che ci giravano. Si può forzare con @resurrect-processes, elencando quelli sicuri: set -g @resurrect-processes 'vim ssh "tail -f"'. Non metterci comandi che scrivono o installano: un ripristino li rieseguirebbe senza chiedere.
Pratica

Due integrazioni che cambiano la giornata

Muoversi tra Vim e tmux con gli stessi tasti

Se usi Vim dentro tmux hai due sistemi di navigazione sovrapposti: Ctrl+w h per le finestre dell'editor, prefix h per i pannelli. Il plugin vim-tmux-navigator li unifica: Ctrl+h j k l attraversa entrambi, e il confine diventa invisibile.

le due metà
" nel .vimrc
Plug 'christoomey/vim-tmux-navigator'

# nel .tmux.conf
set -g @plugin 'christoomey/vim-tmux-navigator'

Funziona perché tmux, prima di spostare il pannello, controlla se il programma in esecuzione è Vim: in quel caso inoltra il tasto all'editor. Lo stesso Ctrl-h fa due cose diverse a seconda di dove sei, ed è esattamente quello che vuoi.

Finestre a comparsa

Dalla versione 3.2 tmux sa aprire un riquadro fluttuante sopra la finestra, che si chiude quando il comando finisce. È il posto giusto per le cose brevi che non meritano un pannello.

~/.tmux.conf
# una shell al volo, nella cartella corrente
bind g display-popup -d "#{pane_current_path}" -w 80% -h 80% -E "zsh"

# lazygit, che è il caso d'uso per cui quasi tutti scoprono i popup
bind G display-popup -d "#{pane_current_path}" -w 90% -h 90% -E "lazygit"

# un selettore di sessioni con fzf
bind C-j display-popup -E "\
  tmux list-sessions -F '#{?session_attached,,#S}' \
  | sed '/^$/d' | fzf --reverse --header 'sessione' \
  | xargs tmux switch-client -t"
L'opzione -E è quella che serve: chiude il popup appena il comando esce. Senza, resta aperto con una shell morta dentro e devi chiuderlo a mano con q. Il -d imposta la cartella di partenza, esattamente come per le divisioni.
Trucco

Il minimo indispensabile che si usa ogni giorno

Dieci lezioni sono tante, ma l'uso quotidiano di tmux sta in una quindicina di tasti. Questa è la lista che vale la pena tenere accanto alla tastiera per la prima settimana — con il prefix rimappato su Ctrl+a e le divisioni su | e -.

TastiEffetto
prefix dstacca la sessione — quella che rende tmux tmux
prefix cnuova finestra
prefix ,dalle un nome, subito
prefix 1…9vai a quella finestra
prefix | · -dividi in due il pannello
prefix h j k lspostati fra i pannelli
prefix zzoom: il più usato di tutti
prefix [modo copia, per scorrere e cercare
prefix scambia sessione
prefix ?e se non ricordi, è tutto lì dentro
corso 1…9 fatte 10:fine* ora tocca alle dita

Come si continua da qui

Dove guardareCosa ci trovi
man tmuxla documentazione completa, ben scritta e sorprendentemente leggibile
prefix ?i tasti della tua configurazione: sempre aggiornati
tmux list-commandsogni comando con la sua sintassi e le sue abbreviazioni
tmux display -p '#{...}'prova una variabile di formato e vedi cosa contiene
github.com/tmux/tmux/wikiil wiki ufficiale, con le note di rilascio versione per versione

Nel man, la sezione da leggere per prima è COMMANDS: spiega la sintassi degli indirizzi della lezione 7, che è la chiave per capire tutto il resto. La seconda è FORMATS, se vuoi spingere sulla status bar.

Il consiglio finale, lo stesso dell'altro corso: non provare ad applicare tutto insieme. Questa settimana solo il distacco e le finestre con un nome; la prossima i pannelli e lo zoom; poi il modo copia. tmux dà il meglio quando smetti di pensarci — e ci si arriva aggiungendo un'abitudine alla volta, non leggendo dieci lezioni in un pomeriggio.