Tutoriel Vim

Septembre 2011

Vi et sa version améliorées, VIM, sont des éditeurs de textes bien connus des programmeurs.

Disponible sur toutes les plate-formes, il s'agit aussi de l'éditeur installé par défaut sur les systèmes BSD, Mac OS X, Linux, Unix et dérivés.

Compte tenu de la fréquence à laquelle un informaticien croise cet éditeur, il peut être intéressant de connaître quelques commandes pour débuter et utiliser la puissance de Vi ou VIM.

Vi ou VIM ?

Vi est l'éditeur historique disponible par défaut un peu partout (sur les OS cités précédemment). Mais il a été distancé par les éditeurs comme Emacs qui est beaucoup plus intuitif pour les utilisateurs.

Logiquement, VI a été étendu et une version appelée VIM est apparue. Cette version rajoute des fonctionnalités complémentaires qui en font un éditeur très apprécié par les développeurs informatiques et les ingénieurs systèmes.

D'une manière générale, il est préférable d'utiliser VIM qui propose beaucoup plus de choses pour l'utilisateur. Si ce n'est pas possible, Vi conviendra aussi très bien, même si certains fonctionnalités risquent de ne pas être présentes.

Les bases de VI ou VIM

Par défaut, un fichier ouvert Vi n'est pas modifiable. Pour modifier le fichier il faudra tapper la commande "i" dans l'éditeur.

Après avoir entré cette commande, le fichier est modifiable. Pour sortir du mode modification il faut appuyer sur la touche Echap de votre clavier.

Pour sauvegarder le fichier entrez la commande ":w". Si vous voulez quitter Vi (ou VIM) entrez la commande ":q".

Voici les bases pour utiliser cet éditeur génial qu'est Vi. Mais on peut aller un peu plus loin dans cet article servant d'introduction.

Quelques commande supplémentaires

