103.8 Leçon 1
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
103 Commandes GNU et Unix |
Objectif : |
103.8 Édition élémentaire de fichiers textes |
Leçon : |
1 sur 1 |
Introduction
Dans la plupart des distributions Linux, vi
— abréviation de “visual” — est pré-installé et c’est l’éditeur standard dans l’environnement shell. Vi est un éditeur de texte interactif, il affiche le contenu du fichier à l’écran pendant le processus d’édition. En tant que tel, il permet à l’utilisateur de se déplacer et d’apporter des modifications à n’importe quel endroit du document. Cependant, contrairement aux éditeurs visuels du bureau graphique, l’éditeur vi
est une application shell avec des raccourcis clavier pour chaque tâche d’édition.
Une alternative à vi
, appelée vim
(vi improved), est parfois utilisée comme remplacement moderne de vi
. Parmi d’autres améliorations, vim
supporte la coloration syntaxique, l’annulation/rétablissement à plusieurs niveaux et l’édition multi-documents. Bien que plus performant, vim
reste entièrement compatible avec vi
, ce qui rend les deux éditeurs indiscernables pour la plupart des tâches.
La technique standard pour lancer vi
consiste à lui fournir le chemin d’accès à un fichier comme paramètre. Pour aller directement à une ligne spécifique, son numéro doit être indiqué avec un signe plus, comme dans vi +9 /etc/fstab
pour ouvrir /etc/fstab/
et placer le curseur à la neuvième ligne. Sans numéro, le signe plus seul place le curseur à la dernière ligne.
L’interface de vi
est très simple : tout l’espace disponible dans la fenêtre du terminal est occupé pour présenter un fichier, normalement renseigné comme argument de commande, à l’utilisateur. Les seuls indices visuels sont une ligne de bas de page montrant la position actuelle du curseur et un tilde ~
indiquant la fin du fichier. Il existe différents modes d’exécution pour vi
, dans lesquels le comportement du programme change. Les plus courants sont : le mode insertion et le mode commande.
Le mode insertion
Le mode insertion est assez intuitif : le texte apparaît à l’écran au fur et à mesure que vous le tapez au clavier. C’est ce type d’interaction que la plupart des utilisateurs attendent d’un éditeur de texte, mais ce n’est pas comme ça que vi
présente un document au départ. Pour activer le mode insertion, l’utilisateur doit exécuter la commande correspondante en mode commande. La touche Esc termine le mode insertion et retourne en mode commande, le mode par défaut de vi
.
Note
|
Si vous souhaitez en savoir plus sur les autres modes d’exécution, lancez :help vim-modes-intro |
Le mode commande
Le mode commande — également connu sous le nom de mode normal — est le mode de démarrage par défaut de vi
. Dans ce mode, les touches du clavier sont associées à des commandes pour la navigation et la manipulation de texte. La plupart des commandes dans ce mode sont des touches uniques. Voici quelques-unes des touches et leurs fonctions en mode commande :
0
,$
-
Aller au début et à la fin de la ligne.
1G
,G
-
Aller au début et à la fin du document.
(
,)
-
Allez au début et à la fin de la phrase.
{
,}
-
Allez au début et à la fin du paragraphe.
w
,W
-
Sauter un mot, et sauter un mot en incluant la ponctuation.
h
,j
,k
,l
-
Gauche, bas, haut, droite.
e
ouE
-
Aller à la fin du mot en cours.
/
,?
-
Recherche en avant et recherche inverse.
i
,I
-
Activer le mode insertion avant la position actuelle du curseur et au début de la ligne actuelle.
a
,A
-
Activer le mode insertion après la position actuelle du curseur et à la fin de la ligne actuelle.
o
,O
-
Ajouter une nouvelle ligne et passer en mode insertion à la ligne suivante ou à la ligne précédente.
s
,S
-
Effacer le caractère sous le curseur ou la ligne entière et passer en mode insertion.
c
-
Modifier le(s) caractère(s) sous le curseur.
r
-
Remplacer le caractère sous le curseur.
x
-
Effacer les caractères sélectionnés ou le caractère sous le curseur.
v
,V
-
Démarrer une nouvelle sélection avec le caractère en cours ou la ligne entière.
y
,yy
-
Copier le(s) caractère(s) ou la ligne en entier.
p
,P
-
Coller le contenu copié, après ou avant la position actuelle.
u
-
Annuler la dernière action.
Ctrl-R
-
Refaire la dernière action.
ZZ
-
Fermer et enregistrer.
ZQ
-
Fermer sans enregistrer.
Si elle est précédée d’un chiffre, la commande sera exécutée le même nombre de fois. Par exemple, appuyez sur 3yy
pour copier la ligne en cours et les deux lignes suivantes, appuyez sur d5w
pour effacer le mot actuel et les 4 mots qui suivent, et ainsi de suite.
La plupart des tâches d’édition combinent plusieurs commandes. Par exemple, la séquence de touches vey
est utilisée pour copier une sélection à partir de la position actuelle jusqu’à la fin du mot en cours. La répétition de commandes peut également être utilisée dans ces combinaisons, ainsi v3ey
copierait une sélection en partant de la position actuelle jusqu’à la fin du troisième mot à partir de cette position.
vi
permet d’organiser le texte copié dans des registres, ce qui permet de conserver simultanément des contenus distincts. Un registre est spécifié par un caractère précédé de "
et une fois créé, il est conservé jusqu’à la fin de la session en cours. La séquence de touches "ly
crée un registre contenant la sélection courante, et qui sera accessible par la touche l
. Ensuite, le registre l
peut être collé avec "lp
.
On peut également définir des marques personnalisées à des positions arbitraires le long du texte, ce qui permet de naviguer rapidement d’une marque à l’autre. Les marques sont créées en appuyant sur la touche m
puis sur une touche pour adresser la position actuelle. Une fois que c’est fait, le curseur reviendra à la position marquée lorsque '
suivi de la touche choisie sont actionnés.
N’importe quelle séquence de touches pourra être enregistrée en tant que macro pour une exécution ultérieure. Une macro peut être enregistrée, par exemple, pour entourer un texte sélectionné de guillemets. Dans un premier temps, une chaîne de texte est sélectionnée et la touche q
est pressée, suivie d’une touche de registre à laquelle on associera la macro, par exemple d
. La ligne recording @d
apparaît alors dans la ligne de bas de page, indiquant que l’enregistrement est en cours. On part du principe qu’un texte est déjà sélectionné, la première commande est donc x
pour supprimer (et copier automatiquement) le texte sélectionné. La touche i
est pressée pour insérer deux guillemets à la position courante, puis Esc revient en mode commande. La dernière commande est P
, pour réinsérer la sélection effacée juste avant le dernier guillemet. En appuyant à nouveau sur q
, on termine l’enregistrement. A présent, une macro composée de la séquence de touches x
, i
, ""
, Esc et P
s’exécutera chaque fois que les touches @d
seront actionnées en mode commande, où d
est la touche de registre associée à la macro.
En revanche, la macro ne sera disponible que pour la session en cours. Pour rendre les macros persistantes, elles devront être stockées dans le fichier de configuration. Comme la plupart des distributions modernes utilisent vim comme éditeur compatible vi, le fichier de configuration de l’utilisateur est ~/.vimrc
. Dans ~/.vimrc
, la ligne let @d = 'xi""^[P'
va affecter le registre d
à la séquence de touches entre guillemets simples. Le même registre précédemment assigné à une macro pourra être utilisé pour coller sa séquence de touches.
Les commandes à deux points
Le mode commande supporte également un autre ensemble de commandes vi
: les commandes à deux points. Comme leur nom l’indique, elles sont exécutées après avoir appuyé sur la touche deux points : en mode commande. Les commandes à deux points permettent à l’utilisateur d’effectuer des recherches, de sauvegarder, de quitter, d’exécuter des commandes shell, de modifier les paramètres de vi
, etc. Pour revenir en mode commande, il faut exécuter la commande :visual
ou appuyer sur la touche Entrée sans aucune commande. Quelques-unes des commandes à deux points les plus courantes sont indiquées ici (l’initiale ne fait pas partie de la commande) :
:s/REGEX/TEXT/g
-
Remplace toutes les occurrences de l’expression régulière
REGEX
parTEXT
dans la ligne courante. Elle accepte la même syntaxe que la commandesed
, y compris les adresses. :!
-
Exécute la commande shell qui suit.
:quit
ou:q
-
Quitte le programme.
:quit!
ou:q!
-
Quitte le programme sans enregistrer les modifications.
:wq
-
Enregistrer et quitter.
:exit
ou:x
ou:e
-
Enregistrer et quitter le cas échéant.
:visual
-
Revenir en mode navigation.
Le programme standard vi
est capable d’effectuer la plupart des tâches d’édition de texte, mais tout autre éditeur en ligne de commande pourra être utilisé pour éditer des fichiers texte dans l’environnement shell.
Tip
|
Les utilisateurs novices auront peut-être du mal à mémoriser toutes les commandes de |
Les éditeurs alternatifs
Les utilisateurs qui ne connaissent pas vi
peuvent avoir du mal à s’y adapter, étant donné que son fonctionnement n’est pas intuitif. Une alternative plus simple est GNU nano
, un petit éditeur de texte qui offre toutes les fonctionnalités de base de l’édition de texte comme annuler/refaire, la coloration syntaxique, la recherche interactive et le remplacement, l’indentation automatique, les numéros de ligne, la complétion de mots, le verrouillage des fichiers, les fichiers de sauvegarde, et le support de l’internationalisation. Contrairement à vi
, toutes les touches actionnées sont insérées dans le document en cours d’édition. Les commandes dans nano
sont fournies en utilisant la touche Ctrl ou la touche Meta (selon le système, Meta est Alt ou commande).
Ctrl-6
ouMeta-A
-
Démarre une nouvelle sélection. On peut également créer une sélection en appuyant sur la touche Maj et en déplaçant le curseur.
Meta-6
-
Copier la sélection en cours.
Ctrl-K
-
Couper la sélection en cours.
Ctrl-U
-
Coller le contenu dans le presse-papiers.
Meta-U
-
Annuler.
Meta-E
-
Refaire.
Ctrl-\
-
Remplacer le texte dans la sélection.
Ctrl-T
-
Lancer une session de vérification orthographique pour le document ou la sélection en cours.
Emacs est un autre éditeur de texte très populaire pour l’environnement shell. Le texte est inséré en le tapant, comme dans nano
, mais la navigation dans le document est assistée par des commandes au clavier, comme dans vi
. Emacs comprend un grand nombre de fonctionnalités qui en font plus qu’un simple éditeur de texte. C’est aussi un EDI (environnement de développement intégré) capable de compiler, d’exécuter et de tester des programmes. Emacs peut être configuré comme un client de courrier électronique, un lecteur de nouvelles ou un client RSS, ce qui en fait une véritable suite logicielle dédiée à la productivité.
Le shell lui-même lancera un éditeur de texte par défaut, habituellement vi
, chaque fois que cela sera nécessaire. C’est le cas, par exemple, lorsque crontab -e
est exécuté pour éditer les tâches cron (cronjobs). Bash utilise les variables de session VISUAL
ou EDITOR
pour déterminer l’éditeur de texte par défaut de l’environnement shell. Par exemple, la commande export EDITOR=nano
définit nano
comme éditeur de texte par défaut pour la session en cours de l’interpréteur de commandes. Pour rendre ce changement persistant d’une session à l’autre, la commande devra être ajoutée à ~/.bash_profile
.
Exercices guidés
-
vi
est utilisé principalement pour éditer des fichiers de configuration et du code source, où l’indentation permet d’identifier les sections d’un texte. Une sélection peut être indentée vers la gauche en appuyant sur<
et vers la droite en appuyant sur>
. Quelles touches faut-il utiliser en mode commande pour indenter la sélection en cours de trois crans vers la gauche ? -
Une ligne entière peut être sélectionnée en appuyant sur
V
en mode commandevi
. En revanche, le caractère de fin de ligne sera également pris en compte. Quelles touches doivent être actionnées en mode commande pour sélectionner à partir du caractère de départ jusqu’au dernier caractère mais sans le caractère de fin de ligne ? -
Comment exécuter
vi
en ligne de commande pour ouvrir~/.bash_profile
et passer directement à la dernière ligne ? -
Quelles touches faut-il actionner en mode commande
vi
pour effacer les caractères à partir de la position actuelle du curseur jusqu’au prochain point ?
Exercices d’approfondissement
-
vim
permet de sélectionner des blocs de texte de largeur arbitraire, et pas seulement des sections composées de lignes entières. En appuyant surCtrl-V
en mode commande, une sélection est faite en déplaçant le curseur vers le haut, le bas, la gauche et la droite. En utilisant cette méthode, comment peut-on supprimer un bloc qui commence au premier caractère de la ligne en cours et qui contient les huit colonnes et les cinq lignes de texte subséquentes ? -
Une session
vi
a été interrompue par une coupure de courant inopinée. Lors de la réouverture du fichier,vi
demande à l’utilisateur s’il souhaite récupérer le fichier swap (une copie automatique effectuée parvi
). Que doit faire l’utilisateur pour se débarrasser du fichier swap ? -
Dans une session
vim
, une ligne a été copiée auparavant dans le registrel
. Quelle combinaison de touches permet d’enregistrer une macro dans le registrea
pour coller la ligne dans le registrel
immédiatement avant la ligne actuelle ?
Résumé
Cette leçon présente l’éditeur de texte standard de l’environnement Linux : l’éditeur vi
. Malgré son côté intimidant pour l’utilisateur non averti, vi
possède des fonctionnalités qui en font un excellent choix pour l’édition de textes techniques et non techniques. La leçon aborde les points suivants :
-
Utilisation basique de
vi
et fonctionnalités utiles. -
Présentation de
vim
— levi
amélioré — et autres éditeurs alternatifs. -
Comment définir l’éditeur de texte par défaut pour l’environnement shell.
Voici les procédures et les commandes abordées :
-
L’éditeur
vi
et sa mouture amélioréevim
. -
Édition de texte de base dans
vi
. -
Les éditeurs alternatifs
emacs
etnano
.
Réponses aux exercices guidés
-
vi
est utilisé principalement pour éditer des fichiers de configuration et du code source, où l’indentation permet d’identifier les sections d’un texte. Une sélection peut être indentée vers la gauche en appuyant sur<
et vers la droite en appuyant sur>
. Quelles touches faut-il utiliser en mode normal pour indenter la sélection en cours de trois crans vers la gauche ?Les touches
3<
, qui signifient trois crans vers la gauche. -
Une ligne entière peut être sélectionnée en appuyant sur
V
en mode commandevi
. En revanche, le caractère de fin de ligne sera également pris en compte. Quelles touches doivent être actionnées en mode commande pour sélectionner à partir du caractère de départ jusqu’au dernier caractère mais sans le caractère de fin de ligne ?Les touches
0v$h
, qui signifient0
("aller au début de la ligne"),v
("commencer la sélection des caractères"),$
("aller à la fin de la ligne") eth
("reculer d’un cran"). -
Comment exécuter
vi
en ligne de commande pour ouvrir~/.bash_profile
et passer directement à la dernière ligne ?La commande
vi + ~/.bash_profile
va ouvrir le fichier et placer le curseur à la dernière ligne. -
Quelles touches faut-il actionner en mode commande
vi
pour effacer les caractères à partir de la position actuelle du curseur jusqu’au prochain point ?Les touches
dt.
, c’est-à-dired
("commencer la suppression"),t
("passer au caractère suivant") et.
(point).
Réponses aux exercices d’approfondissement
-
vim
permet de sélectionner des blocs de texte de largeur arbitraire, et pas seulement des sections composées de lignes entières. En appuyant surCtrl-V
en mode commande, une sélection est faite en déplaçant le curseur vers le haut, le bas, la gauche et la droite. En utilisant cette méthode, comment peut-on supprimer un bloc qui commence au premier caractère de la ligne en cours et qui contient les huit colonnes et les cinq lignes de texte subséquentes ?La combinaison de touches
0
,Ctrl-V
et8l5jd
va sélectionner et supprimer le bloc correspondant. -
Une session
vi
a été interrompue par une coupure de courant inopinée. Lors de la réouverture du fichier,vi
demande à l’utilisateur s’il souhaite récupérer le fichier swap (une copie automatique effectuée parvi
). Que doit faire l’utilisateur pour se débarrasser du fichier swap ?Appuyer sur
d
à l’invite devi
. -
Dans une session
vim
, une ligne a été copiée auparavant dans le registrel
. Quelle combinaison de touches permet d’enregistrer une macro dans le registrea
pour coller la ligne dans le registrel
immédiatement avant la ligne actuelle ?La combinaison de touches
qa"lPq
, c’est-à-direq
("démarrer l’enregistrement de la macro"),a
("assigner le registrea
à la macro"),"l
("sélectionner le texte dans le registrel`"), `P
("coller avant la ligne courante") etq
("terminer l’enregistrement de la macro").