Dimanche 4 mars 7 04 /03 /Mars 13:18
Un peu d'histoire
Si je vous demande un logiciel incontournable du monde linux qui s'apprend dans la douleur ? Je pense que sans soucis, la majorité d'entre vous me répondront Vi. Loué par les habitués pour la puissance de ses commandes, raillé par ses détracteurs lui reprochant son manque de convivialité, Vi est un logiciel atypique du paysage informatique.

Vi est un éditeur de texte modal (Cf la définition sur wikipedia) pour Unix écrit par Bill Joy en 1976. Un éditeur de texte n'est pas un éditeur héxadécimal, ni un traitement de texte, c'est à dire qu'il permet à un utilisateur de saisir des caractères textes (ascii) et de les enregistrer tels quels sous forme de fichier. Modal est ce qui fait toute la différence entre Vi et les autres éditeurs de textes, c'est à dire que Vi possède différents modes de saisie, principalement le mode commande et le mode édition.

Mais, me diriez vous, le tître de cet article fait mention de Vim et non de Vi, y aurait il tromperie sur la marchandise ? Nenni ! Le soucis de Vi est ... qu'il n'est pas libre. Impossible donc de le porter sur une plate-forme sans s'acquitter de droits. En 1991, Bram Moolenaar  a donc décidé, puisque personne d'autre ne le faisait, d'écrire un clone de Vi qui tournerait sur son amiga. Grâce à la licence libre de son programme, des contributeurs ont commencés à s'intéresser à ce projet et très rapidement, le clône a dépassé son modèle héritant ainsi du nom de Vim (Vi iMproved).

Quels sont les avantages d'utiliser Vim ? Le premier est très important : il fonctionne en mode texte. Il est donc possible de l'utiliser dans une console ou via SSH. Deuxièmement, il est très rapide : il se lance instantanément et est capable d'avaler des fichiers de plusieurs dizaines de mégaoctets sans se plaindre. Troisièmement : il est très puissant comme nous le verrons plus bas. Si son interface à de quoi rebuter au premier abord, sachez que son austérité n'est cepandant pas cliquophobe et qu'une interface graphique existe : GVim.


GVim7 - browser de classes, coloration syntaxique, onglets, splits, replis ... la classe !

Un éditeur de texte modal

Vim fonctionne avec des modes, et mine de rien, c'est le truc le moins intuitif au monde. Par défaut, on arrive sous Vim en mode commandes, cela veut dire que l'on peut taper sur son clavier, rien ne s'affiche à l'écran (sauf peut être des messages d'erreur) ... Vim interprète ce qu'on lui rentre comme une suite de commandes.  Le mode commandes est d'ailleurs le mode central de Vim, il suffit d'appuyer 2 fois sur la touche «echap» et l'on est en mode commande. Le mode Édition est le mode qui permet de rentrer du texte dans le fichier en cours. En fait le mode édition est soit un mode dit insertion soit un mode remplacement (on remplace du texte par la saisie).

passer d'un mode à l'autre
Touches Description
Echap Passe  en mode commandes
«a» ou «A» Passe  en mode insertion après le caractère courant ou en fin de ligne.
«i» ou «I» Passe  en mode insertion avant le caractère courant ou en début de ligne.
«o» ou «O» Passe  en mode insertion en ajoutant une ligne vièrge après/avant la ligne courante.
«s» ou «S» Efface le caractère/la ligne courant et passe en mode insertion.
«R» Passe en mode remplacement.
«v» ou «V» Passe en mode visuel par caractère / ligne.
«Ctrl+V» Passe en mode visuel par bloc.


Naviguer dans du texte

Bon, ça nous fait déjà les lettres "aiosrv", l'alphabet nous permet encore quelques combinaisons sympathiques ;o) notemment pour jouer avec du texe : se déplacer, faire du copier-coller et toutes ces choses qu'il est d'usage de faire dans un éditeur de texte.
 Pour bien comprendre comment fonctionne Vim, il est plus juste de considérer que le texte actuellement dans l'éditeur est un «buffer» (tampon). C'est à dire qu'il est dans la mémoire de l'ordinateur. Il est possible, nous verrons plus loin d'ouvrir plusieurs tampon, de les fusionner etc etc mais revenons à notre curser :

How to naviguer dans un tampon
Touche
Description
:445
Va à la ligne 445 du tampon en court
Touches fléchées ou «h,j,k,l»
Déplace le curser.

«w» et «b»
Déplace le curser d'un mot vers la droite / gauche
«(» et «)»
Déplace le curser d'une phrase vers le haut / bas
«^» et «$»
Va en début / fin de ligne
/chaine
Cherche la chaîne de caractères «chaine» et place le curser sur la première occurence («n» et «N» pour occurence suivante / précédente).
«tX» ou «fX»
Cherche la première occurence de "X" et place le curser devant / dessus.
«ma»
Créer un marqueur nommé "a"
«'a»
Place le curser sur le marqueur nommé "a"
«gg»
 pareil que :1
«G»
pareil que «:$» (fin de tampon).
«{» et «}» Va au paragraphe précédent / suivant.
«%» Va à l'acolade / parenthèse / crochet correspondant.
«*» Va à la prochaine occurence du mot sous le curser

Les registres et le copier-coller.

Comme vous pouvez le constater, Vim est riche d'un grand nombre de commandes pour se déplacer dans du texte. Jetons maintenant un oeil aux opérations de copier coller.

Copieeeeer, colleeeeer, que j'aime le copiéééé collé !
touches

Description

«u» Annule la commande précédente :o)
«dd»
Coupe la ligne courante vers le registre (reg) par défaut
«yy»
Copie la ligne courante vers le reg par défaut
«p» ou «P»
Colle avant / après la position / ligne courante depuis le reg par défaut
«dtc»
Coupe le texte depuis la position actuelle du curser jusqu'à la première occurence de la lettre "c" dans le reg par défaut.
«yw»
Copie le mot à droite dans le reg par défaut.
«d}» Coupe le paragraphe suivant dans le reg par défaut.

