Ouvrir, modifier, enregistrer et quitter un fichier avec Vim sans paniquer, puis aller plus loin : se déplacer vite, copier/coller, rechercher-remplacer (même syntaxe que sed), configurer ~/.vimrc.
Le cours de Thierry utilise Vim, mais pour éditer un fichier de config au quotidien, nano est plus simple. Vim reste indispensable à connaître : sur beaucoup de serveurs et de VM minimales, vi est le seul éditeur installé.
1. C’est quoi Vim ?
Nom
Ce que c’est
vi
L’éditeur historique d’UNIX (Bill Joy, 1976). Présent sur quasiment tous les systèmes.
vim
Vi IMproved (Bram Moolenaar, 1988, sur Amiga). La version moderne de vi.
vim-tiny
Version minimale de Vim installée par défaut sur Debian/Ubuntu (pas de coloration, comportement proche du vieux vi).
nvim
Neovim : un « fork » moderne de Vim, mêmes touches, config à un autre endroit.
Sur ton Pop!_OS, vim lance en fait Neovim
Vérifié sur ton poste : /usr/bin/vim et /usr/bin/vi pointent vers nvim (Neovim 0.9.5). Les touches sont identiques, mais Neovim ne lit pas~/.vimrc → ta config (set nu, syntax on, colo koehler) n’est pas appliquée. Solution en partie 7.
readlink -f /usr/bin/vim # affiche /usr/bin/nvim → c'est Neovim
2. La seule idée à comprendre : les modes
Dans Vim, le clavier ne tape pas forcément du texte. Selon le mode, une touche est soit une lettre, soit un ordre (d = supprimer, y = copier…).
flowchart LR
N["Mode NORMAL<br/>(on se déplace,<br/>on donne des ordres)"] -->|"i, a, o"| I["Mode INSERTION<br/>(on tape du texte)"]
I -->|"Échap"| N
N -->|"v, V, Ctrl+v"| V["Mode VISUEL<br/>(on sélectionne)"]
V -->|"Échap"| N
N -->|"deux-points :"| C["Ligne de COMMANDE<br/>(:w :q :%s...)"]
C -->|"Entrée ou Échap"| N
Mode
Comment on y entre
Ce qu’on voit en bas
Sert à
Normal
Échap (au démarrage, on y est déjà)
rien
se déplacer, couper, copier, coller
Insertion
i, a, o…
-- INSERT -- / -- INSERTION --
taper du texte
Visuel
v, V, Ctrl+v
-- VISUAL --
sélectionner un morceau
Commande
:
: et le curseur en bas
enregistrer, quitter, remplacer…
Règle d'or
Perdu ? Appuie 2 fois sur Échap → tu es en mode Normal, à coup sûr. Ensuite seulement, tape ta commande.
3. Le kit de survie (à savoir par cœur)
vim fichier.txt # ouvrir (ou créer) un fichiersudo vim /etc/hosts # fichier système → avec sudo (mieux : sudoedit, voir partie 8)vim +25 script.sh # ouvrir directement à la ligne 25
1. vim fichier.txt → tu es en mode NORMAL
2. i → mode INSERTION, tu tapes ton texte
3. Échap → retour en mode NORMAL
4. :wq puis Entrée → enregistrer et quitter
Commande (mode Normal)
Effet
:w
Enregistrer (write)
:q
Quitter (refuse s’il y a des modifs non enregistrées)
:wq · :x · ZZ
Enregistrer et quitter
:q!
Quitter sans enregistrer (on jette les modifs)
:w nouveau.txt
Enregistrer sous un autre nom
:e autre.txt
Ouvrir un autre fichier
4. Entrer en mode insertion
Touche
Où on commence à écrire
i
avant le curseur (insert)
a
après le curseur (append)
I
au début de la ligne
A
à la fin de la ligne
o
nouvelle ligne en dessous
O
nouvelle ligne au-dessus
5. Se déplacer (mode Normal)
k ↑
h ← → l (les flèches marchent aussi)
j ↓
Touche
Déplacement
hjkl
gauche, bas, haut, droite
w / b / e
mot suivant / mot précédent / fin du mot
0 / ^ / $
début de ligne / 1er caractère non vide / fin de ligne
gg / G
début / fin du fichier
160G ou :160
aller à la ligne 160
Ctrl+d / Ctrl+u
descendre / monter d’une demi-page
%
sauter à la parenthèse/accolade correspondante (pratique dans un script)
Les nombres multiplient les commandes
5j = descendre de 5 lignes · 3dd = couper 3 lignes · 2w = avancer de 2 mots.
6. Modifier le texte (mode Normal)
6.1 Couper, copier, coller
Dans Vim, « supprimer » = couper : ce qui est supprimé peut être recollé avec p.
Touche
Effet
x
supprimer le caractère sous le curseur
dd
couper la ligne
dw
couper jusqu’à la fin du mot
D (= d$)
couper jusqu’à la fin de la ligne
yy
copier la ligne (yank)
yw
copier un mot
p / P
coller après / avant le curseur
r + lettre
remplacer un caractère
cw
changer le mot (le supprime et passe en insertion)
cc
changer toute la ligne
J
coller la ligne suivante au bout de la ligne actuelle
>> / <<
indenter / désindenter la ligne
6.2 Annuler, refaire, répéter
Touche
Effet
u
annuler (undo)
Ctrl+r
refaire (redo)
.
répéter la dernière modification (super pratique)
6.3 Le mode Visuel (sélectionner)
Touche
Sélection
v
caractère par caractère
V
lignes entières
Ctrl+v
bloc (colonne)
Puis : y copier · d couper · > / < indenter · : lancer une commande sur la sélection.
Commenter 5 lignes d'un script Bash d'un coup
Ctrl+v → 4j (sélectionne 5 lignes en colonne) → I (i majuscule) → tape # → Échap. Le # apparaît sur les 5 lignes.
7. Configurer ~/.vimrc (et Neovim)
7.1 Une bonne config de départ
Ton ~/.vimrc actuel contient déjà set nu, syntax on, colo koehler. Version enrichie :
" ~/.vimrc — les commentaires commencent par un guillemetset number " numéros de ligne (= set nu)syntax on " coloration syntaxiquecolorscheme koehler " thème sombre (= colo koehler)set mouse=a " la souris marche (clic, molette, sélection)set hlsearch " surligne les résultats de rechercheset incsearch " cherche pendant qu'on tapeset ignorecase " recherche sans tenir compte des majuscules...set smartcase " ...sauf si on tape une majusculeset autoindent " garde l'indentation de la ligne précédenteset tabstop=4 " une tabulation = 4 espaces à l'affichageset shiftwidth=4 " >> et << décalent de 4set expandtab " Tab insère des espaces (indispensable en Python/YAML)set cursorline " surligne la ligne du curseur
7.2 Faire lire ce fichier par Neovim (ton cas sur Pop!_OS)
Neovim lit ~/.config/nvim/init.vim, pas ~/.vimrc. Le plus simple : lui dire de charger ton .vimrc.
mkdir -p ~/.config/nvim # crée le dossier de config de Neovimecho 'source ~/.vimrc' > ~/.config/nvim/init.vim # init.vim charge ton .vimrc
Tu veux garder Neovim et le configurer vraiment (Lua, plugins, LSP) ?
Tout est dans O12 - Neovim (attention : la version apt de Pop!_OS, 0.9.5, est trop ancienne pour cette config).
Autre solution : installer le « vrai » Vim
sudo apt install vim (Pop!_OS) · sudo pacman -S vim (Arch). Ensuite sudo update-alternatives --config vim permet de choisir entre Vim et Neovim.
8. Rechercher et remplacer
8.1 Rechercher
Commande
Effet
/motif puis Entrée
chercher vers le bas
?motif puis Entrée
chercher vers le haut
n / N
résultat suivant / précédent
*
chercher le mot sous le curseur
:noh
enlever le surlignage
8.2 Remplacer : :s - même syntaxe que sed
:%s/ancien/nouveau/gc
│ │ │ │ ││
│ │ │ │ │└─ c = confirmer chaque remplacement (y/n)
│ │ │ │ └── g = toutes les occurrences de la ligne
│ │ │ └──────── texte de remplacement
│ │ └─────────────── texte (ou regex) cherché
│ └────────────────── s = substitution
└──────────────────── % = tout le fichier
Commande
Effet
:s/a/b/
1re occurrence de la ligne actuelle
:s/a/b/g
toutes les occurrences de la ligne
:%s/a/b/g
tout le fichier
:%s/a/b/gc
tout le fichier, avec confirmation
:%s/a/b/gi
tout le fichier, sans tenir compte de la casse
:10,20s/a/b/g
seulement les lignes 10 à 20
:%s#/var/www/html#/var/www/wordpress#g
séparateur # quand le texte contient des /
Lien avec le TP déploiement
C’est exactement la logique du sed -i 's#...#...#' du TP : le cours montre le changement de séparateur dans la partie Vim, et on l’a réutilisé dans sed → TP deploiement - explications. Regex détaillées : Récap - administration Linux shell.
9. Utile en admin système
Commande
Effet
:!ls -l
lancer une commande shell sans quitter Vim
:r fichier
insérer le contenu d’un fichier sous le curseur
:r !date
insérer le résultat d’une commande
:set paste puis :set nopaste
coller du texte venant d’ailleurs sans casser l’indentation (Vim ; inutile dans Neovim)
:sp fichier / :vs fichier
découper l’écran (horizontal / vertical) - Ctrl+w w pour changer
:set nu!
afficher / cacher les numéros de ligne
Éditer un fichier système proprement : sudoedit
sudoedit /etc/ssh/sshd_config # = sudo -e : copie le fichier, tu l'édites avec TON éditeur et TA configSUDO_EDITOR=vim sudoedit /etc/hosts # forcer Vim pour cette fois
L'astuce :w !sudo tee % ne marche pas dans Neovim
Elle sert à enregistrer un fichier ouvert sans sudo. Dans Neovim, sudo ne peut pas demander le mot de passe → échec. Réflexe : :q!, puis rouvrir avec sudoedit.