L`éditeur de texte vi - E

Transcription

L`éditeur de texte vi - E
L’éditeur de texte vi
Systèmes d’exploitations
Semestre 1
Sujet 7 (TP) - 2005-2006
Département Informatique
Résumé
Le but de cette session de Travaux Pratiques est de vous apprendre à manipuler l’éditeur de fichier texte vi.
L’éditeur de texte vi
Histoire
Le programme vi est un éditeur de texte visuel se basant sur un éditeur de texte en ligne nommé ed1 . Il est apparu dans
les premières versions des implémentations d’Unix faites par l’Université de Californie à Berkeley2 .
vi est dit visuel car il représente le contenu d’un fichier texte en utilisant toute la zone d’affichage offerte par le terminal
dans lequel il est utilisé, alors que les outils en mode ligne n’utilise que le minimum des capacités offertes par les terminaux :
la ligne.
L’éditeur de texte vi est loin d’être un éditeur très évolué et encore moins convivial3. Néanmoins c’est désormais un
standard sur toutes les versions d’UNIX, c’est-à-dire que quelque soit la version d’UNIX que vous utiliserez la commande
vi sera présente. Il est très puissant et ne nécessite que très peu de ressources.
La majorité des directives de vi sont utilisables dans d’autres commandes UNIX comme par exemple more, sed, etc.
Toutes ces commandes sont elles-aussi basées sur l’éditeur en ligne ed.
Il existe aujourd’hui un grand nombre d’implémentation de vi toutes différentes, cependant elles respectent un fonctionnement minimum commun que nous allons étudier dans ce TP et qui correspond aux premières versions historiques de
vi. Pour plus de détails sur vi vous pourrez vous reporter à la Vi Lovers Home Page à l’adresse suivante :
http://www.thomer.com/vi/vi.html
Philosophie et fonctionnement de base
vi est un éditeur de texte fonctionnant grâce à des modes.
Il existe deux modes d’utilisation sous vi :
1. le mode commande ou directive : au démarrage de vi vous êtes toujours dans ce mode. Une commande c’est un ou
plusieurs caractères qui permettent de demander un traitement particulier (déplacement, recherche, remplacement,
etc.). Il y a 2 types de directives :
– les directives de bases sont utilisées en appuyant sur la (ou les) touche(s) leur correspondant
– les requêtes ed sont données sur la dernière ligne de votre terminal. Pour cela vous devez :
(a) utiliser la directive «:». Le curseur se positionne alors sur la dernière ligne de votre terminal juste après le
caractère «:».
(b) saisir votre requête
(c) valider la requête pour la faire s’exécuter en appuyant sur la touche Enter .
2. le mode de saisie : il existe plusieurs directives permettant de passer dans ce mode. Le seul moyen d’en sortir (de
s’en échapper) est d’appuyer sur la touche d’échappement ( Esc ). Comme son nom l’indique ce mode permet de
saisir du texte.
La position d’édition, ou position courante, dans le fichier est repérée par le curseur (un caractère représentant un bloc
noir ou un trait clignotant). Le caractère se trouvant sous le curseur est appelé le caractère courant, il correspond à un
caractère du fichier. Pour déplacer le curseur et donc la position d’édition il existe 4 directives particulières :
1. h déplace le curseur d’un caractère vers la gauche
2. l déplace le curseur d’un caractère vers la droite
3. j déplace le curseur d’une ligne vers le bas
4. k déplace le curseur d’une ligne vers le haut
Ces directives fonctionnent quelque soit le terminal utilisé, cependant sur les micro-ordinateurs des salles de TP vous
pouvez de manière plus simple utiliser les flèches de votre clavier effectuer ces déplacements.
1 Souvent
remplacé par ex dans les implémentations récentes d’UNIX
implémentations ont données naissance à la famille des Unix BSD. Pour un historique complet des implémentations d’UNIX reportezvous à l’adresse http://www.levenez.com/unix
3 ...pour les utilisateurs habitués à utiliser plus souvent une souris que leur cerveau. Mais tout ça n’est qu’une question d’habitude.
2 Ces
1
Utilisation
Dans les descriptions de commandes et exemples du reste de ce TP les mots en italiques représentent des informations
que vous devez fournir.
– Pour démarrer l’édition d’un fichier il suffit de taper la commande : vi fichier.
– Pour sauvegarder un fichier une fois dans vi il vous faut utiliser la requête «:w».
– Pour quitter l’éditeur :
– si vous n’avez pas modifié le fichier il suffit d’utiliser la requête «:q»
– si vous avez modifié le fichier mais que vous ne désiriez pas sauvegarder les modifications il vous faut utiliser la
commande «:q!»
– si vous avez modifié le fichier et que vous voulez sauvegarder ces modifications il vous faut utiliser l’une des requêtes
«:x», «:wq» ou simplement la directive «ZZ».
Le tableau 1 vous propose un résumé de quelques directives et commandes de vi.
Il est possible de répéter l’éxécution d’une directive en la préfixant par le nombre de fois qu’elle doit être éxécutée. Par
exemple pour effacer 10 lignes il suffit de taper ‘10dd’.
Lorsqu’il vous semble que vous ne vous souvenez pas dans quelle mode vous êtes et que vous êtes perdu un bon réflexe
est d’appuyer plusieurs fois sur la touche Esc jusqu’à ce que vous entendiez un bip sonore signalant que vous êtes de
nouveau en mode commande. vi ne connaissant de directive liée à la touche Esc vous signale une erreur en émettant
un bip sonore.
Avant de commencer le TP il vous est conseillé TRÈS FORTEMENT de lire la page du manuel de nvi.
Exercice
Exercice 1 : Manipulation de base
Q 1. Après être passé en mode texte, lancez l’éditeur nvi4 .
Q 2. Insérez le texte suivant, en respectant les passages à la ligne (ne pas entrer les numéros de lignes) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
17.
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
Rule
of
of
of
of
of
of
of
of
of
of
of
of
of
of
of
of
Modularity: Write simple parts connected by clean interfaces.
Clarity: Clarity is better than cleverness.
Composition: Design programs to be connected to other programs.
Separation: Separate policy from mechanism; separate interfaces from engines.
Simplicity: Design for simplicity; add complexity only where you must.
Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
Transparency: Design for visibility to make inspection and debugging easier.
Robustness: Robustness is the child of transparency and simplicity.
Representation: Fold knowledge into data so program logic can be stupid and robust.
Least Surprise: In interface design, always do the least surprising thing.
Silence: When a program has nothing surprising to say, it should say nothing.
Repair: When you must fail, fail noisily and as soon as possible.
Economy: Programmer time is expensive; conserve it in preference to machine time.
Generation: Avoid hand-hacking; write programs to write programs when you can.
Optimization: Prototype before polishing. Get it working before you optimize it.
Extensibility: Design for the future, because it will be here sooner than you think.
Q 3. Sauvegardez le contenu dans un fichier de nom TDediteur sans quitter vi.
Q 4. Déplacez la première règle pour la mettre en fin de texte.
Q 5. Insérez le texte suivant entre l’avant dernière et la dernière règle : «KISS rule».
Q 6. Faites afficher les numéros de ligne.
Q 7. Copiez la règle KISS, 20 fois en début de fichier.
Q 8. Utilisez la commande de substitution pour remplacer partout dans le texte «KISS » par «Keep It Simple Stupid ! ».
Q 9. Ajoutez en fin de fichier le contenu du fichier /etc/passwd.
Q 10. Utilisez la commande de substitution pour remplacer partout dans le texte /bin/bash par /bin/csh.
Q 11. Comptez en utilisant les commandes de recherche de chaîne le nombre de lignes contenant une ou plusieurs
occurrence du mot «of ».
Q 12. Appelez la commande man nvi sans quitter vi.
Q 13. Quittez l’éditeur en sauvegardant le contenu.
Q 14. Vous voulez utiliser les directives de déplacement (par exemple ‘$’) mais le caractère $ s’affiche dans votre texte.
Pourquoi et que faire ?
Q 15. Vous venez de détruire une ligne par erreur, que faire ?
4 nvi est une des implémentations de vi installés sur les machines du département. Il existe des implémentations plus conviviales de vi,
comme par exemple vim qui fonctionne sur un grand nombre de système comme par exemple Micro$oft Windows
2
Directives de passage en
passage en
passage en
passage en
passage en
i
I
a
A
mode saisie (dont la fin est signalée par la touche Esc )
mode de saisie (insertion avant le curseur)
mode de saisie (insertion avant la ligne courante)
mode de saisie (ajout après le curseur)
mode de saisie (ajout après la ligne courante)
u
.
0
$
yy
P
p
x
dw
dd
ZZ
/chaine
n
:requête ed
Directives de base (avec fin implicite)
annuler la dernière commande
répéter la dernière commande
positionner le curseur en début de ligne
positionner le curseur en fin de ligne
copie la ligne courante dans un tampon
colle le contenu du tampon avant la ligne courante
colle le contenu du tampon après la ligne courante
suppression du caractère courant
supprimer le mot courant
supprimer la ligne courante
sortie avec sauvegarde des modifications
recherche de chaine
répète la dernière recherche effectué à partir de la position courante
effectue la requête ed spécifiée
e f ichier
w
w f ichier
n1
$
d
n1 ,n2 d
m n
n1 ,n2 m n3
tn
n1 ,n2 t n3
s/chaine1 /chaine2 /
s/chaine1 /chaine2 /g
n1 ,n2 s/chaine1 /chaine2 /g
r fichier
!commande
set options
set nooptions
Requêtes ed
débuter l’édition (ouvrir ) de f ichier
enregistrer le fichier courant
enregistrer le fichier courant sous le nom f ichier
positionner le curseur à la ligne n1
positionner le curseur à la dernière ligne
supprimer la ligne courante
supprimer les lignes n1 à n2
déplacer la ligne courante en ligne n
déplacer les lignes n1 à n2 en ligne n3
dupliquer la ligne courante en ligne n
dupliquer les lignes n1 à n2 en ligne n3
remplacer la première occurence de chaine1 par chaine2 sur la ligne courante
remplacer toutes les occurences de chaine1 par chaine2 sur la ligne courante
remplacer toutes les occurences de chaine1 par chaine2 pour les lignes de n1 à n2
lire un fichier et l’insérer à la ligne courante
appeler une commande UNIX
fixe l’option de l’éditeur (cf table 2)
supprime l’option de l’éditeur (cf table 2)
Tab. 1 – Directives de base de vi
number
ignorecase
autoindent
Options de vi
affiche les numéros de lignes devant chaque ligne
ne pas faire de distinction entre les majuscules et les miniscules pour les recherches
indentation automatique des programmes
Tab. 2 – Options de l’éditeur vi
3