Vim-fu : utiliser vim pour les nuls !

Posted on sam. 14 mars 2015 in tuto

Vim est un éditeur de texte qui se base sur Vi (généralement installé par défaut sous Unix/Linux). Vim (Vi IMproved - Vi amélioré) ajoute de nombreuses fonctionnalités, qui transforment cet éditeur non graphique en un outil très puissant, notamment pour le code. Je l'utilise au quotidien comme éditeur de texte et de code, et même cet article est rédigé avec vim !

Mais Vim (et Vi aussi d'ailleurs) n'est vraiment pas intuitif, ce qui lui est souvent reproché. Du coup, aujourd'hui, je vous propose un premier tuto sur l'utilisation de Vim (du Vim-Fu, comme on dit) avec les usages les plus basiques. D'autres suivront sur les usages avancés, et vous pourrez voir toute la puissance de ce logiciel.

Edit : la suite est arrivée ! Vous pouvez la lire par là :

Notes préliminaires

  • Il y a une guerre incessante dans le monde Unix/Linux à propos des éditeurs de texte : la guerre entre Vim et Emacs. Je n'ai personnellement jamais utilisé Emacs, donc je ne peux pas comparer, mais je peux quand même proposer une réponse à "quel est le meilleur éditeur de texte/code" : tout simplement celui que vous maitrisez ! Je ne ferai pas de tuto pour Emacs, et j'ai trop l'habitude de Vim pour souhaiter apprendre à m'en servir, mais si vous voulez l'essayer n'hésitez pas à vous renseigner autour de vous. Pour ma part Vim correspond parfaitement à mon usage et j'en suis très content !
  • Ce tuto ne cherche pas a être exhaustif sur les (nombreuses) possibilités de vim, il y a des choses que je laisse volontairement de coté. N'oubliez jamais de vous référer à votre meilleur ami en cas de besoin : le man.
  • La casse est importante dans les commandes de Vim. Attention à bien respecter les majuscules/minuscules !

Installer et lancer Vim

Commençons par le début : si Vi est installé par défaut, il lui manque à mon avis un certain nombre de fonctionnalités pour être vraiment intéressant. Il faut donc installer Vim. Pour cela, je vous laisse gérer en fonction de votre distribution, voici les commandes pour celles que je connais bien :

  • Pour Debian/Ubuntu/Mint et toute autre distribution basées sur celles-ci :
apt-get install vim
  • Pour Archlinux/Manjaro :
pacman -S vim

Une fois le paquet et ses dépendances installées, on peut le lancer. La commande vim utilisée sans paramètres ouvrira un éditeur vierge, et il faudra spécifier le nom du fichier en enregistrant (voir plus loin). Vous pouvez aussi donner le nom d'un fichier en paramètre. Si le fichier existe, il sera ouvert pour la modification. Sinon, le fichier sera créé à l'enregistrement.

Les modes

Vim utilise quatre modes : normal, insertion, remplacement et visuel. Par défaut il se lance en mode normal.

Mode Normal

Le mode normal permet d'éxecuter des commandes. Ce que vous tapez n'est pas inséré dans le document, mais il est interprété par Vim si cela correspond à une commande qu'il connait.

Mode Insertion

C'est le mode classique des éditeurs de texte d'aujourd'hui. Le texte saisi au clavier est inséré au niveau du curseur.

Mode Remplacement

Le mode remplacement correspond à un éditeur de texte avec la touche "Inser" activée : le texte saisi au clavier remplace les caractères sous le curseur.

Mode Visuel

Le mode visuel permet de sélectionner des parties de texte, par exemple pour les copier ou les couper.

Naviguer entre les modes

  • Le mode de base est le mode Normal. Quelque soit votre mode actuel, vous pouvez revenir au mode normal en appuyant sur Echap.
  • Pour activer le mode Insertion depuis le mode normal, il faut taper i. Il y a plusieurs caractères qui permettent de passer en mode insertion, avec des variantes. J'utilise soit i, qui active juste le mode Insertion, ou aussi A, qui déplace le curseur au bout de la ligne courant et active le mode insertion.
  • Pour activer le mode Remplacement depuis le mode normal, il faut taper R. Vous pouvez aussi remplacer uniquement le caractère sous le curseur avec r. Vous tapez ensuite le nouveau caractère, et l'éditeur repasse automatiquement en mode normal.
  • Pour activer le mode Visuel depuis le mode normal, utilisez la touche v.

Enregistrer et quitter

Maintenant qu'on a pu saisir du texte en passant en mode insertion, il est temps d'enregistrer et de quitter. Pour cela, il faut repasser en mode normal pour pouvoir taper les commandes.

Pour enregistrer, la commande à saisir est :w. Elle s'affichera tout en bas de votre éditeur. Validez en tapant sur la touche Entrée Cela permet d'enregistrer le fichier dans le nom spécifié à l'ouverture. Si vous n'avez pas spécifié de nom à l'ouverture, ou que vous voulez enregistrer sous un autre nom, donnez le nom en paramètre : :w <nom du fichier>

Une fois enregistré, vous pouvez quitter avec la commande :q. Si vous avez effectué des modifications non enregistrées, vim refusera de quitter par sécurité. Vous pouvez forcer la sortie en utilisant la commande :q!.

Vous pouvez enregistrer et quitter en une seule commande : :wq. On peut aussi utiliser :x.

Petite blague au sujet de la commande de sortie de vim :
Vous savez comment on génère une chaine de caractères vraiment aléatoire ?
On prend un utilisateur de Windows, on le met devant vim, et on lui demande de quitter.

Numéros de ligne et incrémentation automatique

Deux indispensables pour les codeurs : l'affichage des numéros de ligne et l'auto-incrémentation. En mode normal, tapez la commande :se nu pour les numéros, et :se ai pour l'auto-incrémentation. Pour les désactiver, utilisez :se nonu et :se noai.

Il faut saisir ces commandes à chaque lancement de Vim, ce qui n'est pas très pratique. Dans la deuxième partie de ce tuto, on verra comment mettre ça dans le fichier de configuration pour que ça soit activé automatiquement à chaque lancement.

Supprimer rapidement des éléments

Jusqu'à maintenant, vim n'a rien d'exceptionnel, c'est même pas franchement pratique. Maintenant on va commencer à voir quelques trucs rigolos :

Pour supprimer une ligne d'un seul coup, placez le curseur sur la ligne en question en mode normal, et tapez dd. Magique ! La ligne à disparu !

"Hey c'est nul, tu nous vends du rêve pour ça ?"

Oui, mais non. Maintenant supposons que je veux supprimer deux lignes consécutives. Je me place alors sur la première, et je tape d2d. Et les deux sont supprimées !

De la même manière, si je veux supprimer le mot directement après le curseur, je tape dw. Et si je veux supprimer 15 mots après le curseur, je tape d15w.
A noter qu'on peut utiliser w pour se déplacer de mots en mots. Pour se déplacer de 3 mots d'un coup, il suffit de faire 3w.

De la même manière, je peux supprimer tous les élèments jusqu'à la fin de la ligne. La commande est d$. La commande $ permet de déplacer le curseur à la fin de la ligne.
À l'inverse, je peux supprimer tous jusqu'au début de la ligne, avec d^. Attention, sous Linux, pour faire apparaitre l'accent circonflexe seul il faut soit le presser deux fois, soit une fois suivi du caractère Espace. Et pour envoyer le curseur en début de ligne, vous pouvez utiliser ^.
L'utilisation de ^ et $ pour les débuts et fins de lignes rappellera sûrement quelque chose aux habitués des expressions régulières perl !

Pour faire de la suppression de caractère, la commande est x. Donc pour supprimer 37 caractères, il suffit de taper 37x.

Ça commence à devenir pratique non ?

Annuler

"Aaaargh j'ai supprimé trop de trucs comment on revient en arrière ?"

Toujours en mode normal, avec la commande très compliquée : u comme "undo". Et si vous appuyez une fois de trop sur u, vous pouvez refaire (redo) la dernière action annulée avec Ctrl-r.

Copier/Couper-Coller des lignes entières

On va commencer par le couper coller, vu que vous en connaissez déjà la moitié ! Eh oui, dd ne supprime pas seulement les lignes, elle les mets dans le presse papier. Pour les coller, il suffit, en mode normal, d'appuyer sur la touche p comme "paste". La ligne sera collée à la suite de la ligne du curseur.

Pour copier, la commande est yy, ou pour plusieurs lignes y6y. Et toujours p pour coller.

Copier/Couper-Coller en mode visuel

Le mode visuel vous permet de sélectionner du texte. Sélectionnez le texte que vous voulez couper ou copier, et appuyez sur d pour couper ou y pour copier. Ensuite, collez simplement en utilisant p. Pratique non ?

Aller à la ligne x

En mode normal, vous pouvez envoyer le curseur à la ligne 18 en tapant :18 et en validant avec Entrée. Vous pouvez aussi aller en haut du fichier avec gg ou en bas avec G

Rechercher du texte

En mode normal, pour rechercher la chaine "foobar", tapez /foobar puis entrée. Le curseur se placera automatiquement sur la première occurence trouvée. Tapez n pour passer à l'occurence suivante.

La suite ?

Et voila pour ce premier tuto sur les commandes de bases. C'est en gros toutes celles que j'utilise au quotidien.

A venir, une partie sur le fichier de configuration de vim, une partie sur les commandes un peu plus avancées, et enfin une partie avec quelques plugins sympa.

Si vous avez des remarques ou suggestion pour améliorer ce tuto hésitez pas à le dire en commentaire !

A bientôt !