
Introduzione
Abbiamo appena appreso che ogni azione che compie Tmux è, dietro alle quinte, a tutti gli effetti un comando. Se uniamo questo concetto alla necessità di ridefinire alcune scorciatoie di tastiera che magari non ci vanno troppo a genio, ecco che nasce il bisogno di cucire il programma in base alle nostre reali necessità.
Questo capitolo della nostra avvincente saga sull'utilizzo di Tmux è strettamente soggettivo, andremo qui a personalizzare il file di configurazione .tmux.conf in base a come Io ho preferito. Molte di queste configurazioni sono scritte allineando il più possibile la coesistenza tra Tmux e Vim, l'editor di testo che utilizzo; cogliete il senso delle personalizzazioni ed adeguateli alle vostre preferenze!
Per scelta ho deciso di inserire tutte le mie personalizzazioni all'interno del file .tmux.conf personale del mio utente, se volete creare un file per tutti gli utenti della vostra macchina, dovrete creare invece /etc/tmux.conf.
Iniziamo quindi con la creazione, nella nostra home, del file .tmux.conf: touch .tmux.conf, ed iniziamo la modifica del file (usate Vim, vero?).
Prefisso
Sì, il nostro caro amico C-b può essere ridefinito! Per mia preferenza personale, ho ridefinito il prefisso in C-Space, la barra spaziatrice è comoda e si va a colpo sicuro per premerla, quindi iniziamo con un
set -g prefix C-Space
unbind C-b
Stiamo ridefinendo globalmente (-g), ovvero per tutte le sessioni, il prefisso come CTRL-Space. A questo punto dobbiamo liberare (unbind) la nostra vecchia combinazione che attualmente non fa nulla.
D'ora in avanti mi riferirò al prefisso come <prefix>.
Generali
Un set di configurazioni non così avvincenti:
set -g default-terminal "tmux-256color"
Qua stiamo chiedendo a Tmux di riportare la variabile d'ambiente TERM ai programmi che girano al suo interno a tmux-256color per un supporto a 256 colori corretto e completo per Tmux (la tua macchina dovrebbe averlo già , ma verifica con infocmp tmux-256color).
set -s escape-time 1
Qua stiamo impostando a livello di server (-s), ovvero per tutte le sessioni su questo server, un lasso di tempo di 1ms quando si preme il tasto ESC prima che Tmux non lo consideri come una sequenza di comandi. Perchè lo stiamo facendo? Tmux aspetta di default 500ms dal momento in cui premiamo il tasto ESC per capire che si tratta di una pressione "isolata" e non facente parte di una combinazione di tasti. Questo può andare bene a molti, ma in contesti come Vim, dove premo il tasto ESC di continuo per uscire dall'insert mode, questo si tramuterebbe in un grosso fastidio, perché Tmux aspetterebbe mezzo secondo prima di farmi uscire dall'insert mode. Con questa configurazione invece è istantaneo, come giusto che sia.
set -g mouse on
Qua stiamo di fatto abilitando globalmente il supporto del mouse dentro Tmux. "Ma Tmux dovrebbe essere tastierocentrico!" Sì, sono d'accordo, ma abilitando questa impostazione non cambia assolutamente nulla al flusso tastiera, mentre abilita questo set di comodità:
- Cambiare pannello cliccandoci sopra;
- Ridimensionare i pannelli trascinandone i bordi;
- Selezionare una sessione / finestra nelle schermate ad albero che abbiamo visto nelle precedenti puntate;
- Fare scroll nello storico del pannello con la rotellina;
- Selezionare testo trascinandolo con il mouse.
Anche qui ad interpretazione: usatelo con off se non volete intaccare la natura nativa del terminale e volete forzarvi ad usare la tastiera, portatelo ad on nel momento in cui riuscite a fare tutto con la tastiera, ma per alcune cose il mouse è imprescindibile.
Mappatura combinazioni
Il cuore del nostro file, a mio avviso, è la ridefinizione, o l'aggiunta, di scorciatoie di tastiera, in gergo per i più british: bindings.
bind r source-file ~/.tmux.conf \; \
display-message "Configuration reloaded"
Comodità: stiamo associando il tasto r (bind r) a 2 comandi separati da ;: il primo è source-file, che forza Tmux a rileggere il file .tmux.conf, il secondo è display-message, che fa comparire un messaggio nella status bar di Tmux a conferma della buona riuscita. Per cosa ci serve? Tmux rilegge il file di configurazione all'apertura del programma; per evitare di dover chiuderlo e riaprirlo ad ogni modifica, premendo <prefix> r andiamo a ricaricare l'intera configurazione.
Ovviamente per attivare la combinazione va sempre premuto prima il prefisso per impartire a Tmux il comando.
bind | split-window -h
bind - split-window -v
Come abbiamo visto in questa puntata, i pannelli possono essere creati orizzontalmente o verticalmente. Qua ho ridefinito lo split orizzontale, comando split-window -h (ovvero 2 pannelli adiacenti) con |, mentre lo split verticale, comando split-window -v (uno sopra l'altro) con -: questo mi aiuta molto in quanto il pipe | mi dice subito che la linea di divisione dei pannelli è verticale, mentre il "meno" - mi rappresenta la linea di divisione orizzontale. Molto meglio che i vecchi % e ".
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
Qui andiamo sul personale. Stiamo ridefinendo la selezione del pannello (comando select-pane). Emulando Vim, ora per spostarmi al pannello di destra non userò più <prefix> <frecciadirezionaledestra>, ma <prefix> l. Stesso discorso per le altre direzioni, sempre con le nostre amate h j k l.
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
Qua dobbiamo fare una piccola analisi: stiamo parlando di selezione della finestra (comando select-window) precedente o successiva (lo abbiamo già incontrato nelle lezioni precedenti). In breve:
C-h: lo abbiamo già visto: definisce la scorciatoia da tastiera come CTRL + h;select-windowè il comando di selezione della finestra;-t :-specifica come target "la finestra precedente";-t :+specifica come target "la finestra successiva";-rè una parte molto importante: stiamo dicendo a Tmux che questa combinazione è ripetibile, ovvero che dopo aver premuto il prefisso possiamo premere il tasto h o l più volte di seguito entro una finestra temporale, di default 500ms. Questo ci evita di dover fare tutta la combinazione ogni volta. In soldoni, se ho 10 finestre e voglio scorrerle tutte, premo una volta il prefisso, e poi tenendo premuto CTRL premo tante volte h o l a seconda se voglio iterare tutte le finestre successive o precedenti.
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
Ridimensioniamo i pannelli sempre con le "scorciatoie Vim", questa volta solo con H J K L maiuscole. Anche qui abbiamo usato -r per indicare che è una combinazione ripetibile.
Estetica
Tmux propone una personalizzazione dell'estetica e dei colori molto precisa ed estesa. Non volendomi addentrare nel magico mondo dello studio dei colori per Tmux, mi sono affidato ai plugin.
Ora, questo a sua volta apre un mondo, ma noi qui ci limiteremo a dire (e fare) che esiste un plugin manager di Tmux: TPM. Installiamolo ed installiamo quindi un tema, io ho scelto Rose pine moon, ma se fate un giro su internet, troverete un miliardo di temi differenti.
Seguendo le istruzioni di TPM, procediamo a portarlo in macchina con
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
A questo punto, al fondo del nostro file .tmux.conf, procediamo ad importare e configurare minimamente il nostro tema:
set -g @plugin 'rose-pine/tmux'
set -g @rose_pine_variant 'main'
set -g @rose_pine_host 'on'
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
run '~/.tmux/plugins/tpm/tpm'
Questo configura Rose Pine come plugin e inizializza TPM, che si occuperà della gestione dei plugin.
A questo punto, ricaricando nuovamente il nostro .tmux.conf (se avete seguito il punto iniziale di questa guida basterà dare un <prefix> r) e poi un <prefix> I per installare il plugin con il nostro tema!

Siamo alla fine anche questo articolo! Abbiamo trattato in maniera abbastanza sommaria alcune delle molteplici configurazioni the Tmux prevede. Queste sono le configurazioni che utilizzo maggiormente e che trovo più comode.
Questo chiude anche a malincuore questa serie di "tutorial" sull'utilizzo di Tmux. Ci siamo divertiti, abbiamo pianto e gioito assieme e porterò sempre nel cuore ciò che abbiamo condiviso.
Valuterò un capitolo successivo con alcune funzionalità che passano un po' più in sordina, come il "copy-mode" e gli hooks.
A presto!
Il nostro .tmux.conf
# Ridefinisce il prefisso
set -g prefix C-Space
unbind C-b
# TERM di default a tmux-256color
set -g default-terminal "tmux-256color"
# Lasso di tempo tra ESC e comando a 1ms
set -s escape-time 1
# Abilita il supporto mouse
set -g mouse on
# -- Bindings --
# Rilegge il file .tmux.conf
bind r source-file ~/.tmux.conf \; \
display-message "Configuration reloaded"
# Split orizzontale
bind | split-window -h
# Split verticale
bind - split-window -v
# Scorciatoie Vim per la selezione dei pannelli
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Seleziona la finestra precedente o successiva
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
# Ridimensiona i pannelli
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
# ---------
# -- Plugins --
set -g @plugin 'rose-pine/tmux'
set -g @rose_pine_variant 'main'
set -g @rose_pine_host 'on'
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
run '~/.tmux/plugins/tpm/tpm'
# ---------