# 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 !**