moyen · Durée estimée : 30 min
Maîtriser vi, l'éditeur de texte omniprésent
sur tous les systèmes Unix/Linux depuis 1976. Il est
souvent le seul éditeur disponible sur un serveur minimal,
et il est obligatoire de savoir s'en
servir pour éditer un fichier de configuration.
Sur Alpine et Kali, la version moderne s'appelle
vim (vi improved). Les commandes
de base sont identiques.
Sur Alpine, vi est fourni par BusyBox mais
limité. Pour avoir une vraie version complète :
apk add vim
Vérifie l'installation :
vi --version
vim est installé par défaut.
Le raccourci vi pointe souvent vers
vim.
C'est LA notion à comprendre. Vi fonctionne différemment de tous les éditeurs modernes : il a plusieurs modes, et le clavier fait des choses différentes selon le mode.
Les touches du clavier sont des commandes : déplacer le curseur, supprimer, copier, coller, etc. C'est le mode dans lequel tu arrives en ouvrant vi.
Les touches tapent du texte normalement. Tu y entres
avec i, a, o,
etc. Tu en sors avec Échap.
Tu tapes : depuis le mode normal, puis une
commande comme w (sauvegarder),
q (quitter), wq (sauvegarder
et quitter). Termine par Entrée.
Échap pour revenir
au mode normal.
vi mon_fichier.txt
Si le fichier n'existe pas, vi le crée à la première sauvegarde. Si tu quittes sans sauvegarder, il disparaît.
Ouvrir un fichier à une ligne précise :
vi +25 fichier.txt # ouvre à la ligne 25
Ouvrir plusieurs fichiers :
vi f1.txt f2.txt # naviguer avec :n et :prev
:e autre_fichier.txt depuis vi permet
d'ouvrir un autre fichier sans fermer l'éditeur.
Depuis le mode normal, plusieurs façons :
i → insérer AVANT le curseur
a → insérer APRÈS le curseur (append)
I → insérer au début de la ligne
A → insérer à la fin de la ligne
o → nouvelle ligne EN DESSOUS
O → nouvelle ligne AU-DESSUS
s → remplacer un caractère
S → remplacer toute la ligne
i est le plus utilisé. Retiens-le.
Échap. Appuie plusieurs
fois si tu n'es pas sûr.
Depuis le mode normal, tape : puis une de
ces commandes, terminée par Entrée :
:w → sauvegarder
:w nom.txt → sauvegarder sous un autre nom
:wq → sauvegarder et quitter
:x → sauvegarder et quitter (équivalent)
:q → quitter (échoue si modifs non sauvegardées)
:q! → quitter SANS sauvegarder (forcer)
:e! → recharger le fichier (annuler modifs)
:q! avec le point d'exclamation
abandonne toutes les modifications depuis
la dernière sauvegarde. C'est la sortie de secours quand
tu es bloqué. À utiliser en connaissance de cause.
Échap
→ :q! → Entrée. Ça te sort
toujours.
:wq,
puis rouvre le fichier pour vérifier.
cat fichier.txt doit afficher ton texte.
En mode normal, utilise ces touches (pas les flèches !) :
h → gauche
j → bas
k → haut
l → droite
0 → début de ligne
$ → fin de ligne
w → mot suivant
b → mot précédent
gg → début du fichier
G → fin du fichier
:25 → aller à la ligne 25
Ctrl+d → page suivante
Ctrl+u → page précédente
hjkl est plus rapide une fois habitué.
Sur un vieux serveur, les flèches peuvent ne pas marcher.
gg, G, w,
b.
En mode normal :
x → supprimer le caractère sous le curseur
dd → supprimer la ligne entière
dw → supprimer un mot
d$ → supprimer jusqu'à la fin de la ligne
D → idem que d$
yy → copier la ligne (yank)
yw → copier un mot
y$ → copier jusqu'à la fin de la ligne
p → coller après le curseur
P → coller avant le curseur
u → annuler la dernière action (undo)
Ctrl+r → refaire (redo)
. → répéter la dernière commande
5dd3yy10p
. (point) répète la dernière action.
C'est extrêmement puissant pour les modifications répétitives.
3G puis 3dd.
:wq puis cat doit montrer
7 lignes restantes.
En mode normal :
/mot → chercher "mot" vers le bas
?mot → chercher "mot" vers le haut
n → occurrence suivante
N → occurrence précédente
Remplacement depuis le mode commande :
:%s/ancien/nouveau/g → remplacer partout
:%s/ancien/nouveau/gc → avec confirmation
:s/ancien/nouveau/g → sur la ligne courante
:10,20s/ancien/nouveau/g → lignes 10 à 20
:%s/localhost/127.0.0.1/g remplace toutes
les occurrences de "localhost" par "127.0.0.1" dans le fichier.
:%s/ est l'une des commandes les plus utiles
de vi pour éditer des fichiers de config. %
signifie "tout le fichier".
:%s/toto/titi/g.
cat doit afficher "titi" à la place de "toto".
:set nu → afficher les numéros
:set nonu → masquer
:set ic → recherche insensible à la casse
:set noic → sensible à la casse
:syntax on → coloration syntaxique
Pour rendre ces options permanentes, ajoute-les dans
~/.vimrc :
echo "set nu" >> ~/.vimrc
echo "syntax on" >> ~/.vimrc
:set nu est très pratique pour déboguer un
script ou un fichier de config référencé par numéro de ligne.
:set nu, navigue à la ligne 5 avec
:5, puis reviens au début avec gg.
Un cas d'usage classique : ajouter une entrée DNS manuelle.
vi /etc/hosts
Le fichier ressemble à :
127.0.0.1 localhost
::1 localhost
Pour ajouter une ligne, va à la fin (G),
crée une nouvelle ligne (o), tape :
192.168.1.10 monserveur.local
Puis Échap → :wq → Entrée.
/etc/hosts (droits root requis). Utilise
plutôt un fichier dans ton dossier personnel pour
t'entraîner, comme ~/hosts_test.
/etc/hosts dans ton home
(cp /etc/hosts ~/hosts_test), puis édite-le
avec vi pour ajouter une ligne.
cat ~/hosts_test doit montrer la nouvelle ligne.
OUVRIR
vi fichier.txt → ouvrir/créer
vi +25 fichier.txt → ouvrir à la ligne 25
MODES
i / a / o → entrer en insertion
Échap → revenir au mode normal
: → entrer en mode commande
SAUVEGARDER / QUITTER
:w → sauvegarder
:wq ou :x → sauvegarder et quitter
:q! → quitter sans sauvegarder
NAVIGATION
hjkl → flèches
0 / $ → début / fin de ligne
w / b → mot suivant / précédent
gg / G → début / fin du fichier
:25 → aller à la ligne 25
ÉDITION
x / dd / dw → supprimer
yy / yw → copier
p / P → coller
u / Ctrl+r → annuler / refaire
. → répéter
RECHERCHE
/mot puis n → chercher
:%s/a/b/g → remplacer partout
OPTIONS
:set nu → numéros de ligne
:syntax on → coloration
Échap :q! Entrée
Cette séquence te sort toujours de vi, quoi qu'il arrive.
script.sh avec vi#!/bin/sh
echo "Bonjour $USER"
echo "Aujourd'hui : $(date)"
chmod +x script.sh./script.shset nu visible en commentaire)./script.sh doit afficher ton nom d'utilisateur
et la date du jour.