Introduction rapide à Vim
Geek
Par djib le samedi 5 août 2006, 15:02 - Lien permanent
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:

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:
wetbse 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.ggetGse 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!!!/totoet?totorecherchent le mot toto en avant et en arrière.netpse déplacent à la prochaine et la précédente occurrence de la dernière recherche.maet`apermettent de marquer un endroit avec un signet et y aller. Bien sûr vous pouvez utiliser d'autres lettres quea. 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_textereplace la première occurrence detexte[1] dans la ligne courante.:s/texte/nouveau_texte/greplace toutes les occurrences detextedans la ligne courante.- et
:%s/texte/nouveau_texte/greplace toutes les occurrence detextedans 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



Commentaires
Salut Djib,

Ce billet explique très bien les bases de cet excellent éditeur.
Bravo
Pour ceux qui souhaitent s'approfondir, je leur recommande vivement la lecture du livre www.truth.sk/vim/vimbook-... (disponible dans les liens du billet).
Dans une vie antérieure, j'ai traduit la CHEAT SHEET, ou feuille de triche, ou aide-mémoire utilisée par les IBMeurs. Elle est toujours dispo ici : tuxer.free.fr/article.php...
Toute la puissance de Vim sur une page A4.
Vi ... tout simplement le meilleur éditeur de texte du monde !
Czernai, je viens de lire la feuille de triche. C'est un peu maigrichon mais c'est pratique pour un débutant.
David2b, oh que oui.
Sinon, c'est beaucoup mieux de taper :
vimtutor
Au moins, ça permet, en 20 minutes, d'avoir tout clés en main.
Benoit
Vimtutor est effectivement excellent. Je ne savais pas qu'il existait une version française (en tapant vimtutor fr). Merci pabix.
mervi pour ce rappel, et les liens avec,
par contre j'ai une critique objective, dans la partie "remplacer du texte" il faut savoir que le "texte" peut êter une expression régulière (ce qui augmente grandement la puissance de la chose), aussi la troisième commande de cette section ne remplaceras que la première occurence de chaques lignes non? il faudrait rajouter le "g" de la ligne précédante...
bon boulot sinon.
et Vim ça roXXe
C'est pour montrer qu'il est surpuissant qu'il est aussi tordu d'utilisation ?? J'utilise un éditeur texte "normal" (scite) sur lequel je peux faire pas mal de trucs sans pour autant réapprendre la vie de zéro...
L'engouement pour vi ou emacs me dépasse;
quand je suis en mode console, c'est que j'ai cassé un truc (xorg.conf par exemple), j'utilise alors le plus souvent nano, qui est simplissime et qui me sort du pétrin ...
giz404, vim est tout un esprit. Après tout, un informaticien, ou plutôt un geek, est quelqu'un perds des heures à gagner des secondes.
Imaginons que tu veuilles changer dans un texte toutes les instances de "toto" en "tata", avec vim je te fais ça en 5 secondes montre en main (y compris ouverture, enregistrement et fermeture du fichier). Avec nano je table plus sur une quinzaine de secondes. Avec un éditeur graphique... n'en parlons pas.
Merci Asher256. Désolé j'avais loupé ton message qui a été bloqué par le filtre anti-spam
Merci beaucoup pour le livre, je vais lire ça.
tshirtman, merci pour l'oubli du g. Sinon pour ce qui est des expressions régulières c'est pour ça que j'avais mis la phrase sur les expressions régulières juste avant de détailler les différentes méthodes... Enfin bon, j'ai réjouté une note plus explicite.
Avec nano je ne sais pas. Avec un éditeur graphique (Scite au hasard) ça doit prendre le même temps.
giz404, je connais pas scite, je vais y jeter un coup d'oeil...
Si je puis me permettre, il y a une alternative à vim : Cream ! un éditeur basé sur gvim qui possède une VRAIE interface utilisateur (avec des menus, des icônes et tout ça:) et qui s'utilise normalement
enfin, pour tout être humain normal , non g33k, quoi 
Je vais tester... mais gvim il y a déjà les menus et les icônes