...du verbe Drupaler (1er groupe)

Petite introduction à VIM

Aucun vote pour l'instant

Print
PDF

VIM
Petite introduction à VIM
Le 1 mars, 2012 - 00:46 | Ulhume

Cela fait quelques temps déjà que j'évoque VIM au détours de divers billets sans jamais m'y arrêter vraiment. Du coup, j'ai reçu deux trois messages me demandant d'en parler un peu plus. Dans ces mêmes messages il m'a été (très gentiment) "reproché" de faire des articles un peu trop fleuves. Du coup je vais essayer de saucissonner un peu plus qu'à l'accoutumée pour commencer par une introduction très générale à VIM.

Mais d'où sors-tu une telle vieillerie ?

Que voulez vous, dans ce monde d'iPad et autres doudoux numériques, même les développeurs veulent que ça claque, que ça brille, que ça gigote, et comme VIM ne fait rien de tout cela, ça ne les excite que peu... Mais de là à considérer VIM comme une vieillerie c'est aller un peu vite en besogne.

Ceci étant dit, VIM est effectivement un "vieux" logiciel qui existe depuis plus de 10 ans et qui s'inspire de VI qui lui est né dans les années 70... Pour la petite histoire, son auteur (celui de VIM) cherchait à créer un clone de VI pour l'Amiga en partant du code de STvi, un vi pour Atari... VIM voulait à l'époque dire VI iMitation et ce n'est que plus tard qu'il devint VI iMproved.

C'est sans doute cette longue histoire qui donne à VIM son côté faussement ventage. Mais ce serait oublier un peu vite qu'un logiciel doté d'un tel héritage, c'est aussi plus de 30 ans d'améliorations et de perfectionnements. Et c'est aussi oublier que VIM est un projet actif même s'il ne suit pas le modèle de rythme effréné adopté par la fondation Mozilla, ce que nous serons je pense peu à lui reprocher...

Maintenant si l'on se base uniquement sur les fonctionnalités, VIM propose absolument tout ce que vous pouvez trouver ailleurs. Auto-complètement statique ou dynamique (en fonction du contexte), multi-documents, multi-fenêtrage, onglets, personnalisation extrême et langage de script, coloration syntaxique (avec thèmes dynamiques et plusieurs centaines de formats de fichiers reconnus !!), auto-indentation, reformatage, supports de plugins (en perl, en python, en ruby, en Tcl, etc.), prise en charge des écritures de gauche à droite, replis (possibilité de plier automatiquement ou manuellement des portions de texte), gestion native de diff, etc, etc. Et tout ceci en deux déclinaisons : mode texte dans un terminal, mode graphique avec l'application gVim qui fonctionne sous Gtk, mais aussi nativement sous MacOS, Windows, etc. Avouons qu'en virant la carrosserie de pas mal d'éditeurs "hype", il ne leur reste pas toujours de quoi faire rougir VIM...

Notez au passage que la version graphique de VIM exploite un cœur commun avec la version texte qu'elle habille plus qu'autre chose de menus déroulants, assesseurs, menus contextuels et autres barres d'outils. Cela signifie que même si vous utilisez la version graphique, en faisant gaffe à deux trois trucs, toute votre configuration et vos plugins fonctionneront sur la version console et la version graphique. Et c'est un plus non négligeable je vous l'assure, que de pouvoir intervenir à distance via SSH sur la machine d'un client avec SON PROPRE environnement configuré aux petits oignons... Car petit détail qui compte, plus que rares sont les GNU/Linux qui n'ont pas VIM installé en standard.

Comme vous le voyez à travers cette liste à la Prévert, VIM est loin d'être l'éditeur ringard imaginé par beaucoup. Et son héritage avec VI est à prendre plus au sens philosophique qu'au sens littéral.

Moi je veux bien mais quant j'y tape un truc, y'a rien qu'imprime !!

Ah vi, la philosophie de vi :-) Comme c'est déroutant la première fois.. Papy se souvient la larme à l'oeil le nombre de fois où il a manqué d'envoyer contre un mur le clavier de son terminal.. Un machin en texte connecté à un, déjà à l'époque, antique IBM 6150... Non sérieusement, je ne blâmerais pas celui qui me dira que vi n'est pas simple d'accès, car c'est un fait, vi est à l'opposé de tout ce que vous avez jamais utilisé pour éditer un texte jusqu'à aujourd'hui.

Le point clef à comprendre est que vi est modale alors que tous les autres éditeurs sont visuels. Certains dirons, et je ne trouve pas cela si idiot que cela, que vi est l'éditeur du cerveau gauche et que les autres sont calés sur le cerveau droit.

En effet, vi décompose l'action d'éditer un texte principalement (mais il y en a bien d'autres) en deux modes :

  • Le mode normal qui permet de naviguer et d'effectuer des opérations d'altération.
  • Le mode insertion qui permet de taper du texte au kilomètre.

Et comme VI démarre en mode normal, pour taper son premier texte, il faut commencer par presser i de sorte à passer en mode insertion (Esc permettra de revenir au mode normal). Sans cela, c'est la cata car tout ce qui est tapé sera interprété comme des commandes à appliquer sur le texte. Voilà l'origine de ce qui énerve un néophyte arrivant la bouche en cœur sous VI pour modifier une pauvre config et qui n'arrive qu'à la pourrir un peu plus...

Pour comprendre l'origine de cet étrange découpage, il faut encore remonter dans le temps. Je vous parlais plus haut de mon IBM 6150 que l'on appelait à l'époque un MainFrame, un "gros" serveur auquel était relié par des liaisons série des terminaux, sortes de minitels évolués. Tout ce que l'on tapait était transmis au serveur, qui l'interprétait et renvoyait au terminal ce qu'il fallait afficher sur l'écran (ça ne vous rappelle pas le web ;-) Comme vous pouvez l'imaginer les transmissions étaient lentes, d'autant plus lentes que l'on était plusieurs à bosser sur le pauvre CPU à 5.9Mhz et ses colossales 1Mb de mémoire. Le choix de l'approche modale était donc avant tout une question d'économie des touches tapées pour effectuer le maximum d'opérations en un minimum d'octets.

À cette contrainte se rajoutait, dans une moindre mesure, des claviers souvent réduits au minimum, sans flèches ni pavé numérique. Le principe de la modalité était donc d'utiliser alphanumérique pour les opérations courantes. Ainsi pour détruire un bloc de 10 lignes, ce qui correspondait avec un éditeur type wordstar à Ctrl-K-B, 10xflèche Bas, Ctrl-K K, Ctrl-K Y s'écrivait en VI : 10D. Je vous laisse calculer l'économie... Le modalité permet donc de "multiplexer" les touches en leur donnant une signification différente selon les contextes.

Alors de nos jours, est-ce que cette économie a encore un sens ? Je pense que oui, et ce pour plusieurs raisons :

  • Ce qui allait vite hier va tout aussi vite aujourd'hui. Une fois que vous commencez à maîtriser les commandes, VIM devient absolument ahurissant de rapidité. Et comme il a été pensé depuis des dizaines d'années dans ce sens, vous passez votre vie à découvrir des perles vous faisant gagner encore du temps. Par exemple, j'ai découvert ce matin qu'en mode normal, si je suis entre deux guillemets et que je veux remplacer tout ce qui se trouve entre ces guillemets par un autre texte, il me suffit de taper ci". Cela supprime tout ce qui se trouve entre les guillemets et passe tout seul en mode insertion, me permettant de saisir le texte en remplacement. Cela fonctionne sur tout caractère de type ouvrant/fermant, y compris les parenthèses... Pratique non ?
  • Pour qui tape beaucoup de texte (développeur, rédaction d'articles, etc), toute économie de pression sur le clavier se ressent directement sur des doigts moins douloureux en fin de journée. A l'heure où l'on parle de plus en plus des troubles musculo-squelettiques liées à l'usage de l'informatique, VI se trouve un nouveau statut d'éditeur zen pour les articulations.
  • VIM se contrôle entièrement au clavier. La souris y fonctionne parfaitement mais n'est en aucun cas nécessaire. Et là aussi c'est une cause de trouble musculo-squelettique en moins, et pas des moindres celle-là. Pour rire, tapez un texte ou du code avec votre éditeur habituel mais mettez la souris beaucoup plus loin que d'habitude. Vous prendre ainsi conscience du nombre de fois où votre bras doit 'décoller' du clavier pour aller chercher le mulot, puis revenir au clavier. Et tout cela juste pour une simple sélection de bloc de texte à copier que vous auriez fait avec VIM par un Esc 10Y (copie moi les 10 lignes qui suivent sous le curseur).

Donc oui, une bonne partie de l'optimisation du contrôle de VIM vient d'un âge révolu, mais le système qui en est sorti est toujours d'actualité. Et c'est important à garder en tête pour tacler aussi les vimmers sado-maso. Ceux qui disent par exemple qu'un vrai vimmer, n'utilise pas les flèches et doit privilégier les touches h (gauche), l (droite), j (bas) et l (haut). Ne riez pas, j'en connais qui désactivent exprès les flèches pour se forcer à utiliser ces touches !! Car oui cela économise encore un peu de mouvements du poignet ce qui ne peut pas faire de mal, je ne le conteste pas. Mais 1/ ces touches de directions existent avant tout parce qu'à une lointaine époque il n'y avait simplement pas de flèches sur le clavier 2/ pour tous ceux qui bossent sur un portable, les touches de directions sont maintenant totalement intégrées au corps central, et c'est aussi le cas pour beaucoup de claviers semi-compacts 3/ Et pour les claviers 102 touches à l'ancienne, on ne va pas en faire des tartines juste pour un déplacement de 5 cm à tout casser, faut pas déconner non plus...

Bref, il faut savoir raison garder et chercher plutôt à capter la philosophie d'ensemble et dans tous les cas il faut que cela reste ludique. Promis, vos dents ne vont pas tomber si vous faites des entorses. Moi même j'avoue mon père j'ai péché. J'ai créé prés de 50 lignes de redéfinition de touches juste pour sélectionner visuellement une zone par Shift-flèche haut/bas/gauche/droit. J'ai même fauté avec la combinaison Control-Shift-flèches... Ben entre nous, au delà de mes dents qui sont toujours là, c'est tout de même bien pratique lorsqu'on veut sélectionner un bloc sans avoir à compter les lignes...

VIM ou gVIM, le choix des armes

Là, pas de grands discours à faire c'est une question de goûts. Les deux moutures sont aussi performantes l'une que l'autre. La gestion de la souris en mode console est proprement excellent (vous pouvez redimensionner les fenêtres, sélectionner des blocs, etc) ce qui diminue encore l'espace entre les deux. Pour l'heure j'utilise la version console avant tout parce que j'apprécie de pouvoir lancer mon environnement de développement sur des machines distantes ne disposant pas de couche graphique. N'utilisant pas les menus déroulants et les barres d'outils, la version graphique m'apporte peu mais là encore c'est une question personnelle qui n'a au fond que peu d'incidence.

Encore du blabla ou on pratique un peu ?

Moi qui comptait faire court, c'est vaguement loupé. Je vais essayer de me rattraper par ce chapitre de mise en selle.

Lorsque vous lancez VIM il est automatiquement en mode normal. Mais comme nous n'avons pas de texte à altérer cela ne nous sert pas à grand chose. Pour créer un nouveau texte, nous allons basculer en mode commande (j'avais prévenu qu'il y avait plus de deux modes en réalités ;-) en pressant la touche :. En mode commande, comme son nom l'indique, vous allez saisir des... commandes. Les commandes de VIM existent toujours en mode abrégé ou complet, une fois de plus pour aller plus vite. Ainsi pour éditer un nouveau texte, la commande est :edit mon_fichier.txt (notez les deux points qui passent de normal à commande) qui donne en abrégé :e mon_fichier.txt. Lorsque vous validez, cela repasse en mode normal en laissant pour seule trace le nom du fichier dans la barre de statut. Cela indique que vous êtes prêt à saisir. Tapez i (ou Insert, ça marche aussi) pour passer en mode insertion. Maintenant vous pouvez taper au kilomètre comme sur un éditeur normal. Saisissez plusieurs lignes, puis pressez Esc pour revenir au mode normal.

En mode normal il est possible de faire énormément de choses. Vous pouvez par exemple détruire la ligne sous le curseur (dd). En réalité elle n'est pas détruite mais déplacée dans un registre (une sorte de presse-papier). Ainsi si vous tapez p (sorte de "coller") elle vous sera restituée. Souvent les commandes du mode normal peuvent être précédée d'un chiffre. Ainsi si vous tapez 2dd, vous transférez dans le registre non pas une mais deux lignes. Si vous voulez copier et non supprimer, remplacez d par y. Ainsi pour copier deux lignes, ce sera 2yy ou 2Y pour sa version encore plus courte.

Si vous avez la flemme de compter les lignes, vous pouvez passer en mode Visuel en pressant (en mode normal) la touche V (notez la majuscule). Là vous pouvez bouger le curseur et étendre la sélection. Pour copier/supprimer, ce sera les mêmes lettres que le mode normal mais une seule fois (d pour déplacer dans le registre, y pour copier dans le registre). Bien évidement il y a plein d'autre commandes comme par exemple > ou < pour indenter/désindenter le bloc en cours. Cela fonctionne aussi en mode normal en doublant. Par exemple 10>> va indenter les 10 lignes sous le curseur, curseur compris.

En réalité il y a trois modes visuels. Le mode V est le mode visuel "par ligne". On peut lui préférer le mode visuel "par caractères" en tapant (en mode normal) la lettre v (en minuscule). Vous pouvez vous déplacer à gauche et à droite, en haut et en vas pour surligner une zone exactement comme vous l'auriez faut avec une souris. Comme pour V vous pouvez appliquer des commande de copie, etc.

Pour le plaisir, le troisième mode visuel est le mode "bloc" accessible par Control-v. Très pratique pour supprimer des colonnes de texte mais pas seulement. Pour le fun, passez en mode insertion et saisissez trois mots, un par ligne. Revenez en mode normal par Esc, allez sur le premier caractère du premier mot puis pressez Control-v. Sélectionnez ainsi les 3 premiers caractère de vos trois mots et pressez I (majuscule) puis Mot: , puis enfin Esc. Magie, vos trois mots sont maintenant précédés par ce que vous venez de taper.

Des "astuces" comme cela, sans rigoler, il y en a des milliers. Mais déjà là, cela devrait suffire pour commencer à utiliser VIM sans prendre peur. Après le net est littéralement gavé de sites, tutoriaux et vidéos, expliquant tel ou tel aspect de ce fantastique éditeur. Il n'y a qu'à chercher vous trouverez votre bonheur à commencer par ces très bonnes planches visuelles pour se repérer dans les différents modes.

Ah oui, pour sauver votre texte, c'est :write ou :w en mode court...

Conclusion

À défaut de vous avoir expliquer toutes les arcanes de VIM, j'espère au moins vous avoir donné envie de l'essayer. Et croyez moi, je n'ai qu'à peine effleuré 1 petit pourcent du sujet. La customisation du VIM par exemple est un monde à part entière et chaque vimmer fini à terme par disposer d'un éditeur totalement personnalisé. Mais cela, nous le verrons une prochaine fois.

Ajouter un commentaire

Texte simple

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Image CAPTCHA