Vim l'éditeur superlatif

Tout ceux utilisant ou ayant utilisé Unix ont touché une fois ou l'autre à Vi. Malheureusement, ce premier contact à généralement été pénible. Les différents modes d'édition perturbent (vous savez, quand vous tapez et que rien ne s'affiche...). Lorsque l'on a trouvé comment insérer du texte, l'on arrive pas à effacer ou quitter et sauver son document. Face à cette sobriété, on croit être revenu 20 ans en arrière et on ne prolonge pas l'expérience.

PAS BIEN !!!

Dégoûté par ce premier contact, on se rabat vers des éditeurs beaucoup moins puissants, comme pico, dont le comportement (et les fonctionnalités) se rapproche du bloc-note.

Une autre confusion classique: Vi et Vim. Vi est un des éditeurs 'historique' d'Unix. Le développement a été arrêté depuis de longues années. Puissant pour l'époque mais peu convivial. Vim est un éditeur en constant développement, moderne, capable d'être compatible avec Vi (mais personne ne l'utilise plus ainsi). C'est à Vi, ou à Vim non configuré (compatible Vi), que vous avez générallement eu à faire.

Pourtant Vim est le meilleur éditeur au monde, son seul concurrent étant Emacs, une bataille sans fin les oppose. Le choix entre l'un ou l'autre est purement question de gôut. Les personnes de bon goût choisissent évidemment Vim.



