Chapitre 5 : l'éditeur VI
Introduction
L’éditeur Unix par défaut se nomme VI (prononcez “vi aïe”). S’il n’est pas des plus ergonomiques par rapport à des éditeurs en mode graphique, il a l’avantage d’être disponible et d’utiliser la même syntaxe de base sur tous les Unix. Chaque Unix propose généralement une syntaxe étendue au-delà de la syntaxe de base. Pour en connaître les détails : man vi.
vi [options] Fichier [Fichier2 ...]
Trois modes de fonctionnement :
- mode commande : les saisies représentent des commandes. On y accède en appuyant sur ESC.
- mode saisie : saisie de texte classique
- mode ligne de commande « à la ex » :utilisation de commandes spéciales saisies et se terminant par Entrée. Accès pas la touche « : ».
Commandes de saisie
En mode commande
| Commande | Action |
|---|---|
| a | Ajout de texte derrière le caractère actif |
| A | Ajout de texte en fin de ligne |
| i | Insertion de texte devant le caractère actif |
| I | Insertion de texte en début de ligne |
| o | Insertion d’une nouvelle ligne sous la ligne active |
| O | Insertion d’une nouvelle ligne au-dessus de la ligne active |
Quitter
- La commande ZZ quitte et sauve le fichier
- : q ! quitte sans sauver
- : q quitte si le fichier n’a pas été modifié
- : w sauve le fichier
- : w q ou x sauve et quitte
Déplacement en mode commande
| Commande | Action |
|---|---|
| h | Vers la gauche |
| l | Vers la droite |
| k | Vers le haut |
| j | Vers le bas |
| 0 (zéro) | Début de ligne (: 0 première ligne) |
| $ | Fin de ligne (: $ dernière ligne) |
| w | Mot suivant |
| b | Mot précédent |
| f+c | Saut sur le caractère ‘c’ |
| ctrl+f | Remonte d’un écran |
| ctrl+b | Descend d’un écran |
| G | Dernière ligne du fichier |
| NG | Saute à la ligne ’n’ (:n identique) |
Correction
| Commande | Action |
|---|---|
| x | Efface le caractère sous le curseur |
| X | Efface le caractère devant le curseur |
| rc | Remplace le caractère sous le curseur par le caractère ‘c’ |
| dw | Efface le mot depuis le curseur jusqu’à la fin du mot |
| d$ (ou D) | Efface tous les caractères jusqu’à la fin de la ligne |
| dO | Efface tous les caractères jusqu’au début de la ligne. |
| dfc | Efface tous les caractères de la ligne jusqu’au caractère ‘c’ |
| dG | Efface tous les caractères jusqu’à la dernière ligne, ainsi que la ligne active |
| D1G | Efface tous les caractères jusqu’à la première ligne, ainsi que la ligne active |
| dd | Efface la ligne active |
Ces commandes peuvent être répétées. 5Dd supprime 5 lignes.
Recherche dans le texte
Contrairement à un éditeur de texte classique, vi peut rechercher autre chose que des mots simples et fonctionne à l’aide de caractères spéciaux et de critères. La commande de recherche est le caractère « / ». La recherche démarre du caractère courant à la fin du fichier. Le caractère « ? » effectue la recherche en sens inverse. On indique ensuite le critère, puis Entrée.
/echo
recherche la chaîne ’echo’ dans la suite du fichier. Quand la chaîne est trouvée, le curseur s’arrête sur le premier caractère de cette chaîne.
La commande « n » permet de continuer la recherche dans le sens indiqué au début. La commande « N » effectue la recherche en sens inverse.
Quelques critères
- /[FfBb]oule : Foule, foule, Boule, boule
- /[A-Z]e : Tout ce qui commence par une majuscule avec un e en deuxième position.
- /[A-Za-Z0-9] : tout ce qui commence par une majuscule, minuscule ou un chiffre
- /[^a-z] : plage négative : tout ce qui ne commence pas par une minuscule
- /vé.o : le point remplace un caractère, vélo, véto, véro, …
- /Au*o : l’étoile est un caractère de répétition, de 0 à n caractères, Auo, Auto, Automoto, …
- /.* : l’étoile devant le point, une chaîne quelconque de taille variable
- /[A-Z][A-Z]* : répétition du motif entre [] de 0 à n fois, recherche d’un mot comportant au moins une majuscule (en début de mot)
- /^Auto : le ^ indique que la chaîne recherchée devra être en début de ligne
- /Auto$ : le $ indique que la chaîne recherchée devra être en fin de ligne
Quelques commandes de remplacement
Pour remplacer du texte, il faut se placer au début de la chaîne à modifier, puis taper l’une des commandes suivantes.
| Commande | Action |
|---|---|
| cw | Remplacement du mot courant |
| c$ | Remplacement jusqu’à la fin de la ligne |
| cO | Remplacement jusqu’au début de la ligne |
| cfx | Remplacement jusqu’au prochain caractère ‘x’ dans la ligne courante |
| c/Auto (Entrée) | Remplacement jusqu’à la prochaîne occurrence de la chaîne ‘Auto’ |
Après cette saisie, le caractère $ apparaît en fin de zone à modifier. Il suffit alors de taper son texte et d’appuyer sur Echap.
Copier-Coller
On utilise la commande « y » (Yank) pour copier du texte, elle-même devant être combinée avec d’autres indications. Pour couper (déplacer), c’est la commande « d ». Pour coller le texte à l’endroit choisi, c’est la commande « p » (derrière le caractère) ou « P » (devant le caractère). Si c’est une ligne complète qui a été copiée, elle sera placée en-dessous de la ligne active.
- Pour copier une ligne : yy
- Pour copier cinq lignes : 5yy
- Pour placer les lignes copiées à un endroit donné : p
L’éditeur vi dispose de 26 tampons pour y stocker les données que l’on peut nommer comme on le souhaite. On utilise pour ça le « " ».
- Pour copier cinq mots dans la mémoire m1 : “m1y5w
- Pour coller le contenu de la mémoire m1 à un endroit donnée : “m1p
Substitution
La substitution permet de remplacer automatiquement plusieurs occurrences par une autre chaîne.
:[1ere ligne, dernière ligne]s/Modèle/Remplacement/[gc]
Les numéros de lignes sont optionnels. Dans ce cas la substitution ne se fait que sur la ligne courante. En remplacement des numéros de lignes, « . » détermine la ligne courante, « 1 » la première ligne, « $ » la dernière ligne.
Le modèle est l’un des modèles présenté plus tôt. Remplacement est une chaîne quelconque qui remplacera le modèle.
Par défaut seule la première occurrence est remplacée. La lettre « g » indique qu’il faut remplacer toutes les occurrences. Avec « c », vi demande une confirmation pour chacune des occurrences.
:1,$s/[Uu]nix/UNIX/g
Cet exemple remplace, dans tout le fichier, Unix ou unix par UNIX.
Autres en ligne de commande
| Commande | Action |
|---|---|
| :w Nom_fic | Sauve le fichier sous Nom_fic, en l’écrasant ou en le créant |
| :1,10w Nom_fic | Sauve les lignes 1 à 10 dans Nom_fic |
| :r Nom_fic | Insère le fichier Nom_fic à partir de la ligne courante |
| :! commande | Exécute la commande puis retourne à l’éditeur |
| :r! commande | Exécute la commande et insère le résultat à partir de la ligne courante |
| :f Nom_fic | Affiche en bas d’écran le nom du fichier, le nombre de ligne et la position actuelle |
| :e Nom_fic | Le fichier est chargé. Un message indique si le précédent a été modifié |
| :e # | Le dernier fichier chargé est affiché. Permet de commuter entre les fichiers |
Commande set
La commande set permet de configurer l’éditeur.
- set all : affiche l’ensemble des options possibles
- set number (ou nu) / nonumber (ou nonu) : affiche / supprime les numéros de lignes.
- set autoindent / noautoindent : l’indentation est concervée lors d’un retour à la ligne.
- set showmatch / noshowmatch : lors de la saisie d’une accolade ou d’une parenthèse de fermeture, celle d’ouverture est affichée un très court instant, puis l’éditeur revient au caractère courant.
- set showmode / noshowmode : vi affichera une ligne d’état (INPUT MODE).
- set tabstop=x : définit le nombre de caractères pour une tabulation.
Photo de Kelly Sikkema sur Unsplash