# Riferimento rapido tmux

*Sessioni, finestre, riquadri, modalità copia, configurazione*

> Source: tmux Documentation (github.com/tmux/tmux) · MIT

## Gestione delle sessioni

### Creazione e connessione

```
tmux                        # new session
tmux new -s work            # new named session
tmux attach -t work         # attach to session
tmux attach -dt work        # detach others, attach
```

### Comandi per le sessioni

| Command | Description |
|---------|-------------|
| `tmux ls` | Elenca tutte le sessioni |
| `tmux kill-session -t work` | Termina una sessione con nome |
| `tmux kill-server` | Termina il server tmux e tutte le sessioni |
| `tmux rename-session -t old new` | Rinomina una sessione |
| `Prefisso d` | Disconnetti dalla sessione corrente |
| `Prefisso $` | Rinomina la sessione corrente |
| `Prefisso s` | Elenca le sessioni (interattivo) |

*Il prefisso predefinito è Ctrl-b*

## Finestre

### Tasti di scelta rapida per le finestre

| Command | Description |
|---------|-------------|
| `Prefisso c` | Crea una nuova finestra |
| `Prefisso ,` | Rinomina la finestra corrente |
| `Prefisso &` | Chiudi la finestra corrente (con conferma) |
| `Prefisso n` | Finestra successiva |
| `Prefisso p` | Finestra precedente |
| `Prefisso 0-9` | Passa alla finestra per numero |
| `Prefisso w` | Elenca le finestre (selettore interattivo) |
| `Prefisso l` | Torna all'ultima finestra attiva |

### Comandi per le finestre

```
tmux new-window -t work     # new window in session
tmux swap-window -t 0       # move window to index 0
tmux move-window -t 3       # renumber to index 3
```

## Riquadri

### Divisione e chiusura

| Command | Description |
|---------|-------------|
| `Prefisso %` | Dividi orizzontalmente (sinistra \| destra) |
| `Prefisso "` | Dividi verticalmente (sopra / sotto) |
| `Prefisso x` | Chiudi il riquadro corrente (con conferma) |
| `Prefisso !` | Sposta il riquadro nella sua finestra |
| `Prefisso z` | Attiva/disattiva lo zoom del riquadro (finestra intera) |

### Ridimensionamento dei riquadri

| Command | Description |
|---------|-------------|
| `Prefisso Ctrl-Freccia` | Ridimensiona di 1 cella |
| `Prefisso Alt-Freccia` | Ridimensiona di 5 celle |
| `Prefisso Spazio` | Cicla tra i layout |

*Layout: even-horizontal, even-vertical, main-horizontal, main-vertical, tiled*

## Navigazione

### Spostamento tra riquadri

| Command | Description |
|---------|-------------|
| `Prefisso Freccia` | Sposta al riquadro nella direzione |
| `Prefisso o` | Cicla al riquadro successivo |
| `Prefisso q` | Mostra i numeri dei riquadri, poi premi il numero per saltare |
| `Prefisso {` | Scambia il riquadro con il precedente |
| `Prefisso }` | Scambia il riquadro con il successivo |

### Spostamento tra sessioni

| Command | Description |
|---------|-------------|
| `Prefisso (` | Passa alla sessione precedente |
| `Prefisso )` | Passa alla sessione successiva |
| `Prefisso s` | Selettore sessioni (vista ad albero) |
| `Prefisso w` | Selettore finestre in tutte le sessioni |

## Modalità copia

### Entrata e navigazione

| Command | Description |
|---------|-------------|
| `Prefisso [` | Entra in modalità copia |
| `q` | Esci dalla modalità copia |
| `Freccia / hjkl` | Sposta il cursore (modalità vi) |
| `Ctrl-u / Ctrl-d` | Pagina su / pagina giù |
| `g / G` | Salta all'inizio / alla fine |
| `/` | Cerca in avanti |
| `?` | Cerca indietro |
| `n / N` | Corrispondenza di ricerca successiva / precedente |

### Selezione e copia

| Command | Description |
|---------|-------------|
| `Spazio` | Avvia la selezione (modalità vi) |
| `Invio` | Copia la selezione ed esci |
| `Prefisso ]` | Incolla il buffer |
| `v` | Attiva/disattiva la selezione rettangolare (modalità vi) |

*Abilita modalità vi: set -g mode-keys vi*

## Configurazione

### Impostazioni comuni (~/.tmux.conf)

```
set -g mouse on                 # enable mouse
set -g base-index 1             # windows start at 1
set -g renumber-windows on      # renumber on close
set -g default-terminal "tmux-256color"
set -g history-limit 50000
```

### Ricarica configurazione

```
tmux source-file ~/.tmux.conf   # from shell
# or Prefix : then type:
source-file ~/.tmux.conf
```

## Barra di stato

### Opzioni della barra di stato

```
set -g status-position top
set -g status-style "bg=black,fg=white"
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b"
set -g status-interval 5
```

### Variabili di formato

| Command | Description |
|---------|-------------|
| `#S` | Nome della sessione |
| `#I` | Indice della finestra |
| `#W` | Nome della finestra |
| `#P` | Indice del riquadro |
| `#H` | Hostname |
| `#T` | Titolo del riquadro |

## Tasti di scelta rapida

### Binding personalizzati

```
# change prefix to Ctrl-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# vim-style pane navigation
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
```

### Sintassi dei binding

| Command | Description |
|---------|-------------|
| `bind X comando` | Associa Prefisso + X al comando |
| `bind -n M-Sinistra prev` | Associa senza prefisso (Alt-Sinistra) |
| `bind -r H resize-pane -L 5` | Binding ripetibile |
| `unbind X` | Rimuovi un binding |
| `Prefisso ?` | Elenca tutti i tasti di scelta rapida correnti |

## Scripting

### Layout scriptati

```
tmux new-session -d -s dev
tmux send-keys -t dev "vim" Enter
tmux split-window -h -t dev
tmux send-keys -t dev "npm run dev" Enter
tmux attach -t dev
```

### Comandi utili

| Command | Description |
|---------|-------------|
| `tmux send-keys -t sess 'cmd' Enter` | Invia sequenze di tasti a una sessione |
| `tmux capture-pane -p` | Stampa il contenuto del riquadro su stdout |
| `tmux display-message '#S'` | Mostra un messaggio / variabile |
| `tmux set-environment -g VAR val` | Imposta una variabile d'ambiente |
| `tmux list-keys` | Elenca tutti i tasti di scelta rapida |

## Pattern comuni

### ~/.tmux.conf consigliato

```
set -g mouse on
set -g base-index 1
set -g mode-keys vi
set -g status-position top
set -g history-limit 50000
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
```

### Ricette rapide

| Command | Description |
|---------|-------------|
| `Sopravvivere alla disconnessione SSH` | `tmux new -s work` → disconnetti → `tmux attach -t work` |
| `Condividere la sessione` | Entrambi gli utenti `tmux attach -t same` (sola lettura: `-r`) |
| `Salvare lo scrollback` | `tmux capture-pane -S -3000 -p > log.txt` |
| `Chiudere un riquadro bloccato` | Prefisso x, oppure `tmux kill-pane -t %N` |
| `Riordinare le finestre` | `:swap-window -s 3 -t 1` |
