# Tmux

Tmux permet de gérer plusieurs terminaux dans une seule fenêtre et de garder vos sessions actives même après déconnexion.

## Sessions

| Commande | Description |
|----------|-------------|
| `tmux` | Démarrer une nouvelle session |
| `tmux new -s nom` | Créer une session nommée |
| `tmux ls` | Lister les sessions |
| `tmux attach -t nom` | Se rattacher à une session |
| `tmux attach` | Se rattacher à la dernière session |
| `tmux kill-session -t nom` | Tuer une session |
| `tmux switch -t nom` | Changer de session |
| `tmux rename-session -t ancien nouveau` | Renommer une session |

## Raccourcis clavier (Préfixe par défaut : `Ctrl+b`)

### Sessions
| Raccourci | Description |
|-----------|-------------|
| `Préfixe + d` | Détacher de la session |
| `Préfixe + s` | Lister et changer de session |
| `Préfixe + $` | Renommer la session courante |
| `Préfixe + (` | Session précédente |
| `Préfixe + )` | Session suivante |

### Fenêtres (Windows)
| Raccourci | Description |
|-----------|-------------|
| `Préfixe + c` | Créer une nouvelle fenêtre |
| `Préfixe + ,` | Renommer la fenêtre courante |
| `Préfixe + &` | Fermer la fenêtre courante |
| `Préfixe + w` | Lister les fenêtres |
| `Préfixe + n` | Fenêtre suivante |
| `Préfixe + p` | Fenêtre précédente |
| `Préfixe + numéro` | Aller à la fenêtre numéro X |
| `Préfixe + l` | Dernière fenêtre active |

### Panneaux (Panes)
| Raccourci | Description |
|-----------|-------------|
| `Préfixe + %` | Diviser verticalement |
| `Préfixe + "` | Diviser horizontalement |
| `Préfixe + x` | Fermer le panneau courant |
| `Préfixe + o` | Passer au panneau suivant |
| `Préfixe + ;` | Basculer vers le dernier panneau |
| `Préfixe + flèches` | Naviguer entre les panneaux |
| `Préfixe + Ctrl+flèches` | Redimensionner le panneau |
| `Préfixe + Alt+flèches` | Redimensionner (par pas de 5) |
| `Préfixe + z` | Zoom/dézoom sur le panneau |
| `Préfixe + !` | Convertir le panneau en fenêtre |
| `Préfixe + {` | Déplacer le panneau à gauche |
| `Préfixe + }` | Déplacer le panneau à droite |
| `Préfixe + Espace` | Changer la disposition |
| `Préfixe + q` | Afficher les numéros de panneaux |

### Mode Copie
| Raccourci | Description |
|-----------|-------------|
| `Préfixe + [` | Entrer en mode copie |
| `Espace` | Commencer la sélection |
| `Entrée` | Copier la sélection |
| `Préfixe + ]` | Coller |
| `q` | Quitter le mode copie |

### Autres
| Raccourci | Description |
|-----------|-------------|
| `Préfixe + ?` | Lister tous les raccourcis |
| `Préfixe + t` | Afficher l'heure |
| `Préfixe + :` | Entrer en mode commande |

## Configuration (~/.tmux.conf)

```bash
# Changer le préfixe
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# Recharger la config
bind r source-file ~/.tmux.conf \; display "Config rechargée!"

# Navigation vim-style
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Splits plus intuitifs
bind | split-window -h
bind - split-window -v

# Activer la souris
set -g mouse on

# Historique
set -g history-limit 10000

# Numérotation à partir de 1
set -g base-index 1
setw -g pane-base-index 1

# Couleurs
set -g default-terminal "screen-256color"
```

## Commandes utiles en mode commande

| Commande | Description |
|----------|-------------|
| `:new -s nom` | Nouvelle session |
| `:kill-session` | Tuer la session courante |
| `:resize-pane -D 5` | Redimensionner vers le bas |
| `:resize-pane -U 5` | Redimensionner vers le haut |
| `:resize-pane -L 5` | Redimensionner vers la gauche |
| `:resize-pane -R 5` | Redimensionner vers la droite |
| `:setw synchronize-panes on` | Synchroniser les panneaux |
| `:setw synchronize-panes off` | Désynchroniser les panneaux |

## Astuces

- **Copier vers le presse-papier système** : Installer `xclip` puis configurer
- **Session persistante** : tmux garde les sessions même après déconnexion
- **Workflow multiple serveurs** : Créer une session par serveur
- **Scripts de démarrage** : Automatiser la création de layouts complexes