# Référence rapide Vim

*Modes, navigation, édition, recherche, macros, tampons*

> Source: Vim Documentation (vimdoc.sourceforge.net) · MIT

## Modes

### Changer de mode

| Command | Description |
|---------|-------------|
| `i` | Mode insertion (avant le curseur) |
| `a` | Mode insertion (après le curseur) |
| `o` | Insérer une ligne en dessous et passer en insertion |
| `O` | Insérer une ligne au-dessus et passer en insertion |
| `v` | Mode visuel (caractère) |
| `V` | Mode visuel (ligne) |
| `Ctrl+v` | Mode visuel bloc |
| `:` | Mode ligne de commande |
| `R` | Mode remplacement |
| `Esc` | Retour au mode normal |

## Navigation

### Déplacement caractère & ligne

| Command | Description |
|---------|-------------|
| `h j k l` | Gauche, bas, haut, droite |
| `0 / ^` | Début de ligne / premier caractère non vide |
| `$` | Fin de ligne |
| `w / W` | Mot suivant / MOT |
| `b / B` | Mot précédent / MOT |
| `e / E` | Fin du mot / MOT |
| `f{c} / F{c}` | Trouver un caractère en avant / en arrière |
| `t{c} / T{c}` | Jusqu'au caractère en avant / en arrière |

### Déplacement écran & fichier

| Command | Description |
|---------|-------------|
| `gg / G` | Aller à la première / dernière ligne |
| `:{n}` | Aller à la ligne n |
| `Ctrl+d / Ctrl+u` | Demi-page vers le bas / haut |
| `Ctrl+f / Ctrl+b` | Page entière vers le bas / haut |
| `H / M / L` | Haut / milieu / bas de l'écran |
| `%` | Sauter à la parenthèse correspondante |

## Édition

### Insérer & Ajouter

| Command | Description |
|---------|-------------|
| `I` | Insérer au début de la ligne |
| `A` | Ajouter à la fin de la ligne |
| `ea` | Ajouter à la fin du mot |
| `gi` | Insérer à la dernière position d'insertion |

### Supprimer & Modifier

| Command | Description |
|---------|-------------|
| `x / X` | Supprimer le caractère sous / avant le curseur |
| `dd` | Supprimer la ligne |
| `dw` | Supprimer le mot |
| `d$ / D` | Supprimer jusqu'à la fin de ligne |
| `cc / S` | Modifier la ligne entière |
| `cw` | Modifier le mot |
| `c$ / C` | Modifier jusqu'à la fin de ligne |
| `ci" / ci(` | Modifier le contenu des guillemets / parenthèses |

### Copier & Coller

| Command | Description |
|---------|-------------|
| `yy` | Copier (yank) la ligne |
| `yw` | Copier le mot |
| `y$` | Copier jusqu'à la fin de ligne |
| `p / P` | Coller après / avant le curseur |
| `J` | Joindre la ligne suivante à la ligne courante |

### Annuler & Répéter

| Command | Description |
|---------|-------------|
| `u` | Annuler |
| `Ctrl+r` | Rétablir |
| `.` | Répéter la dernière commande |

## Rechercher & Remplacer

### Recherche

| Command | Description |
|---------|-------------|
| `/pattern` | Rechercher en avant |
| `?pattern` | Rechercher en arrière |
| `n / N` | Correspondance suivante / précédente |
| `*` | Rechercher le mot sous le curseur (en avant) |
| `#` | Rechercher le mot sous le curseur (en arrière) |

### Substitution

```
:s/old/new/       " replace first on line
:s/old/new/g      " replace all on line
:%s/old/new/g     " replace all in file
:%s/old/new/gc    " replace all, confirm each
```

## Mode visuel

### Sélection

| Command | Description |
|---------|-------------|
| `v` | Démarrer une sélection caractère |
| `V` | Démarrer une sélection ligne |
| `Ctrl+v` | Démarrer une sélection bloc |
| `o` | Se déplacer à l'autre extrémité de la sélection |
| `gv` | Resélectionner la dernière sélection visuelle |

### Actions sur la sélection

| Command | Description |
|---------|-------------|
| `d` | Supprimer la sélection |
| `y` | Copier la sélection |
| `c` | Modifier la sélection |
| `>` | Indenter la sélection |
| `<` | Désindenter la sélection |
| `~` | Basculer la casse |
| `U / u` | Mettre en MAJUSCULES / minuscules la sélection |

## Tampons & Fenêtres

### Tampons

