éditeur de texte
par
popularité : 2%
VI. L’ éditeur de texte :
Sur toutes les versions du système, on dispose de l’éditeur
plein écran vi ( video ). Le point de référence est toujours la
position du curseur.
Cet éditeur peut fonctionner quel que soit le type de
terminal utilisé.
Son bon comportement est lié au contenu de la variable
shell TERM qui doit contenir un nom d’entrée adéquat dans les fichiers
système décrivant les émulations de terminaux.
L’administrateur est responsable du positionnement correct
de cette variable dès la connexion.
L’utilisateur pourra préférer d’autres éditeurs plus
conviviaux ou intuitifs, notamment en environnement X_Window. Néanmoins, une
connaissance minimale de « vi » s’avère nécessaire pour être capable de
créer ou modifier un fichier de texte quel que soit l’environnement de
travail.
Quelques principes de fonctionnement
L’éditeur place le terminal en mode « raw », dit « mode commande ».
Cela signifie que chaque touche est directement interprétée comme une
commande.
Pour insérer ou modifier du texte dans le fichier, l’utilisateur doit
invoquer une commande qui place l’éditeur en mode « insertion de
texte ». A la fin de sa manipulation, il doit retourner en mode commande
par la touche « Escape ».
Les déplacements sont des commandes et ne doivent pas s’effectuer en
mode « insertion de texte ».
Même si certaines émulations tolèrent ce comportement, il est
incontournable d’adopter rapidement ce que l’on appellera le réflexe de
la touche « Escape ». L’éditeur ne permet pas de se déplacer au-dela
du texte existant.
Il faut, dans ce genre de situation, penser en terme d’insertion de texte
et utiliser une commande appropriée ( insertion en fin de ligne, insertion
après la ligne courante, etc... ).
Certaines commandes apparaissent en écho sur la dernière ligne de l’écran,
précédées du caractère : . Ces commandes correspondent au mode « commande
syntaxique ».
En environnement X_Window, dans le cadre de l’émulateur « xterm » (
voir chapître 8 ), vi intègre la fonctionnalité de « couper-coller »
via la souris.
Cette manipulation est possible entre deux fenêtres « xterm », c’est Ã
dire potentiellement entre deux fichiers de deux machines distinctes.
Sur certaines émulations, il sera impossible d’utiliser le « pavé
numérique » du clavier.
A. Lancement de l’éditeur
- vi fichier Appel classique de l’éditeur
- vi Appel sans nom de fichier ( il faudra donner un nom en
quittant le programme ) - vi +n fichier Appel de l’éditeur en se positionnant
directement sur la ligne n - vi fic1 fic2 .... Appel avec plusieurs noms de fichiers (
possibilité de changer de fichier courant ) - view fichier Appel de l’éditeur en lecture seule
- vedit fichier Appel de l’éditeur en mode « bavard » (
visualisation en bas de l’écran du mode courant )
Déplacements ( la notation « n » indique un nombre )
Déplacements élémentaires
h ou nh Une ou n position(s) vers la gauche
j ou nj Une ou n position(s) vers le bas
k ou nk Une ou n position(s) vers le haut
l ou nl Une ou n position(s) vers la droite
( On peut aussi, en général, utiliser les flèches )
Autres déplacements
^ | Aller en début de ligne | Ctrl d | Descendre d’une moitié d’écran | |
$ | Aller en fin de ligne | Ctrl u | Remonter d’une moitié d’écran | |
b | Aller sur le mot précédent | Ctrl f D | escendre d’un écran | |
w | Aller sur le mot suivant | Ctrl b | Remonter d’un écran | |
nG | Aller à la ligne n | |||
1G | Aller en début de fichier | |||
G | Aller en fin de fichier |
Insertion et modification de texte ( la notation « n » indique un nombre )
a |
Insertion après le caractère courant |
A | Insertion en fin de ligne |
i | Insertion ava nt le caractère courant |
I | Insertion en début de ligne |
o | Insertion d’une nouvelle ligne après la ligne courante |
O | Insertion d’une nouvelle ligne avant la ligne courante |
Escape Retour au mode commande
x | Suppression du caractère courant |
X | Suppression du caractère précédent |
D | Suppression de la fin de ligne |
dw ou ndw | Suppression d’un ou n mot(s) |
dd ou ndd | Suppression d’une ou n ligne(s) |
r | Remplacement du caractère courant ( on tape le nouveau caractère, « Escape » inutile ensuite ) |
cw | Remplacement du mot courant ( l’éditeur visualise la fin du mot par le caractère $ ,on tape la nouvelle chaîne et on termine par « Escape » ) |
C | Remplacement jusqu’Ã la fin de ligne ( même manipulation que le « cw » ) |
R | Mode « sur-impression » ( on termine par « Escape » ) |
J | Concaténation ligne courante - ligne suivante |
Recherches d’expressions
/expression | Recherche en avant de l’expression |
?expression | Recherche en arrière de l’expression |
n | Chercher l’occurrence suivante |
N | Chercher l’occurrence précédente |
Substitutions répétitives ( mode « commande syntaxique » )
:s/expr1/expr2/ | Sur la ligne courante, remplacer, une seule fois, « expr1 » par « expr2 » |
:s/expr1/expr2/g | Sur la ligne courante, remplacer, plusieurs fois si nécessaire, « expr1 » par « expr2 » |
:n,ms/expr1/expr2/ | Idem mais entre les lignes de numéro « n » Ã « m », une seule fois |
:n,ms/expr1/expr2/g | Idem, mais plusieurs fois si nécessaire |
La ligne courante se note alors « . » ( point) ,la dernière
ligne se note alors « $ » ( dollar )
B. Les expressions « régulières »
Comme bon nombre d’utilitaires Unix, notamment les filtres ( chapître 6 ),
l’éditeur « vi »
implémente les expression dites régulières qui permettent d’exprimer une
sémantique
supplémentaire par rapport aux expressions littérales.
^ | Début de ligne |
$ | Fin de ligne |
. | Présence d’un caractère quelconque |
[ensemble_caractères] | Un caractère parmi un ensemble donné |
[^ensemble_caractères] | Un caractère ne figurant pas dans l’ensemble |
caractère* | Un nombre quelconque d’apparitions du caractère ( éventuellement aucune apparition ) |
& | Dans une substitution, reprendre la première expression ( ceci permet l’expansion d’une expression ) |
Annuler la sémantique d’un caractère dans l’expression | |
.* | Notation pratique pour désigner la ligne complète |
Exemples
/toto *$ | Recherche, vers le bas, d’une ligne se terminant par la chaîne « toto » suivie d’un nombre quelconque d’espaces. |
?^[0-9] | Recherche, vers le haut, d’une ligne commençant par un chiffre. |
:.,$s/admin/admin-sys/g | Remplacer, depuis la ligne courante jusqu’Ã la fin du fichier, toutes les apparitions de la chaîne « admin » par la chaîne « admin-sys ». |
:1,$s/[0-9]/ & /g | Dans tout le fichier, ajouter un espace autour de chaque chiffre. |
:1,$s/\^/A/ | Dans tout le fichier, remplacer le caractère ^ par la lettre A,ceci une seule fois par ligne. |
:s/.*/$&$/ | Ajouter un dollar en début et en fin de la ligne courante. |
:1,$s/.*/$&$/ | Ajouter un dollar en début et en fin de toutes les lignes du fichier. |
C. Divers fonctions
Dupliquer ou déplacer un ensemble de lignes ( la notation « n » indique un
nombre )
Y | On mémorise la ligne courante dans le « buffer sans nom » |
nY | On mémorise les n lignes courantes dans le « buffer sans nom » |
p ( minuscule ) | On restitue le contenu du « buffer » après la position courante |
P ( MAJUSCULE ) | On restitue le contenu du « buffer » avant la position courante |
Les commandes de suppression ( dd , x , X ... ) stockent également dans le
« buffer ». On peut effectuer alors un déplacement au lieu d’une
duplication. Il est possible d’utiliser des « buffers nommés » ( a-z ).
Exemple
"a5Y 5 lignes stockées dans le buffer a puis "ap Duplication de
ces 5 lignes après la ligne courante
Le contenu des « buffers nommés » est conservé entre plusieurs fichiers
d’une même session vi, ce qui n’est pas le cas du « buffer sans
nom ».
Autres commandes utiles
u | Annuler la dernière commande |
. | Répéter la dernière commande |
Ctrl g | Afficher le numéro de la ligne courante |
: ! | commande Exécuter une commande Unix et revenir dans l’éditeur |
!! | commande Insérer le résultat d’une commande ( la ligne courante est écrasée ) |
Ctrl l ou Ctrl r | Rafraîchissement de l’écran |
Sorties et sauvegardes
:q ou :q ! | Sortir sans prendre en compte les modifications |
ZZ ou :wq ou :x | Sauvegarder avec le nom d’entrée et sortir |
:x ! | Forcer la sauvegarde sur un fichier en lecture seulement ( uniquement pour le login « root » ) |
:w | Sauvegarder sans sortir |
:w fic | Sauvegarder sous le nom « fic » |
:n1,n2w fic | Sauvegarder les lignes de numéros n1 Ã n2 dans le fichier « fic » |
:r fic | Insérer après la ligne courante, le contenu du fichier « fic » |
Edition de plusieurs fichiers
:e fic | Editer le fichier « fic » |
:e ! fic | Editer le fichier « fic » sans sauvegarder les modifications sur le fichier courant |
:e# | Retour à l’édition du fichier précédent |
Si appel de l’éditeur avec plusieurs noms de fichiers ,
:n | Editer le fichier suivant |
:n ! | Editer le fichier suivant sans sauvegarder les modifications |
D. Paramétrage de l’éditeur
Paramétrage ponctuel
:set all | Liste des options ( détail dans « man ex » ) |
:set | option Activer une option ( Exemple :set autoindent ) |
:set nooption | Inhiber une option ( Exemple :set nonumber ) |
:set option=valeur | Exemple :set tabstop=4 |
On peut abréger le mot « set » en « se » ainsi que le nom de l’option s’il
n’est pas ambigu.
Exemples
:set number | Afficher les numéros de lignes |
:se nu | Idem |
:se nonu | Opération inverse |
Paramétrage permanent
On peut constituer un fichier .exrc dans son répertoire de
connexion. L’éditeur exécute le contenu de ce fichier à chaque appel.
Exemple de contenu de fichier
set redraw | Corriger les défauts d’affichage sur certains terminaux |
set number | Activer la numérotation de ligne |
set autoindent | Activer l’indentation automatique |
set showmode | Mode « bavard » |
E. Memo