$ tmux — corso in 10 lezioni
Lezione 03 di 10

Pannelli: dividere lo schermo

Questa è la parte di tmux che si vede, ed è anche quella che si esagera. Ogni pannello toglie righe agli altri: la bravura non sta nell'aprirne dieci, sta nel sapere quando zoomare su uno solo.

Teoria

Dividere, e poi muoversi

Un pannello è un riquadro con dentro una shell. Dividendolo ne ottieni due, che si spartiscono lo spazio del primo. Le scorciatoie di fabbrica sono % e ", che nessuno ricorda perché non assomigliano a quello che fanno: la lezione si chiude rimappandole.

TastiEffetto
prefix %divide in verticale: i due pannelli stanno affiancati
prefix "divide in orizzontale: uno sopra, uno sotto
prefix ←↑↓→sposta il cursore nel pannello in quella direzione
prefix ogira ciclicamente fra i pannelli
prefix ;torna all'ultimo pannello usato
prefix qmostra il numero di ogni pannello · premi quel numero per andarci
prefix xchiude il pannello, con conferma · oppure exit
prefix zingrandisce il pannello a tutta finestra, e lo rimpicciolisce
prefix { · }scambia il pannello con il precedente / successivo
prefix Spaziopassa al layout predefinito successivo
una finestra a tre pannelli
┌──────────────────────┬───────────────────┐
│                      │                   │
│  1  vim index.php     │  2  npm run dev    │
│                      │                   │
│                      ├───────────────────┤
│                      │                   │
│                      │  3  tail -f log    │
└──────────────────────┴───────────────────┘
 sito   1:codice*  2:git                 14:32
Il pannello attivo si riconosce dal bordo. Se il colore non è abbastanza evidente sul tuo tema, si cambia: set -g pane-active-border-style fg=colour214. Su schermi grandi con molti pannelli è l'unica cosa che ti dice dove finiranno i tasti che premi.

Ridimensionare

TastiEffetto
prefix Ctrl+←↑↓→allarga o stringe di una cella, tenendo premuto
prefix Alt+←↑↓→lo stesso, a passi di cinque
prefix : resize-pane -D 10preciso: giù di dieci righe · -U -L -R per le altre direzioni
prefix : resize-pane -x 80larghezza esatta in colonne
Pratica

Layout, zoom, e pannelli che cambiano posto

tmux ha cinque disposizioni predefinite, che ricalcolano tutto in un colpo. Si scorrono con prefix Spazio o si scelgono per nome.

LayoutDisposizione
even-horizontaltutti affiancati, stessa larghezza
even-verticaltutti impilati, stessa altezza
main-horizontaluno grande in alto, gli altri in fila sotto
main-verticaluno grande a sinistra, gli altri in colonna a destra — l'editor più i suoi accessori
tiledgriglia il più regolare possibile
applicarli dalla riga di comando di tmux
:select-layout main-vertical
:select-layout tiled

# e per dare più spazio al pannello principale:
:set main-pane-width 100
:select-layout main-vertical

Lo zoom è la funzione più utile del gruppo

prefix z porta il pannello corrente a tutta finestra e, premuto di nuovo, lo rimette dov'era senza scomporre niente. Serve ogni volta che una cosa che stavi tenendo d'occhio diventa per cinque minuti la cosa principale: leggere un file lungo, guardare un diff, seguire un errore.

Quando un pannello è zoomato, la status bar lo dice con una Z accanto al nome della finestra. È il dettaglio che ti evita di pensare che gli altri pannelli siano spariti.

sito 1:codice*Z 2:git 3:log 14:36 12-set

Spostare un pannello altrove

ComandoEffetto
prefix !stacca il pannello e lo promuove a finestra propria
join-pane -t :2prende questo pannello e lo attacca alla finestra 2
join-pane -s :3 -t :1 -hporta il pannello della finestra 3 dentro la 1, affiancato
break-pane -dlo stacca in una finestra nuova senza saltarci dentro
swap-pane -Dscambia di posto con il pannello successivo

break-pane e join-pane sono la coppia che serve quando una finestra si è affollata: stacchi il pannello dei log, lo mandi in una finestra sua, e quando ti serve di nuovo sott'occhio lo riporti indietro.

Trucco

Divisioni che si ricordano, e che aprono nella cartella giusta

Due fastidi delle impostazioni di fabbrica si risolvono con quattro righe. Primo: % e " sono arbitrari. I caratteri | e - assomigliano al taglio che producono, e si ricordano da soli. Secondo: un pannello nuovo parte sempre dalla cartella home, e la prima cosa che fai è rifare il cd.

~/.tmux.conf
# divisioni mnemoniche, che ereditano la cartella corrente
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# anche le finestre nuove partono da lì
bind c new-window -c "#{pane_current_path}"

# muoversi fra i pannelli senza rilasciare il prefix ogni volta
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

# ridimensionare, ripetibile
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

#{pane_current_path} è una variabile di formato: tmux la sostituisce con la cartella in cui si trova il pannello da cui stai dividendo. È lo stesso meccanismo che la lezione 8 usa per costruire la status bar.

L'opzione -r vale da sola il tempo di configurarla. Significa «ripetibile»: dopo aver premuto il prefix una volta, puoi battere H H H per allargare di quindici colonne senza ripremerlo. La finestra di ripetizione dura mezzo secondo e si regola con set -g repeat-time 600.
Prima di rimappare h j k l, controlla le maiuscole. prefix l di fabbrica è «ultima finestra»: se lo usi per «pannello a destra», quella funzione va spostata altrove — per esempio su bind Tab last-window. Rimappare senza accorgersi di cosa si sta coprendo è il modo più rapido di farsi una configurazione che sembra rotta.