Ce registre par défaut a un petit goût de planté de baton n'est ce pas ? Il faut en effet savoir que Vim permet d'utiliser d'autres types de registres en lieu et place de celui par défaut ce qui vous permet de conserver différentes sélections selon vos besoins.

- les registres numérotés (1 à 9)
- les registres nommés (a à z et A à Z).

Le registre par défaut est un registre spécial appelé «""» et contient systématiquement le contenu de la dernière sélection.

Les registres numérotés permettent d'accéder à vos coupés-collés précédents le plus récent prenant l'index 1 et décalant tous les autres ... je vous laisse savourer cette cerise sur le gâteau du copier-coller.

"2p # Colle après le curser le contenu de l'avant dernier registre
"3P # Colle avant le curser le contenu de l'avant avant dernier registre.


Les registres nommés vous permettent de mettre de coté des sélections et de les ressortir quand bon vous semble.

"add # Copie la ligne courante du curser dans le registre nommé "a"
"bp # Colle le contenu du registre nommé "b"

Pour finir et s'y retrouver, la commande «:reg» vous permet d'afficher un ou tous les registres.

Les multiplicateurs et les marqueurs

Avant de pousser plus loin notre exploration, il est important de savoir que presque toutes les commande Vim peuvent s'appliquer un certain nombre de fois (multiplicateurs) et / ou sur une région bien définie du tampon (marqueurs).

Les multiplicateurs permettent d'indiquer combien de fois répéter une commande. Il se saisissent sous forme de nombres rentrés juste avant la commande voulue :

3w # Déplace le curser de 3 mots vers la droite
2tA # Place le curser devant la deuxième occurence de la lettre "A".
d35d # Coupe les 35 lignes sous le curser dans le registre par défaut
"cy5b # Copie les 5 mots à gauches dans le registre nommé "c"
"a500p # Colle 500 fois le contenu du registre nommé "a" avant le curser.

Vous allez me dire avec raison que compte le nombre de ligne à supprimer n'est pas le moyen le plus simple de faire. Pour cela Vim propose d'appliquer des commandes sur certaines régions du texte soit en utilisant les numéros de lignes, soit les marqueurs :

:20,35y # Copie de la ligne 20 à la ligne 35 dans le registre par défaut.
:,100d # Coupe de la position actuelle jusqu'à la ligne 100
:100,d # Coupe de la ligne 100 à la position actuelle
:,$d # Coupe de la ligne actuelle jusqu' à la fin du fichier
:,'ay # Copie de la position actuelle du curser jusqu'au marqueur nommé "a"
:'a,'bd # Coupe du marqueur nommé "a" au marqueur nommé "b"
:-15,+15d # Coupe de 15 lignes avant à 15 lignes après la position du curser.
:%d # Supprime toutes les lignes du tampon (equiv :1,$d)