| Command | Description |
|---------|-------------|
| `:ls` | Lister les tampons ouverts |
| `:bn / :bp` | Tampon suivant / précédent |
| `:b{n}` | Aller au tampon n |
| `:bd` | Fermer le tampon courant |
| `:e file` | Ouvrir un fichier dans un nouveau tampon |

### Fenêtres

| Command | Description |
|---------|-------------|
| `:sp file` | Division horizontale |
| `:vsp file` | Division verticale |
| `Ctrl+w h/j/k/l` | Naviguer vers une fenêtre |
| `Ctrl+w =` | Égaliser les tailles des fenêtres |
| `Ctrl+w q` | Fermer la fenêtre |

### Onglets

| Command | Description |
|---------|-------------|
| `:tabnew file` | Ouvrir un fichier dans un nouvel onglet |
| `gt / gT` | Onglet suivant / précédent |
| `:tabclose` | Fermer l'onglet courant |

## Registres

### Utiliser les registres

| Command | Description |
|---------|-------------|
| `"ay` | Copier dans le registre a |
| `"ap` | Coller depuis le registre a |
| `"Ay` | Ajouter à la copie dans le registre a |
| `:reg` | Afficher tous les registres |

### Registres spéciaux

| Command | Description |
|---------|-------------|
| `""` | Sans nom (dernier supprimé/copié) |
| `"0` | Dernière copie |
| `"+` | Presse-papiers système |
| `"/"` | Dernier motif de recherche |
| `".` | Dernier texte inséré |
| `"_` | Trou noir (ignorer) |

## Macros

### Enregistrer & Lire

| Command | Description |
|---------|-------------|
| `q{a}` | Démarrer l'enregistrement d'une macro dans le registre a |
| `q` | Arrêter l'enregistrement |
| `@{a}` | Lire la macro du registre a |
| `@@` | Rejouer la dernière macro |
| `5@a` | Lire la macro a 5 fois |

### Exemple de macro

```
qa        " start recording into a
I//       " insert // at line start
Esc j     " return to normal, move down
q         " stop recording
10@a      " comment next 10 lines
```

## Paramètres

### Options courantes

```
:set number         " show line numbers
:set relativenumber  " relative line numbers
:set tabstop=4      " tab width
:set expandtab      " spaces instead of tabs
:set ignorecase     " case-insensitive search
```

### Affichage & Comportement

```
:set wrap / nowrap   " toggle line wrapping
:set hlsearch        " highlight search matches
:set incsearch       " incremental search
:set cursorline      " highlight current line
:syntax on           " enable syntax highlighting
```

## Opérations sur les fichiers

### Enregistrer & Quitter

| Command | Description |
|---------|-------------|
| `:w` | Enregistrer |
| `:w file` | Enregistrer sous |
| `:q` | Quitter (échoue si non sauvegardé) |
| `:q!` | Quitter sans enregistrer |
| `:wq / :x / ZZ` | Enregistrer et quitter |
| `:wa` | Enregistrer tous les tampons |
| `:qa` | Quitter tous les tampons |

### Infos fichier & Commandes externes

| Command | Description |
|---------|-------------|
| `Ctrl+g` | Afficher les infos du fichier |
| `:!cmd` | Exécuter une commande shell |
| `:r !cmd` | Insérer la sortie d'une commande |
| `:r file` | Insérer le contenu d'un fichier |

## Objets texte

### Objets intérieurs & Environnants

| Command | Description |
|---------|-------------|
| `iw / aw` | Intérieur / autour du mot |
| `is / as` | Intérieur / autour de la phrase |
| `ip / ap` | Intérieur / autour du paragraphe |
| `i" / a"` | Intérieur / autour des guillemets doubles |
| `i' / a'` | Intérieur / autour des guillemets simples |
| `i( / a(` | Intérieur / autour des parenthèses |
| `i{ / a{` | Intérieur / autour des accolades |
| `it / at` | Intérieur / autour d'une balise HTML |

### Combinaisons courantes

```
ciw     " change inner word
di"     " delete inside quotes
ya{     " yank around braces
vip     " select inner paragraph
```

## Marques & Sauts

### Marques

| Command | Description |
|---------|-------------|
| `m{a}` | Poser la marque a à la position du curseur |
| `'a` | Sauter à la ligne de la marque a |
| ``a` | Sauter à la position exacte de la marque a |
| `:marks` | Lister toutes les marques |

### Liste des sauts

| Command | Description |
|---------|-------------|
| `Ctrl+o` | Sauter à la position précédente |
| `Ctrl+i` | Sauter à la position suivante |
| `:jumps` | Afficher la liste des sauts |
| `''` | Sauter à la dernière position de saut |
