guides/serveur/linux-essentials/vim-guide-essentiel.md

606 lines
12 KiB
Markdown
Raw Permalink Normal View History

# Guide essentiel Vim
Guide de survie Vim pour l'administration serveur. Apprenez le minimum vital en 15 minutes.
---
## Pourquoi Vim ?
**Vim est installé par défaut** sur 99% des serveurs Linux. Quand vous vous connectez à un serveur distant :
- **nano** n'est pas toujours installé
- **vim/vi** est TOUJOURS là
- C'est l'éditeur standard Unix depuis 1976
**Avantages :**
- Ultra-rapide (pas d'interface graphique)
- Puissant (édition avec le clavier uniquement)
- Universel (même syntaxe sur tous les systèmes)
---
## Les 3 modes de Vim
Vim fonctionne avec **3 modes distincts** (c'est ça qui déroute au début) :
### 1. Mode Normal (par défaut)
- **Navigation** dans le fichier
- **Commandes** (copier, coller, supprimer)
- **Touche `Esc`** pour revenir en mode Normal
### 2. Mode Insertion
- **Éditer** du texte (comme un éditeur classique)
- **Touche `i`** pour entrer en mode Insertion
- **Touche `Esc`** pour revenir en mode Normal
### 3. Mode Commande
- **Sauvegarder**, quitter, chercher/remplacer
- **Touche `:`** pour entrer en mode Commande
- Taper la commande puis **Entrée**
---
## Premiers pas : Ouvrir et quitter
### Ouvrir un fichier
```bash
# Ouvrir un fichier existant
vim /etc/ssh/sshd_config
# Créer un nouveau fichier
vim nouveau-fichier.txt
# Ouvrir directement à la ligne 42
vim +42 fichier.txt
# Ouvrir avec sudo (fichiers système)
sudo vim /etc/apache2/apache2.conf
```
### Quitter Vim
**Mode Normal** → Tapez `:` puis :
```vim
:q " Quitter (si pas de modifications)
:q! " Quitter SANS sauvegarder (force)
:w " Sauvegarder (write)
:wq " Sauvegarder ET quitter
:x " Sauvegarder ET quitter (raccourci)
ZZ " Sauvegarder ET quitter (sans :)
```
**🆘 Vous êtes bloqué ?**
```
Esc Esc Esc :q! Entrée
```
---
## Éditer du texte
### Entrer en mode Insertion
**Depuis le mode Normal :**
```vim
i " Insert : insérer AVANT le curseur
a " Append : insérer APRÈS le curseur
o " Open : créer une nouvelle ligne EN DESSOUS
O " Open : créer une nouvelle ligne AU DESSUS
I " Insérer au DÉBUT de la ligne
A " Insérer à la FIN de la ligne
```
**💡 Astuce :** `i` et `a` sont les plus utilisés (90% du temps)
### Modifier du texte
**En mode Normal :**
```vim
x " Supprimer le caractère sous le curseur
dd " Supprimer toute la ligne
dw " Supprimer un mot (delete word)
d$ " Supprimer jusqu'à la fin de la ligne
D " Supprimer jusqu'à la fin de la ligne (raccourci)
u " Annuler (undo)
Ctrl+r " Refaire (redo)
yy " Copier la ligne (yank)
p " Coller après le curseur (paste)
P " Coller avant le curseur
```
### Remplacer du texte
```vim
r " Remplacer UN caractère (puis taper le nouveau)
cw " Remplacer un mot (change word)
cc " Remplacer toute la ligne (change)
C " Remplacer jusqu'à la fin de la ligne
```
---
## Naviguer dans le fichier
### Déplacements de base
**Mode Normal :**
```vim
" Flèches directionnelles (fonctionnent aussi)
h " Gauche ←
j " Bas ↓
k " Haut ↑
l " Droite →
" Déplacements par mot
w " Mot suivant (word)
b " Mot précédent (back)
e " Fin du mot (end)
" Déplacements dans la ligne
0 " Début de la ligne
$ " Fin de la ligne
^ " Premier caractère non-blanc de la ligne
" Déplacements dans le fichier
gg " Début du fichier
G " Fin du fichier
42G " Aller à la ligne 42
:42 " Aller à la ligne 42 (alternative)
```
### Défilement
```vim
Ctrl+d " Défiler d'une demi-page vers le bas (down)
Ctrl+u " Défiler d'une demi-page vers le haut (up)
Ctrl+f " Défiler d'une page vers le bas (forward)
Ctrl+b " Défiler d'une page vers le haut (back)
```
---
## Chercher et remplacer
### Chercher
**Mode Normal :**
```vim
/motif " Chercher "motif" vers le bas
?motif " Chercher "motif" vers le haut
n " Résultat suivant (next)
N " Résultat précédent
* " Chercher le mot sous le curseur (vers le bas)
# " Chercher le mot sous le curseur (vers le haut)
```
**💡 Exemple :** Chercher "PasswordAuthentication" dans sshd_config
```vim
/PasswordAuthentication
" Appuyez sur 'n' pour voir les occurrences suivantes
```
### Remplacer
**Mode Commande** (taper `:`) :
```vim
" Format général : :[plage]s/ancien/nouveau/[options]
:s/ancien/nouveau/ " Remplacer sur la ligne courante (1ère occurrence)
:s/ancien/nouveau/g " Remplacer sur la ligne courante (toutes)
:%s/ancien/nouveau/ " Remplacer dans tout le fichier (1ère par ligne)
:%s/ancien/nouveau/g " Remplacer dans tout le fichier (toutes)
:%s/ancien/nouveau/gc " Avec confirmation (c = confirm)
:10,20s/ancien/nouveau/g " Remplacer des lignes 10 à 20
```
**💡 Exemples pratiques :**
```vim
" Remplacer tous les "no" par "yes"
:%s/no/yes/g
" Commenter toutes les lignes (ajouter # au début)
:%s/^/#/
" Décommenter (supprimer # au début)
:%s/^#//
" Remplacer avec confirmation
:%s/PermitRootLogin yes/PermitRootLogin no/gc
```
---
## Cas d'usage : Administration serveur
### 1. Éditer sshd_config
```bash
sudo vim /etc/ssh/sshd_config
```
**Workflow typique :**
1. Chercher le paramètre :
```vim
/PermitRootLogin
```
2. Aller en mode Insertion :
```vim
i
```
3. Modifier la valeur :
```
PermitRootLogin no
```
4. Sauvegarder et quitter :
```vim
Esc :wq
```
### 2. Éditer un VirtualHost Apache
```bash
sudo vim /etc/apache2/sites-available/monsite.conf
```
**Ajouter une ligne à la fin :**
```vim
G " Aller à la fin du fichier
o " Créer une nouvelle ligne
" Taper votre texte
Esc :wq " Sauvegarder et quitter
```
### 3. Décommenter plusieurs lignes
**Exemple :** Décommenter 5 lignes consécutives
```vim
" Méthode 1 : Chercher/remplacer
:10,15s/^#// " Décommenter lignes 10 à 15
" Méthode 2 : Visual block (avancé)
Ctrl+v " Mode visuel block
jjjj " Sélectionner 5 lignes vers le bas
x " Supprimer les # sélectionnés
```
### 4. Copier/coller une configuration
**Dupliquer un bloc de configuration :**
```vim
" Se placer sur la première ligne
V " Mode visuel ligne (Visual)
jjjj " Sélectionner 5 lignes
y " Copier (yank)
p " Coller après
```
---
## Configuration utile de Vim
### Créer un .vimrc minimal
```bash
vim ~/.vimrc
```
**Configuration recommandée :**
```vim
" Activer la numérotation des lignes
set number
" Activer la coloration syntaxique
syntax on
" Indentation automatique
set autoindent
set smartindent
" Taille des tabulations (4 espaces)
set tabstop=4
set shiftwidth=4
set expandtab
" Afficher la position du curseur
set ruler
" Recherche intelligente (insensible à la casse)
set ignorecase
set smartcase
" Highlighting des résultats de recherche
set hlsearch
set incsearch
" Désactiver le swap (fichiers .swp)
set noswapfile
" Sauvegarder l'historique des annulations
set undofile
set undodir=~/.vim/undodir
```
**Appliquer immédiatement :**
```bash
mkdir -p ~/.vim/undodir
```
---
## Commandes avancées utiles
### Indentation
```vim
>> " Indenter la ligne (vers la droite)
<< " Désindenter (vers la gauche)
" Indenter un bloc
V " Mode visuel
jjjj " Sélectionner des lignes
> " Indenter
```
### Nombres et répétitions
**Format :** `[nombre][commande]`
```vim
3dd " Supprimer 3 lignes
5yy " Copier 5 lignes
10j " Descendre de 10 lignes
3w " Avancer de 3 mots
. " Répéter la dernière commande
```
### Buffers (fichiers multiples)
```vim
:e fichier2.txt " Ouvrir un autre fichier
:bn " Buffer suivant (next)
:bp " Buffer précédent (previous)
:bd " Fermer le buffer courant
:ls " Lister tous les buffers ouverts
```
### Split (fenêtres)
```vim
:sp fichier.txt " Split horizontal
:vsp fichier.txt " Split vertical
Ctrl+w w " Naviguer entre les splits
Ctrl+w q " Fermer le split courant
Ctrl+w = " Égaliser la taille des splits
```
---
## Aide et ressources
### Aide intégrée
```vim
:help " Aide générale
:help dd " Aide sur une commande spécifique
:help modes " Aide sur les modes
```
### Tutoriel interactif
```bash
# Depuis votre terminal
vimtutor # Tutoriel interactif (30 min)
```
---
## Cheat Sheet : L'essentiel
### Ouvrir/Fermer
```vim
vim fichier " Ouvrir
:w " Sauvegarder
:wq ou :x " Sauvegarder et quitter
:q! " Quitter sans sauvegarder
```
### Modes
```vim
Esc " Mode Normal
i " Mode Insertion (avant curseur)
a " Mode Insertion (après curseur)
: " Mode Commande
```
### Édition
```vim
dd " Supprimer la ligne
yy " Copier la ligne
p " Coller
u " Annuler
Ctrl+r " Refaire
```
### Navigation
```vim
gg " Début du fichier
G " Fin du fichier
0 " Début de la ligne
$ " Fin de la ligne
:42 " Aller ligne 42
```
### Recherche
```vim
/motif " Chercher
n " Suivant
:%s/old/new/g " Remplacer tout
```
---
## Erreurs courantes et solutions
### "E45: 'readonly' option is set"
**Cause :** Fichier en lecture seule (souvent fichiers système)
**Solution :**
```vim
:w !sudo tee % " Sauvegarder avec sudo
" Ou quitter et réouvrir avec sudo
:q!
sudo vim /etc/fichier
```
### "E37: No write since last change"
**Cause :** Modifications non sauvegardées
**Solution :**
```vim
:w " Sauvegarder
" Ou forcer à quitter
:q!
```
### "Found a swap file"
**Cause :** Vim a crashé ou fichier ouvert ailleurs
**Solution :**
```vim
" Taper 'r' pour récupérer le fichier
" Ou 'd' pour supprimer le swap file
" Puis supprimer manuellement :
rm .fichier.swp
```
### Bloqué en mode Insertion
**Solution :**
```
Appuyez sur Esc plusieurs fois
```
### Impossible de quitter
**Solution :**
```vim
Esc Esc Esc
:q!
```
---
## Mémo pour débuter
**1. Ouvrir un fichier :**
```bash
vim fichier.txt
```
**2. Entrer en mode Insertion :**
```
Appuyez sur 'i'
```
**3. Modifier le texte :**
```
Tapez normalement
```
**4. Revenir en mode Normal :**
```
Appuyez sur Esc
```
**5. Sauvegarder et quitter :**
```
:wq puis Entrée
```
---
## Progression recommandée
### Semaine 1 : Bases
- Ouvrir/fermer des fichiers
- Modes Normal et Insertion
- Sauvegarder avec `:w` et `:wq`
- Navigation de base (hjkl, gg, G)
### Semaine 2 : Édition
- Supprimer avec `dd`, `x`
- Copier/coller avec `yy`, `p`
- Annuler/refaire avec `u`, `Ctrl+r`
- Chercher avec `/`
### Semaine 3 : Efficacité
- Remplacer avec `:s///`
- Mouvements rapides (`w`, `b`, `$`, `0`)
- Répétitions avec nombres (`3dd`, `5yy`)
- Visual mode avec `V`
### Mois 2+ : Maîtrise
- Configuration `.vimrc`
- Buffers et splits
- Macros
- Plugins
---
## Pourquoi persévérer ?
**Après 2 semaines :** Vous éditez aussi vite qu'avec nano
**Après 1 mois :** Vous éditez plus vite qu'avec un éditeur graphique
**Après 3 mois :** Vous ne pouvez plus vous en passer
**Vim est un investissement :** Difficile au début, incroyablement efficace après.
---
## Ressources complémentaires
- **vimtutor** : Tutoriel interactif inclus avec Vim (30 min)
- **[Vim Adventures](https://vim-adventures.com/)** : Apprendre Vim en jouant
- **[OpenVim](https://www.openvim.com/)** : Tutoriel interactif en ligne
- **`:help` dans Vim** : Documentation complète intégrée
**Cheat sheets :**
- [Vim Cheat Sheet (PDF)](https://vim.rtorr.com/)
- [Devhints Vim](https://devhints.io/vim)
---
## TL;DR : Minimum vital
```vim
vim fichier # Ouvrir
i # Éditer
Esc # Arrêter d'éditer
:wq # Sauvegarder et quitter
:q! # Quitter sans sauvegarder (si erreur)
/chercher # Chercher
dd # Supprimer ligne
u # Annuler
```
**C'est tout ce dont vous avez besoin pour 80% des cas d'administration serveur !**