Vim propose un mécanisme de sélection plus intuitif que le mécanisme de marqueurs nommés qui permet d'appliquer des commandes sur une sélection :

le mode visuel

Le mode visuel permet de définir manuellement des régions à l'aide d'une sélection. Pour cela il suffit de rentrer en mode visuel à l'aide d'une des commandes données dans le tableau 1 et ensuite de se déplacer à l'aide de n'importe quelle combinaison de commandes de déplacement jusqu'au point désiré. Un fois cela fait, pressez «d» pour couper. Si vous préférez garder votre sélection, pressez «echap» pour retourner en mode commande. Les marqueurs «<» et «>» sont maintenant fixés vous pourrez les utiliser quand bon vous semble. Si vous voulez rentrez de suite une commande sur votre sélection, pressez «:» une fois la sélection faite, vim vous proposera automatiquement le prompt suivant :

:'<,'>

Ne vous reste qu'à appliquer la commande voulue.

Jongler avec les tampons

 La notion de tampon n'est pas un artifice purement gadget. On peut ainsi charger un fichier dans le buffer ou sauvegarder le buffer dans un fichier. Mais on peut également écrire le buffer dans l'entrée d'une commande Unix ou remplir le buffer à partir de la sortie d'une commande Unix ou d'un autre tampon !

Commandes de gestion des tampons
Touches
Description
:Ex
Ouvre un explorateur de fichiers
:enew Créée un tampon vide
:e fichier
Créer un tampon à partir du fichier «fichier»

:w
Écrit le tampon dans le fichier en cours si ouvert.
:w newfile
Écrit le tampon en cours dans le fichier «newfile»
:r fichier
Insère le fichier «fichier» dans le tampon actuel à la ligne courante.
:r !commande
Exécute «commande» et insère sa sortie standard dans le tampon actuel à la ligne courante.
:sp fichier
Sépare l'écran en 2 et charge «fichier» dans le nouveau tampon.
:wq ou :x
Sauve le tampon dans le fichier ouvert et quitte Vim

Vous remarquerez qu'en mode commande, lorsque vous tapez le caractère «:» une ligne de commande apparait en bas de votre écran : la ligne de saisie de commandes. Il s'agit du mode normal de saisie de commandes, les commandes non saisies sont des raccourcis vers les commandes saisies. (appuyer sur la touche «a» est un raccourci de la commande «:append»). Vous remarquerez qu'une pression sur la touche TAB après une des commandes de lecture ou d'écriture de fichier vous offre le choix des fichiers ou répertoires (autocomplétion).

Vim va plus loin, il est possible par exemple d'écrire seulement une partie du tampon en court dans un fichier ou une commande en définissant des marqueurs ou en passant par le mode visuel. Imaginez que vous ayiez dans un fichier, des requêtes SQL compliquées que vous gardez précieusement. Vous voulez exécuter l'une (ou plusieurs) d'entre elles mais pas l'ensemble du fichier. En mode commande, placez votre curser au début de la première requête à exécuter, puis passer en mode VISUEL en pressant les touches «SHIFT V». À l'aide des touches fléchées, sélectionnez jusqu'à la fin de la requête qui vous intéresse et pressez la rouche «:». Rentrez alors

:'<,'>w !mysql ma_base -u mon_user -h mon_host -p

Vous allez écrire votre séléction dans l'entrée de la commande mysql ... le tour est joué.

Plus loin avec Vim
Évidemment Vim possède une aide accessible à tout moment en pressant la touche «F1» ou en tapant ":help commande" en mode commande. Cette aide est très complète et naviguable facilement, seul hic : elle est en anglais.

Si cet article vous a intéressé faites le moi savoir, nous verrons la prochaine fois comment effectuer des recherches complexes, éditer plusieurs fichiers dans des tabs, remplacer et générer du contenu grâce à des expressions régulières, installer des plugins, configurer Vim grâce au vimrc, créer des macros et plus encore.
Par greg - Publié dans : vim
Ecrire un commentaire - Voir les 7 commentaires
Retour à l'accueil
 
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés