Le but de cet article est de vous présenter la puissance de Vim pour vous permettre de gagner en efficacité dans l'édition de fichiers de configuration ou autres fichiers texte.

Qu'est ce que Vim

Vim est un éditeur de texte basé sur Vi. Vi est assez difficile d'accès et ne sera pas le sujet de cet article.
Vim fonctionne en console, et si il existe des versions graphiques (gvim par exemple) je n'en parlerai pas dans cet article car ce n'est pas je pense l'intérêt de Vim.
Vim et Emacs sont souvent comparés pour leur puissance. Ce n'est pas entièrement vrai car Emacs s'apparente presque à un système d'exploitation tellement il peut comporter d'extensions (navigation internet, messagerie instantanée, lecteur de musique, jeux, ...) alors que Vim ne sert pratiquement qu'à éditer des fichiers, mais il le fait TRÈS bien.

Que dois-je installer ?

Vim est présent par défaut sur de nombreuses distributions Linux dont Ubuntu. Si which vim retourne un résultat du genre /usr/bin/vim c'est que vous l'avez, sinon, je suis certain que Vim sera disponible dans les dépôts de votre distribution.

Les 4 modes d'édition

Vim est difficile d'accès et je vais tenter de vous guider dans vos premiers pas tout en vous montrant la puissance du logiciel.

Vim présente quatre modes d'édition:

  • Le mode Commandes qui est le mode par défaut (mode dans lequel Vim se lance). C'est ce mode qui va vous permettre de faire des recherches, des remplacements, de naviguer rapidement dans un texte, d'enregistrer et d'appliquer des macros, ... Depuis n'importe quel autre mode il suffit de presser la touche Esc pour s'y ramener.
  • Les modes Insertion et Replacement qui fonctionnent à peu de choses près comme un éditeur de texte standard. Il faut appuyer sur Ins depuis le mode Commandes pour accéder à ce mode. C'est ce détail qui rebute le plus les débutants car ils se trouveront souvent à taper du texte en mode Commandes, oubliant d'appuyer sur Ins et verront Vim faire "n'importe quoi".
  • Le mode Visuel sert à sélectionner des lignes et des mots dans le texte. Ce mode est utile pour supprimer certaines parties du texte, effectuer des replacements dans une zone choisie, ... En appuyant sur V et non v vous entrez le mode Ligne Visuel et non Visuel qui sélectionne le texte ligne par ligne et non lettre par lettre, ce qui permet d'être très rapide. Il existe aussi un mode Bloc Visuel (Ctrl+v) très pratique lors de l'écriture de diagrammes.

Un résumé est disponible dans la figure suivante:
Les quatre modes d'édition de Vim

Ouvrir, enregistrer, fermer

Pour ouvrir un ficher tapez vim nom_du_fichier dans Vim. Si le fichier n'existe pas, il sera crée lorsque vous enregistrerez.
Pour enregistrer un fichier, assurez vous d'être en mode Commandes et tapez :w. :w mon_autre_fichier sert à enregistrer sous un autre nom.
Pour quitter Vim tapez :q en mode Commandes. Vim ne vous laissera pas quitter un fichier qui n'est pas enregistré: il faut taper :wq pour enregistrer et quitter ou :q! pour quitter sans enregistrer.

Se déplacer rapidement dans un texte

En mode commande, les touches h, j, k et l servent à se déplacer dans un texte (dans l'ordre: droite, un paragraphe vers le bas, un paragraphe vers le haut, gauche). Pour se déplacer d'une ligne et pas d'un paragraphe il faut appuyer sur g avant d'appuyer sur j ou k.
Bien sûr il est aussi possible de se déplacer dans le fichier texte avec les flèches mais c'est une méthode moins rapide car elle requiert plus de mouvements (si, si, ;) )

Ajoutons quelques autres commandes utiles:

  • w et b se déplacent d'un mot vers l'avant et d'un mot vers l'arrière.
  • ( et ) se déplacent phrase par phrase.
  • ^ et $ se déplacent au début et à la fin de la ligne (sur un clavier Français il faut appuyer deux fois sur ^ car ^ est une touche morte.
  • gg et G se déplacent au début et à la fin du document.
  • :54[Entrée] se déplace à la 54ème ligne du document (bien sûr ça marche avec n'importe quel numéro).
  • * et # aller à la prochaine et la précédente occurrence du mot sur le curseur. Hyper utile!!!
  • /toto et ?toto recherchent le mot toto en avant et en arrière.
  • n et p se déplacent à la prochaine et la précédente occurrence de la dernière recherche.
  • ma et `a permettent de marquer un endroit avec un signet et y aller. Bien sûr vous pouvez utiliser d'autres lettres que a. Le signet . représente le dernier endroit édité, et donc `. va au dernier endroit édité.

Annuler

En cas de bêtise, u annule la dernière action et Ctrl+R la refait.

Copier, couper, coller

En mode visuel, d, y servent à couper et copier la sélection.
En mode commande dd et yy servent à couper et copier la ligne courante.
De la même manière d5d et y5y servent à couper et copier 5 lignes depuis la ligne courante.

Comme je l'ai dit plus haut, w représente un mot donc y4w copiera 4 mots.
De la même manière $ représente la fin de la ligne et donc d$ supprimera tout le texte depuis le curseur jusqu'à la fin de la ligne.%% Vous vous rappelez de G qui représente la fin du fichier ? A votre avis comment supprimer tout le texte depuis la position du curseur jusqu'à la fin du fichier ?
Commencez-vous à comprendre la puissance de Vim ?

Dans tous les cas, p sert à coller après la lettre (si une sélection est dans le tampon) ou la ligne courante (si des lignes sont dans le tampon).

Les macros

Les macros permettent d'automatiser certaines actions.
En appuyant sur qa vous commencez l'enregistrement de la macro répondant au nom a. Vous pouvez alors supprimer du texte, ajouter des mots, ... Le bouton q sert a finir l'enregistrement.
Ensuite @a appliquera la macro a relativement a la position du curseur.

Par exemple si vous avez enregistré la macro : supprimer les trois premières lettres, aller à la fin de la ligne, insérer un point, aller à la ligne suivante, vous pouvez appliquer cette macro sur n'importe quelle ligne en vous plaçant au bon endroit avant de lancer la macro :)

Replacer du texte

Je compte faire un article sur les expressions régulières dans quelque temps, mais d'ici là :

  • :s/texte/nouveau_texte replace la première occurrence de texte[1] dans la ligne courante.
  • :s/texte/nouveau_texte/g replace toutes les occurrences de texte dans la ligne courante.
  • et :%s/texte/nouveau_texte/g replace toutes les occurrence de texte dans le fichier.

Lancer une commande en restant dans Vim

En tapant :!commande vous pouvez lancer une commande qui s'exécutera et vous affichera le résultat, mais sans quitter Vim.
Par exemple :!python fichier_courant.py exécutera le programme Python dans fichier_courant.py.

Je sais plus comment on fait

Si vous avez un doute, si vous voulez en savoir plus, une bonne méthode : :help ;)

Conclusion

Voilà ! Tout ça sonne une peu compliqué et long, mais avec un peu de persévérance vous apprendrez vite à vous servir de Vim et ensuite vous trouverez rapidement des solutions très efficaces à tous vos problèmes.
Ce que je présente ici ne représente pas un dixième voire un centième des possibilités de cet éditeur. Je n'ai pas parlé de l'édition de plusieurs fichiers dans une seule instance de Vim, de la possibilité de séparer la fenêtre en deux, de la coloration syntaxique, de toutes les fonctionnalités utiles pour programmer, ... et vous trouverez tout ça dans le :help.
N'hésitez pas à lire la documentation en ligne de ''Vim'' si tout ça vous plaît. Aussi, Efficient Editing with Vim est un excellent article dont je ne peux que recommander la lecture.

Notes

[1] texte peut-être une expression régulière