|
L'éditeur de texte vi
---------------------
1 - Creation / Modification d'un fichier ou de plusieurs à la suite
-> vi [-r] [-R] [-x] [toto titi ... ]
-r pour recuperer un fichier en cour d'édition lors
d'un arret prematuré du travail
-R "read only" protege le fichier en lecture
-b affiche les caractère non ASCII
très util pour voir les ^M issus de Window$
-x chiffre le fichier avec une clé saisie à chaque édition
( ne marche pas sous AIX car IBM est parano )
2 - Commandes d'edition :
-> u annule la dernière commande
-> i ... insere avant le curseur
-> I ... insere en debut de ligne
-> a ... insere apres le curseur
-> A ... insere en fin de ligne
-> o ... insere à la ligne en dessous
-> O ... insere à la ligne du dessus
-> r remplace une lettre
-> R ... remplace plusieurs lettres
-> x efface une lettre
-> dd efface une ligne et la met en memoire
-> D efface la fin de la ligne
-> dw efface la fin du mot
-> cw change la fin du mot
-> J cole la ligne suivante à la ligne courante
-> yy ou Y met la ligne en memoire
-> p (P) recopie la memoire apres (avant) la ligne
-> ^L reaffiche l'écran s'il est polué
-> ^G "gazette" affiche des infos (ligne courante .)
-> ^V protege le caractere suivant
-> . reexecute la derniere commande
3 - Commandes suivies de
-> /chaine recherche la chaine de caractères
-> :e! redition du même fichier sans les modifications
-> :e toto edition d'un autre fichier
-> :w ecrit le fichier sur disque
-> :w toto ecrit le fichier sur disque sous le nom fichier
-> :q quite l'éditeur vi si pas de modifications
-> :q! quite l'éditeur vi sans sauvegarder les modifs
-> :x quite l'éditeur vi en sauvegardant
-> :n edite le fichier suivant ( vi sur plusieurs f )
-> :2327 positionne le curseur à la ligne 2327
-> :! commande lance une commande shell
-> !! commande idem mais le resultat va dans le fichier
( attention, cela efface la ligne courante)
4 - Positionnement du curseur
-> ^F une page en avant
-> ^B une page en arriere
-> $ en fin de ligne
-> 0 en debut de ligne
-> (espace) un caractère en avant
-> h un caractère en arrière
-> j une ligne en avant
-> k une ligne en arrière
-> w un mot en avant
-> b un mot en arrière
-> H en haut de l'écran
-> L en bas de l'écran
-> M au milieu de l'écran
-> n à la chaine recherchée suivante
-> N à la chaine recherchée précedente
-> G à la fin du fichier
malheureusement inconnu du vi d'AIX :
-> * recherche le mot sous le curseur vers la fin
-> # recherche le mot sous le curseur vers le debut
5 - Repetition d'une commande n fois :
-> n ( sauf nG qui deplace le curseur à la ligne n )
6 - Les substitutions :
->n,ms/texte1/texte2/
de la ligne n à la ligne m
substitue la premiere ocurence de chaque ligne
il peut-être interessant de remplacer les / par £
->n,$s/texte1/texte2/g
$ designe la fin du fichier
/g substituer toutes les ocurences
->%s/^texte1$/texte2/g
% designe tout le fichier
^ signifie de texte1 est en debut de ligne
$ en fin de ligne /^$/ designe une ligne vide
pour substituer / il faut le proteger par \
à moins d'utiliser £ comme séparateur
|
|
COMPLEMENTS VI
--------------
1) Utiliser des marques
-----------------------
C'est la commande m qui va le permettre :
ma place la marque a sur le caractere courant
'a place le curseur au debut de la ligne marquee a
`a place le curseur sur le caractere marque a
d'a efface le texte depuis la ligne courante (comprise)
jusqu'a la ligne marquee a (comprise).
d`a efface le texte depuis le caratere courant (compris) jusqu'au caractere
marque a (exclu)
:marks donne la liste des marques
2) Utilisation des buffers 1-9
------------------------------
Lorsque vous effacez des blocs de texte ils sont automatiquements enregistres
dans un groupe de 9 buffers.
Seuls les 9 derniers blocs effaces sont disponibles.
Pour recuperer le contenu du buffer 3 :
"3p
le buffer 1 contient le bloc le plus recemment efface
le buffer 9 contient le bloc le plus anciennement efface
Il existe aussi un buffer special le buffer 0 qui contient aussi le dernier
bloc efface. Pour recuperer son contenu taper p.
3) Utilisation de buffers nommes
--------------------------------
26 buffers nommes sont disponibles ; ils ont pour noms :
a , b ... z .
Ils sont souvent designes dans les commandes par "a , "b ..."z .
remplir un buffer :
-------------------
Effacer les 5 lignes courantes et les placer dans le buffer a :
"a5dd
Placer les 3 lignes courantes dans le buffer b (sans effacement) :
"b3yy
Placer les lignes 20 a 50 dans le buffer b :
:20,50ya b
Vider un buffer :
-----------------
Vider le buffer a
"ap
Page1
4) Travail avec 2 fichiers
--------------------------
Vous etes en train d'editer texte1 sous vi et vous voulez y inserer les lignes
20 a 50 de texte2 :
Appeler texte2 :
:e texte2
Copier les lignes selectionnees dans le buffer b :
:20,50ya b
Revenir au texte1 :
:e #
Vider le buffer b :
"bp
5) Macros stockees dans un buffer
---------------------------------
Il va etre possible en tapant sur une touche de declencher l'execution d'une
commande complexe.
Exemple 1
---------
On veut inserer "debut" au debut de la ligne courante :
Un moyen d' y parvenir est de taper :
Idebut
Pour enregistrer cette macro on va taper :
o
IdebutV
Le caractere V sert a proteger le caractere qui suit ici . Le premier
fait partie de la macro. Le deuxieme sert a terminer la saisie de
la ligne.
A l'ecran on voit :
Idebut^[
On va placer le contenu de cette ligne dans un buffer :
stockage dans le buffer "c :
"cdd
execution de la macro stockee dans le buffer c :
@c
Page 2
Exemple 2
---------
Stocker dans le buffer a une commande de substitution :
o
:1,$s/lapin/biche/V
"add
Executer la commande contenue dans le buffer "a :
@a
Ici le V sert a proteger le qui fait partie du texte de la macro,
sert comme d'habitude a terminer la saisie.
Les macros definies par ce moyen cessent d'exister a la sortie de vi.
6) La commande map
------------------
On voudrait qu'en tapant D la date du jour apparaisse dans le texte.
( La commande D standard de vi ne sera plus disponible ; on peut donc redefinir
les commandes existantes ; on peut aussi choisir un caractere qui ne represente
aucune commande standard)
Pour obtenir la date du jour dans le texte on peut taper :
!!date
Pour associer cette commande a la lettre D :
:map D !!dateV
Pour verifier :
:map
Pour executer :
D
Programmer une touche de fonction :
-----------------------------------
Au lieu de la touche D on souhaite utiliser la touche F9 :
:map #9 !!dateV
La commande map!
----------------
Elle va permettre d'associer a une touche une commande precedee de ":" :
:map! S 1,$s/coucou/bonjour/V
pour verifier :
:map!
pour executer :
:S
Page 3
Remarque on pouvait aussi ecrire :
:map S :1,$s/coucou/bonjour/V
dans ce cas l'execution se fera par :
S
7) La commande ab
-----------------
Elle permet d' obtenir le remplacement immediat (en cours de saisie) d'une
abreviation par une autre expression :
:ab x2 votre merveilleux DPX2 360
Des que x2 sera tape , le remplacement se fera dans le texte.
8) Conserver les definitions entre deux sessions
------------------------------------------------
Il existe deux facons de proceder qui s'excluent :
- utiliser la variable d'environnement EXINIT :
EXINIT="$EXINIT | :map D !!dateV | :map! S 1,\$s/coucou/bonjour/V"
- utiliser dans votre repertoire de connexion le fichier .exrc
(Dans ce cas prevoir dans le .profile l'instruction : unset EXINIT)
Exemple de contenu du fichier .exrc :
set nu
:map! S 1,$s/coucou/bonjour/V
9) Editer des programmes
------------------------
autoindentation :
-----------------
Taper sous vi :set ai ou inserer la commande set ai dans .exrc.
Une fois l'indentation etablie par |