Voici quelques commandes supplémentaires qui vous aideront grandement dans votre travail :

  • h : bouge le curseur à gauche
  • j : bouge le curseur vers le bas
  • k : bouge le curseur vers le haut
  • l : bouge le curseur à droite
  • w : bouge le curseur vers le mot suivant
  • b : bouge le curseur vers le mot précédent
  • 0 : bouge le curseur vers le début de la ligne
  • $ : bouge le curseur vers la fin de la ligne
  • nG : bouge le curseur vers la ligne n
  • control-f : page suivante
  • control-b : page précédente
  • i : insertion de texte (sortie avec la touche ESC)
  • dw : supprime le mot en cours (sortie avec la touche ESC)
  • cw : change le mot en cours (sortie avec la touche ESC)
  • r : remplace le caractère sous le curseur
  • ~ : change la casse (Majuscule -, minuscule -) du caractère sous le curseur
  • dd : supprime la ligne
  • x : supprime le caractère sous le curseur
  • ma : marque une position
  • d`a : supprime tout de la position marquée jusqu'au curseur
  • `a : retour à la position marquée
  • p : copie le texte du presse papier (peut être utilisé après la commande dd)
  • u : annule la dernière commande
  • . : répète la dernière commande
  • :w : enregistrer le fichier
  • :q! : quit Vi sans sauvegarde
  • /chaine : recherche la "chaine" dans le texte
  • n : répète la dernière recherche en passant à l'occurrence suivante
  • % : indique si la parenthèse ou le crochet à une correspondance (exemple : trouver qu'une parenthèse fermante a bien été ouverte dans le fichier)

Déplacements

  • A : ajouter à la fin de la ligne
  • $ : fin de ligne
  • ^: début de ligne
  • m* : ajoute une marque
  • '* : aller à la marque

Macros

  • q* : enregistrer une macro
  • @* : rejouer une macro
  • @@ : rejouer la dernière macro joué

Pour exécuter une commande shell sur le fichier

  • :! command %
  • :! indique qu'il faut exécuter une commande
  • command : nom de la commande shell
  • % : indique que la commande doit être exécutée sur le fichier du buffer courant

Par exemple pour exécuter le code lua du fichier en cours d'édition :

  • :! lua %

Indentation automatique du texte

Si vous utiliser Vim pour programmer vous allez avoir envie d'indenter du texte et ou des blocs de code informatique.

Pour ce faire utiliser la commande :set ai (ou :set auto-indent) pour activer l'indentation automatique de votre code.

Pour indenter une partie de votre texte, sélectionnez la portion du fichier concerné et appuyer sur la touche "=".

Correcteur orthographique de texte sous Vim

Vim peut aussi corriger votre orthographe si vous vous en servez pour rédiger des articles, mails ou autres documents.

L'activation de la correction s'effectue par la commande :set spell .

Il vous sera sans doute nécessaire de définir un dictionnaire (une langue) pour que la correction orthographique puisse fonctionner, ceci peut être fait avec la commande :setlocal spell spelllang=fr pour le français.

Une fois cet opération réalisée, il se peut que Vim ne trouve pas de dictionnaire pour cette langue. Suivant votre version de Vim, il vous demandera éventuellement s'il peut le télécharger automatiquement.

Afficher les numéros de lignes

Dans Vim, les numéros de lignes ne sont pas activées par défaut. Pourtant c'est quelque chose de très pratique pour la programmation.

Pour activer la numérotation des lignes dans Vim exécutez la commande suivante :set number .

Connaître les statistiques sur le texte

En cours d'édition Vim n'affiche que peu d'information sur le fichier en cours. Comme il peut être nécessaire de consulter des informations, les concepteurs de Vim on prévu une fonction statistique accessible via la commande "control+g".

N'oubliez pas de retourner au début du texte avec la touche "g" pour obtenir les informations concernant l'ensemble du fichier.

Police de caractères dans Vim

La gestion des polices de caractères dans Vim n'est pas toujours simple si on ne dispose pas d'interface graphique.

Pour connaître la police utilisée dans Vim tappez la commande :set gfn? .

Pour définir la police de caractère utilisez la commande :set guifont=Monaco:h12 (qui définit la police Monaco avec la taille 12).

.vimrc pour définir des commandes par défaut

Vous pouvez définir un fichier .vimrc qui sera dans votre dossier utilisateur pour pré-définir des propriétés par défaut.

Toutes les commandes Vim que vous mettrez dans ce fichier seront exécutées au démarrage de Vim. Il peut donc être utile de définir la police par défaut, l'affichage des numéros de ligne ou la correction automatique dans ce fichier.

Vim et les fichiers swap

Comme nous l'avons vu précédemment VIM est un super éditeur de fichiers textes multi-plateforme. Mais il faut bien le reconnaître, il supporte tellement d'options qu'on s'y perd un peu facilement.

Aujourd'hui nous allons nous intéresser à l'option qui permet de créer des fichiers temporaires "swap" et de sauvegarde "backup".

Cette option est activée par défaut dans VIM et permet en cas de problème de retrouver d'anciennes versions de fichiers.

Mais, il faut aussi dire qu'elle a tendance à pourrir un peu les répertoires dans lesquels on stocke ses fichiers puisque de nombreux fichiers .swp sont créés... Ainsi, certains n'hésitent pas à supprimer purement et simplement ces options dans VIM.

Si vous souhaitez vous aussi désactiver le swap et le backup dans VIM tapez les commandes ci-dessous :



    :set nobackup
    :set nowritebackup
    :set noswapfile

Ces commandes peuvent être rajouté au besoin dans votre fichier .vimrc si vous souhaitez les désactiver par défaut.

Correction orthographique avec MacVim

MacVim est un éditeur Vim pour Mac OS X.

Si vous êtes comme moi et que l'orthographe vous pose des problèmes, vous serez heureux d'obtenir une correction orthographique (sommaire) dans votre éditeur de code préféré : MacVim.

Pour l'activer, la procédure est assez simple. Il faut tout d'abord lancé le programme et tapper cette commande Vim :



    :set spelllang=fr

Ensuite :



    :set spell

Logiquement Macvim devrait vous demander si vous souhaitez télécharger le dictionnaire français et d'autres choses. Si vous répondez oui ensuite ce sera tout bon. Vous pourrez utiliser la commande spell pour activer la correction.

Plugin Syntastic pour vérifier la syntaxe de votre code

Vim est très puissant dans sa version de base mais il peut aussi être enrichi de nombreux modules qui viennent lui ajouter des fonctionnalités appréciables.

Ainsi, voici une présentation de Syntastic, un module / plugin pour Vim qui permet de faire une vérification de vos fichiers sources afin de vérifier que leur syntaxe est correcte et qu'une erreur ne s'y est pas glissée lors de l'édition.

Alors bien sûr, tous les langages de programmation ne sont pas toujours supportés mais voici la liste de ce que le plugin Syntastic peut vérifier : Ada, AppleScript, Bourne shell, C, C++, C#, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, DocBook, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, Go, Haml, Haskell, Haxe, HTML, Java, JavaScript, JSON, LESS, LISP, LLVM intermediate language, Lua, MATLAB, NASM, Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, Puppet, Python, reStructuredText, Ruby, Rust, SASS/SCSS, Scala, Slim, Tcl, TeX, Twig, TypeScript, Vala, VHDL, xHtml, XML, XSLT, YAML, z80, Zope page templates, zsh.

Pour vérifier ces langages, le plugin aura besoin du programme correspondant, mais il semble évident que si vous programmez en C++ ou PHP, vous ayez déjà ce qu'il faut d'installer sur votre machine.

Voici comment faire l'installation !

Tout d'abord, il vous faudra le plugin Pathogen qui permet de conserver une bonne organisation de votre répertoire .vim/

Pour installer Pathogen, procédez comme suit :



    mkdir -p ~/.vim/autoload ~/.vim/bundle; \
    curl -so ~/.vim/autoload/pathogen.vim \
    https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim

Ensuite, ajoutez cette ligne à votre fichier de démarrage .vimrc :



    execute pathogen#infect()

Maintenant que c'est fait, vous pouvez installer Syntastic comme cela :



    cd ~/.vim/bundle
    git clone https://github.com/scrooloose/syntastic.git

Si tout va bien, vous ne devriez pas voir d'erreur lors que dans Vim, vous exécutez la commande suivante :



    :Helptags

Maintenant, vous verrez apparaître les erreurs à la sauvegarde de votre fichier ! Bref, cela devrait vous faire économiser pas mal de temps dans vos travaux de développement / programmation informatique.

Bien configurer les fichiers temporaires, swap et undo de vim.

Ces fichiers, vous les avez sans doute croisés (les .swp), ils permettent d'annuler les modifications faites sur un fichier et de conserver une sauvegarde au cas où... J'avoue avoir longtemps travaillé en les désactivant purement et simplement.

Mais, il s'avère que c'est lorsqu'on en a le plus besoin qu'ils ne sont pas là !

Bref, plutôt que de me retrouver un jour pris au dépourvu, j'ai pris mon courage à deux mains pour tenter de comprendre comment cela fonctionne.

Du coup, voici les lignes à rajouter dans votre fichier de config .vimrc :


    set backupdir=~/.vimbackup/
    set directory=~/.vimswap/
    set undodir=~/.vimundo/
    set undofile

Ces lignes réalisent les choses suivantes au démarrage de vim :

  • indiquer le répertoire des fichiers backup
  • indiquer le répertoire des fichiers swap
  • indiquer le répertoire qui va contenir les fichiers d'annulation (undo)

Il faudra avoir au préalable créé les répertoires pour que cela fonctionne. Les répertoires sont à créer dans votre dossier utilisateurs et doivent commencer par un . (pour cet exemple).

Mais vous pouvez les mettre où vous les souhaitez.

La commande "set undofile" est présente pour activer le fichier d'annulation. Cela permet à vim de sauvegarder les différentes étapes d'édition de votre fichier afin de les retrouver de session d'édition en session.

Il est ensuite possible de voir ce qui se passe avec les commandes g- et g+ qui permettent de naviguer dans les fichiers d'annulation ainsi que la commande undolist qui permet d'afficher un récapitulatif.

Si vous voulez naviguer plus facilement dans l'arbre d'annulation du fichier, il faudra sans doute utiliser le plugin Gundo qui se propose de simplifier énormément la tâche (qui est vraiment pas simple avec vim).

Liens et ressources complémentaires

Normalement vous devriez vous en sortir a peu près avec Vi et Vim.

Si vous voulez plus d'information sur cet éditeur (et en attendant un futur article) voici quelques liens qui peuvent vous intéresser :