Ceci dit les versions de VI varient un peu, certaines commandes ne marchent pas forcement de la meme maniere partout.
Pour apporter de l'eau a mon moulin, j'ai utilise VI sur un terminal X, un terminal vt100, Win95, DOS, et meme un minitel ( c'est dire ).
Je suis un peu proselytiste a propos de VI ( je pourrais l'etre a propos d'Emacs, mais la n'est pas le propos ), et voyant un ami utilisant un editeur graphique ( MOTIF/OSF ), gourmand en ressource, je lui dis qu'il devrait utiliser VI . Ajoutant que j'utilisais VI sous DOS,il me rit au nez, traite VI des pires maux, et ose meme le comparer a edit ( editeur du DOS ).
Apres 10 minutes, lui montrant une petite partie des possibilitees de VI, fonctionnalitees impossibles sous edit, et meme sous la pluspart des editeurs DOS meme borland, il abdique, et me demande ou se procurer la version DOS.
J'espere vous aider a apprehender VI, et vous faire votre propre idee.
Il y a certaines choses a connaitre.
L'interface avec l'utilisateur se fait uniquement par le biais du clavier. Donc, ne vous enervez pas sur celui-ci, la situation ne fera qu'empirer .
la touche DEL n'efface pas les caracteres, ca trouble beaucoup au debut.
Au lancement de VI, on est dans le mode COMMAND , par defaut.
Pour passer du mode COMMAND au mode INSERT , il y a plein de touches, mais la plus utilisee est 'i' pour mode 'I'NSERT ! Pour passer du mode INSERT au mode COMMAND , ici une seule touche ESC ( ou CTRL-C). Une fois en mode COMMAND , on peut executer une commande de differente facon.
Exemples:
Il y a des exeptions : Par Exemple w vous positionne sur le prochain mot, alors que ":w" sauve le fichier.
Attends, mais si j'ai pas de touche ESC sur mon clavier, comment utiliser VI?
essaie CTRL-[, CTRL-3 ,ou CTRL-C, sous DEC terminal, F11 est utilise comme touche ESC.
l'ecran s'efface .
appuyez sur 'i' ( pour passer en mode INSERT ), si en bas de l'ecran s'affiche insert, sautez la ligne suivante. Sinon apuyer sur ESC puis tapez ":se showmode" ENTER puis sur i. Frapper x, un "x" apparait a la premiere ligne (sinon recommencer depuis debut ) frapper ensuite ESC ( maintenant vous etes en mode COMMAND ), puis x, le "x", qui a ete precedement inserer, disparait. Vous devez comprendre, maintenant, la difference entre le mode COMMAND et le mode INSERT .
En mode INSERT , x insere le caractere "x".
En mode COMMAND , x, qui n'est plus le caractere mais une commande, supprime le caractere courant.
Pour finir, etant toujours en mode COMMAND frapper ":q!" .Voila vous etes sorti de VI
BRAVO
Faites la meme operation mais a la fin taper ":w" toto puis ":q", le fichier toto sera alors cree
.
a | ajoute apres la lettre courante. |
A | ajoute apres la ligne courante. |
o | ajoute une ligne en dessous |
I | insere en debut de ligne. |
cw | change le mot sur lequel on se trouve |
Commande sans passage en mode INSERT
x | enleve le caractere a la position courante |
:10 | la ligne courante devient la ligne 10 |
dw | supprime le mot sur lequel on se trouve position courante. |
:q | quitte |
:w | sauve |
:q! | quitte sans sauver. |
vi | edite un nouveau fichier sans nom. |
vi toto.c | edite le fichier toto.c, s'il n'existe pas il sera cree a la prochain sauvegarde. |
vi *.txt | edite tous les fichiers *.txt pour passer au suivant faire en mode commande :n et :N pour passer au precedent. |
:10,20t 100 | copie les lignes de 10 a 20 a la 100 eme ligne . |
:10,20m 100 | deplace les lignes de 10 a 20 a la 100 eme ligne . |
:10,20y | met dans le buffer les 10 lignes de 10 a 20. |
:100,$m 50 | deplace les lignes 100 jusqu'a la fin du fichier vers la 50 eme ligne. |
yy | copie la ligne courante dans le buffer . |
p | colle le buffer dans le texte. |
le couper-coller marche par la commande 'dd' apres on deplace le curseur puis 'p' ( comme paste) coller la ligne couper; de meme avec "10x" pour les caracteres.
:%s/window/linux/g | change windows par linux dans tout le fichier. |
:%s/windows/linux | change windows par linux dans tout le fichier, mais une seule fois par ligne | .
:%s/windows/linux/gc | change windows par linux dans tout le fichier, mais avec confirmation. |
:10,20s/windows/linux/g | change windows par linux dans les lignes de 10 a 20. |
:s/.*/U&/ | met en masjuscule la ligne courante. U masjuscule L minuscule |
:%s/ `^ m// | equivalent de la commande dos2unix pour avoir `^m appuyer sur CTRL-V puis m enter . |
:s/[a-zA-Z]/1&/g | ajoute apres tout caractere dans [a-zA-Z] un 1devant. |
:%s `^ windows// | elimine windows en debut de ligne. ^ veux dire debut de ligne $ veux dire fin de ligne |
:/windows/-2,+4d | elimine 5 lignes autour de la premiere occurence de "windows" |
:s/[ABC]/[abc]/g | A devient a, B devient b, C devient c . |
Syntaxe: ":g/chaine/commande"
:g/micrisoft/s/windows/linux/g | changes windows par linux uniquement dans les lignes ou "micrisoft" se trouve . |
:g/ `^[ ]*$/d | supprime toutes les lignes vides. |
:g/linux/t 0 | copie en haut du texte toutes les lignes contenants linux |
:g/linux/cd 80 | centre tous les lignes contenant linux |
:g!/linux/d | efface toutes les lignes ne contenant pas linux |
:v/linux/d | idem |
:/linux/-2,+4p | affiche 5 lignes autour de la premiere occurence de "linux". |
`^linux | recherche linux en debut de ligne |
:10,20nu | visualisation des lignes 10 a 20 avec affichage des numeros de lignes. |
/lin[uU]?x/ | recherche linux ou linUx |
n | Recherche la nouvelle occurence. |
'v' qui n'en n'a pas, on peut lui en affecter une:
:map v 10dd
Apres la touche 'v' efface 10 lignes a partir de la position courante, en mode COMMAND .
:map! v 10dd
v aura la fonctionnalitee dans les 2 modes.
Exemple:
:map! `^ vDELETE `^ vESClxi
Maintenant, la touche DELETE supprime dans les 2 modes
de meme:
:map! `^ vBACKSPAPE `^ vESChxi
Maintenant, la touche BACKSPAPE marche aussi .
:w | sauve le fichier edite. |
:e | open le meme fichier que celui edite, si on n'as pas sauve, c'est un puissant undo | .
:r toto.c | insere le fichier toto.c a la position courrante. |
:10,20w toto | sauve les lignes de 10 a 20 dans le fichier toto |
:10,20w toto | ajoute au fichier tot les ligne 10 a 20 du fichier edite | .
:r!ls -1 | insere le resultat de la commande ls -1 dans l'editeur a la position courante | .
:vi | permet de retablir l'affichage |
:q! | permet de sortir sans rien changer. |
:e! | permet de reediter le fichier sans sauver une connerie ( ca arrve a tous le monde ). |
:u | undo annule la derniere insertion. |
:se all | affiche toutes les options. |
r | remplace la lettre courante |
cw | change le mot courant. |
2cc | change 2 lignes a partir de la ligne courante. pour ces denieres commandes il y a un passage en mode INSERT. |
:10ce 80 | centre la ligne 10 sur 80 colonnes. |
:10,20ce 80 | centre les lignes de 10 a 20 sur 80 colonnes. |
:right | aligne a droite la ligne courante |
:left | aligne a gauche la ligne courante. |
:10,20 | insertion d'une tabulation pour les lignes de 10 a 20 . |
| |
:10,20j | joint toutes les lignes de 10 a 20 en une seule |
:map #7 dd | associe la touche F7 a la commande dd |
:color light cyan on blue | cyan sur fond bleu |
10,20w tmp | sauve les lignes de 10 a 20 dans le fichier tmp. |
:ab GNU gnu is not unix | abreviation GNU devient gnu is not unix attention a la recursivite ( GNU - gnu et non GNU - GNU) | .
:ab email vidalc@mlv-univ.fr | pratique pour son mail .... |
:ab | affiche toutes les abreviations |
:unab email | elimine l'abreviation email. |
:10,20!sort | remplace le texte ( 10 -> 20 ) part la sortie du philtre unix sort dont l'entree a ete ce texte |
:so .exrc | execute toute les commandes VI du fichier .exrc |
ma | deplace le curseur puis( marque la position courante par a) |
mb | puis ( marque la position courante par b ) |
'a | puis ( va a la marque a ) |
'b | puis ( va a la marque b ) |
:jumps | puis ( affiche les sauts ) |
:marks | affiche toutes les marques du texte |
Un language du premier age, LISP, ( LANGUAGE OF IDIOT AND STUPID PARENTHESES) est un enfer de parentheses.
Heureuseusement il y a VI.
Si dans un programme LISP, vous tapez '%' en mode COMMAND ( c'est la derniere fois que je le precise ), VI vous montrera la premiere parenthese ouvrante trouvee, puis de nouveau'%' et hop VI montre la parenthese fermante corresconpande.
Aucun editeur sous DOS commercial, fait ca!!! Meme pas les editeurs BORLAND. C'est pas dur pourtant.., et tellement pratique.
la commande '%' fonctionne avec '{','}','(',')','[',']', enfin grosomodo tout les caracteres qui s'ouvrent et se ferment.
Ca marche aussi, avec le C ou C++, ou autre.
Donc pas de probleme pour verifier les accollandes, sauf quand elles se trouvent dans une chaine de caracteres (dommange, probleme resolu sous Emacs).
Ce caractere `^ [ est la simulation ESC, donc passage en mode COMMAND .
":ta nom d'un fonction"
Et hop vous voila ammene dans le fichier contenant la dite fonction , a l'endroit ou elle se trouve .
Cette commande est ":set" ou ":se" comme ci dessus, il y a plein de raccourci clavier.
la syntaxe de cette commande est
yyp | Duplique une ligne. |
y$ | Met dans le buffer, tout de la position courante a la fin de la ligne . |
ddp | Bouge une ligne vers le bas . |
xp | Deplace le caractere courant apres le caractere suivant. |
:map ctrl-v<><>ctrl-g | essaye donc! Ca ralenti beaucoup VI . |
:map ctrl-v<><>ctrl-g | idem |
:map v Gdd''Pj | inexplicable. |
d% | efface jusqu'a la prochaine parenthese fermante |
Mettez dans ce fichier:
se nu
se ruler
Pour avoir les options nu et ruler automatiquement, quand on lance VI.
On peut aussi mettre des touches de commande personnelle via map .
remarque : ruler ne marche pas partout ( sous HP-UX il n'y a pas ).
merci a pierre DITTGEN pour son aide.
Toutes suggestions sont les bienvenues.