Quelques points forts de Vim:
  • Multi-platteformes.
  • GPL, gratuit.
  • Gestion de centaines de languages avec leurs spécificités:
    • Coloration.
    • Indentation.
    • Style.
  • Folding (masquage de parties d'un texte ou programme).
  • Orienté clavier et rapidité d'édition.
  • Recherches, remplacements, expressions régulières.
  • Séléctions rectangulaires.
  • Extensible (script intégré, Perl, Python, Ruby).
  • Complétion automatique (mot clefs, fichiers, ...).
  • Undo/Redo multiples.
  • Macros.
  • Edition transparente de fichiers compressés.
  • Saisie de digraphs (´ + e => é).
  • Totalement personnalisable.
  • ...

Certains critiquent aussi la ligne de commande en argumantant que c'est l'interface des années 60. A ce moment on peut dire que les interfaces graphiques sont les interfaces des années 80. Oui, mais les interfaces graphiques ont évoluées ! Et vous pensez que la ligne de commande n'a pas fait de même ? Bien sûr, qu'elle à évoluée, mais contrairement à une interface graphique, les différences ne sautent pas aux yeux, la sobriété est restée.

Cet éditeur à plusieurs modes: le mode commande, le mode insertion, le mode visuel, le mode remplacement. Chacun de ses modes comprend des centaines de raccourcis. Au fil du temps nous apprenons de plus en plus de fonctions utiles, mais la majeur partie reste innutilisée. Il vaut mieux avoir trop de choix que pas assez.

Vim est considéré comme un logiciel à courbe d'apprentissage lente, la foison de commandes accentue cet Aspect. Le fait que les commandes aient une signification différente dans les différents modes également. Mais chaque utilisateur va apprendre à utiliser les commandes dont il a besoin, contrairement à d'autres éditeurs, cette fois le programme est moins limité que l'utilisateur. Une fois maîtrisé, c'est un éditeur ultra rapide, ou le nombre de touches tapées est réduit au minimum, ou les déplacements se font plus vite qu'avec une souris.

Généralement, Vim ne trouve tout son potentiel que lorsque l'utilisateur l'a configuré de manière optimale pour lui. Via le fichier de config principal (.vimrc) et via l'ajout de scripts suplémentaires. Vim se sert également de programmes externes: make pour la compilation, aspell pour la correction orthographique, ... Les fonctions que l'on utilise le plus souvent peuvent être très facilement reliées à des touches simples dans le fichier .vimrc.

Je vous propose ici, mon fichier .vimrc, le répertoire .vim contenant mes scripts favoris et un fichier update_vim.sh que vous pouvez charger, rendre exécutable et exécuter sur votre compte, afin d'avoir ma config. Ce fichier se chargera de downloader et d'installer ma config tout en backupant la votre.

Un petit exemple d'internationalisation

Quelques commandes de ma config

Sauf si indication, tout est en mode commande.

<Tab> Complète le mot (<C-t> pour insérer un tabulateur normal) [mode insertion].

<F1> Aide de mes fonctions.

<F2> Appelle make.

<F3> Appelle Sokoban (oui le jeu :-)

<F4> Fais apparâitre des menus en mode texte. Idéal pour un apprentissage en douceur.

<F5> Fais apparâitre cycliquement, numéro de lignes, caractères invisibles et numéros de lignes avec caractères invisibles.

<F6> Replie toute les fonctions en folder pour les languages de type C.

<F7> Fais apparaître une liste des fonctions d'un fichier (tous les languages supportés par ctags sont gerés), avec possibilité de sauter au début de la fonction ou de voir le prototype complet.

<F8> Winmanager Un explorateur de fichiers et de buffer.
<C-w> <C-f> Fenêtre de fichiers.
<C-w> <C-b> Fenêtre de buffers.

<F9> Change le thême (Parmis les thêmes personnels).

<F10> Change le thême (Parmis les thêmes fournis avec Vim).

<C-h> Aide des combinaisons avec Control.

<C-f> Correction via Aspell en français adaptée à TeX.

<C-e> Correction via Aspell en anglais adaptée à TeX.

<C-c> Commente la ligne.

<C-d> Insère la date dans le texte.

<C-x> Transforme le mot en balise [mode insertion].

<C-b> Supprime les espaces en bout de lignes.

;s Remplace 2 lignes vides par 1 seule dans tout le document.

;c Commente la ligne.

Points notables de ma config

  • Vimbuddy Un smiley indicatif dans la barre de status.
  • Barre de statut permanent et améliorée.
  • Alternate Passer des fichiers .h au .c (ou autres) en tapant :A.
  • Calendrier Tapez :Calendar
  • Edition directe des fichier gz ou bz2.
  • tabulateurs gérés en taille 4
Et bien d'autres détails, le tout largement commenté dans le fichier .vimrc. Sachez encore que vim complète vos commandes automatiquement en tapant sur . Pour avoir de l'aide tapez :help suivit de tab si vous ne savez pas exactement. Voila, j'espère que ceci vous aidera à prendre un nouveau départ avec ce fantastique éditeur, mais il est vrai que l'on ne peut comprendre sa puissance qu'après un certain temps d'utilisation. Tapez vimtutor pour un tutorial de base, ensuite lisez l'aide intégrée (parfois un peu barbare mais très complète).

Mon répertoire vim (.vimrc, scripts et auto-update)

Quelques raccourcis

Pour passer de n'importe quels modes au mode commande, appuyez sur <Esc>. Plusieurs fois si nécessaire.

Mode commande (Par défaut)

ZQ ou :q! Quitte sans sauver.
ZZ ou :wq Quitte en sauvant.
p Coller (Paste).
* Cherche le mot en dessous du curseur.
i Passage en mode insertion à l'endroit du curseur.
A Passage en mode insertion à la fin de la ligne.
o Crée un ligne sous la ligne actuelle et passe en mode insertion.
O Crée un ligne sur la ligne actuelle et passe en mode insertion.

Mode insertion

C-w Efface le mot précédent.
C-y Copie la lettre de la ligne en dessus sur la ligne courrante.
C-e Copie la lettre de la ligne en dessous sur la ligne courrante.
C-p, C-n Essaie de compléter le mot, continuer jusqu'à satisfaction.
C-x Appelle le mode complétion.
  • En mode complétion, la deuxième commande indique le type de complétion, et ensuite C-p et C-n servent à naviguer parmis les propositions.
  • C-l Essaie de compléter la ligne entière.
  • C-f Essaie de compléter un nom de fichier.
C-t Indentation de la ligne.
C-d Déindentation de la ligne.
C-a Réinserte le dernier texte inséré.
C-o Quitte pour une commande le mode insertion et y revient après.

Mode visuel

Passage en mode visuel. Trois types de blocs:

v Stream block, caractères contigus.
V Line block, lignes contigues.
C-v Box block, rectangle.

o Permet de redéplacer le début du bloc.

Opérations sur les blocs:

d Effacer(Delete).
y Copier (Yank).
x Couper.
U Mise en majuscules.
u Mise en minuscules.
~ Inverse la case.
< Déindenter.
> Indenter.
r Remplir un bloc avec un caractère (Taper ensuite le caractère.).

Macros

Enregistrement de macro: taper q#, # étant le numéro de la macro.
q Quitter l'enregistrement.
@# Jouer la macro.
Les macros restent entre les sessions.

Exemples pratiques

Insertion de l'output d'une commande externe

Tapez:
:r!la_commande
Par exemple pour insérer la liste des fichiers du répertoire courrant:
:r!ls

Tri d'un texte avec sort

Utilisation d'un programme externe Unix sur un texte dans Vim. Mettez vous en mode visuel (V), selectionnez la zone à traîter en déplaçant le curseur. Tapez:
:!sort
Ceci aura fait appel au programme sort sur les lignes selectionnées et l'output du programme aura remplacé, lesdites lignes.

Rechercher-Remplacer

Un petit exemple pratique, nous désirons remplacer le mot 'souteneur' par 'macro', tapez: :%s/souteneur/macro/gc
: Début classique d'une commande.
% Agit sur tout le document (portée de la commande).
s Substitution (la commande en elle-même).
/souteneur/macro/ Expression régulière Unix, ici trivial.
gc Option complémentaires:
  • g: plusieurs remplacements sur la même ligne.
  • c: demande la confirmation à l'utilisateur pour chaques remplacements.
Cette commande est une bonne illustration de la structure {portée}{commande}{paramètres}, en mode visuel par exemple, la portée est automatiquement associée à la partie sélectionée. La portée peut-être une ligne, une partie de ligne, un ensemble de lignes, un décallage.

Une EXCELLENTE page sur ce sujet !

Links

Vim.org - Site officiel

Vim Ressources - Scripts, thêmes, tips, l'essentiel de ma config est basée de scripts provenant de ce site

Vim Commands Summary

Vim pour écrire du LISP

Vim WebRing

Macro

Très bonne page en français expliquant en détails certains concepts (mark, macros, mapping, ...).

Célèbre tutorial Vi

The Cult Of Vi

Vi Lovers

Un excellent site

Vi vs emacs

Pourquoi Tim O'Reilly utilse Vi

Emacs vs Vi

Study of Vi and Emacs