Éditeurs (Vim)

Écrire des textes en anglais et écrire du code sont des activités très différentes. En programmation, vous passez plus de temps à changer de fichier, à lire, à naviguer et à éditer du code qu’à écrire un long texte. Il est donc logique qu’il existe différents types de programmes pour écrire des textes en anglais et du code (par exemple, Microsoft Word ou Visual Studio Code).

En tant que programmeurs, nous passons la plupart de notre temps à éditer du code, et il en vaut la peine d’investir du temps dans la maîtrise d’un éditeur adapté à vos besoins. Voici comment apprendre un nouvel éditeur :

Si vous suivez la méthode ci-dessus, en vous engageant pleinement à utiliser le nouveau éditeur pour tous vos besoins d’édition de texte, la ligne du temps d’apprentissage d’un éditeur de texte se présente comme suit. En une heure ou deux, vous apprendrez les fonctionnalités de base de l’éditeur, telles que l’ouverture et la modification de fichiers, enregistrer/quitter et la navigation dans le texte. Au bout de 20 heures, vous devriez être aussi rapide qu’avec votre ancien éditeur. Après cela, les avantages commencent : vous aurez acquis suffisamment de connaissances et de mémoire musculaire pour que l’utilisation du nouvel éditeur vous fasse gagner du temps. Les éditeurs de texte modernes sont des outils sophistiqués et puissants, de sorte que l’apprentissage ne s’arrête jamais : vous deviendrez encore plus rapide au fur et à mesure que vous en apprendrez davantage.

Quel éditeur apprendre ?

Les programmeurs ont des opinions bien tranchées sur leurs éditeurs de texte préférés.

Quels sont les éditeurs les plus populaires aujourd’hui ? Voir cette enquête de Stack Overflow (il pourrait y avoir des biais car les utilisateurs de Stack Overflow ne sont pas forcément représentatifs de l’ensemble des programmeurs). Visual Studio Code est l’éditeur le plus populaire. Vim est l’éditeur en ligne de commande le plus populaire.

Vim

Tous les professeurs de ce cours utilisent Vim comme éditeur. Vim a une histoire riche ; il est issu de l’éditeur Vi (1976), et il est toujours en cours de développement aujourd’hui. Vim a des idées vraiment intéressantes, et c’est pourquoi de nombreux outils supportent un mode d’émulation Vim (par exemple, 1,4 million de personnes ont installé l’émulation Vim pour VS code). Vim vaut probablement la peine d’être appris même si vous finissez par utiliser un autre éditeur de texte.

Il n’est pas possible d’enseigner toutes les fonctionnalités de Vim en 50 minutes, c’est pourquoi nous allons nous concentrer sur l’explication de la philosophie de Vim, vous enseigner les bases, vous montrer quelques fonctionnalités plus avancées et vous donner les ressources nécessaires pour maîtriser l’outil.

La philosophie de Vim

En programmation, on passe le plus de son temps à lire/éditer, et non à écrire. C’est pourquoi Vim est un éditeur modal : il dispose de différents modes pour l’insertion de texte et la manipulation de texte. Vim est programmable (avec Vimscript et d’autres langages comme Python), et l’interface de Vim elle-même est un langage de programmation : les touches (avec des noms mnémoniques) sont des commandes, et elles sont composables. Vim évite l’utilisation de la souris, parce qu’elle est trop lente ; Vim évite même d’utiliser les touches fléchées, parce qu’elles nécessitent trop de mouvements.

Le résultat final est un éditeur qui peut s’adapter à la vitesse à laquelle vous pensez.

L’édition modale

La conception de Vim repose sur l’idée qu’une grande partie du temps des programmeurs est consacrée à la lecture, à la navigation et à de petites modifications, plutôt qu’à l’écriture de longs textes. C’est pourquoi Vim possède plusieurs modes de fonctionnement.

Les touches ont des significations différentes selon les modes de fonctionnement. Par exemple, la lettre x en mode Insert insère simplement le caractère littéral “x”, mais en mode Normal, elle supprime le caractère sous le curseur, et en mode Visual, elle supprime la sélection.

Dans sa configuration par défaut, Vim affiche le mode actuel en bas à gauche. Le mode initial/par défaut est le mode Normal. Vous passerez généralement le plus de temps entre le mode Normal et le mode Insert.

Vous pouvez changer de mode en appuyant sur <ESC> (la touche escape) pour passer de n’importe quel mode au mode Normal. En mode Normal, vous pouvez passer en mode Insert avec i, en mode Replace avec R, en mode Visual avec v, en mode Visual Line avec V, en mode Visual Block avec <C-v> (Ctrl-V, parfois aussi écrit ^V), et en mode Command-Line avec :.

Vous utiliserez souvent la touche <ESC> lorsque vous utiliserez Vim : envisagez de remapper Caps Lock par Escape (instructions pour macOS).

Notions de base

Insérer du texte

En mode Normal, appuyez sur i pour passer en mode Insert. Vim se comporte alors comme n’importe quel autre éditeur de texte, jusqu’à ce que vous appuyiez sur <ESC> pour revenir au mode Normal. Ceci, ainsi que les bases expliquées ci-dessus, sont tout ce dont vous avez besoin pour commencer à éditer des fichiers en utilisant Vim (bien que ce ne soit pas particulièrement efficace si vous passez tout votre temps à éditer à partir du mode Insert).

Buffers, onglets et fenêtres

Vim conserve un ensemble de fichiers ouverts, appelés “buffers”. Une session Vim comporte un certain nombre d’onglets, chacun d’entre eux comportant un certain nombre de fenêtres (split panes). Chaque fenêtre affiche un seul buffer. Contrairement à d’autres programmes que vous connaissez, comme les navigateurs web, il n’y a pas de correspondance 1 à 1 entre les buffer et les fenêtres ; les fenêtres sont simplement des “vues”. Un buffer donné peut être ouvert dans plusieurs fenêtres, même dans le même onglet. Cela peut être très pratique, par exemple, pour visualiser deux parties différentes d’un fichier en même temps.

Par défaut, Vim s’ouvre avec un seul onglet, qui contient une seule fenêtre.

Command-line

Le mode Command-line est accessible en tapant : en mode Normal. Votre curseur passera à la ligne de commande en bas de l’écran en appuyant sur :. Ce mode offre de nombreuses fonctionnalités, notamment l’ouverture, l’enregistrement et la fermeture de fichiers, ainsi que quitter Vim.

L’interface de Vim est un langage de programmation

L’idée la plus importante de Vim est que l’interface de Vim elle-même est un langage de programmation. Les frappes au clavier (avec des noms mnémoniques) sont des commandes, et ces commandes se composent. Cela permet des déplacements et des modifications efficaces, surtout une fois que les commandes sont devenues mémoire musculaire.

Déplacements

Vous devriez passer la plupart de votre temps en mode Normal, en utilisant les commandes de mouvement pour naviguer dans le buffer. Les mouvements dans Vim sont également appelés “noms”, car ils font référence à des morceaux de texte.

Selection

Modes Visual :

Vous pouvez utiliser les touches de déplacement pour effectuer une sélection.

Édition

Tout ce que vous faisiez auparavant avec la souris, vous le faites maintenant avec le clavier en utilisant des commandes d’édition qui se composent avec des commandes de mouvement. C’est ici que l’interface de Vim commence à ressembler à un langage de programmation. Les commandes d’édition de Vim sont également appelées “verbes”, car les verbes agissent sur les noms.

Comptes

Vous pouvez combiner des noms et des verbes avec un nombre, qui permet d’effectuer une action donnée un certain nombre de fois.

Modificateurs

Vous pouvez utiliser des modificateurs pour changer le sens d’un nom. Parmi les modificateurs, citons i, qui signifie “inner” ou “inside”, et a, qui signifie “around”.

Démonstration

Voici un exemple d’implémentation incorrecte de fizz buzz :

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('fizz')
        if i % 3 and i % 5:
            print(i)

def main():
    fizz_buzz(10)

Nous allons corriger les problèmes suivants :

Regardez la vidéo du cours pour la démonstration. Comparez la façon dont les modifications ci-dessus sont effectuées à l’aide de Vim à la façon dont vous pourriez effectuer les mêmes modifications à l’aide d’un autre programme. Remarquez que Vim ne nécessite que très peu de frappes, ce qui vous permet d’éditer à la vitesse à laquelle vous pensez.

Personnalisation de Vim

Vim est personnalisé via un fichier texte de configuration dans ~/.vimrc (contenant des commandes Vimscript). Il y a probablement beaucoup de paramètres de base que vous souhaitez activer.

Nous fournissons une configuration de base bien documentée que vous pouvez utiliser comme point de départ. Nous vous recommandons de l’utiliser parce qu’elle corrige certains comportements bizarres de Vim par défaut. Téléchargez notre configuration ici et sauvegardez-la dans ~/.vimrc.

Vim est hautement personnalisable, et cela vaut la peine de passer du temps à explorer les options de personnalisation. Vous pouvez vous inspirer des dotfiles d’autres sur GitHub, par exemple, les configurations Vim de vos instructeurs (Anish, Jon (utilise neovim), Jose). Il y a aussi beaucoup de bons articles de blog sur ce sujet. Essayez de ne pas copier-coller la configuration complète des gens, mais lisez-la, comprenez-la, et prenez ce dont vous avez besoin.

Extension de Vim

Il existe des tonnes de plugins pour étendre Vim. Contrairement aux vieux conseils que vous pouvez trouver sur Internet, vous n’avez pas besoin d’utiliser un gestionnaire de plugins pour Vim (depuis Vim 8.0). Au lieu de cela, vous pouvez utiliser le système de gestion de paquets intégré. Créez simplement le répertoire ~/.vim/pack/vendor/start/, et mettez-y les plugins (par exemple via git clone).

Voici quelques-uns de nos plugins préférés :

Nous essayons d’éviter de donner une liste trop longue de plugins ici. Vous pouvez consulter les dotfiles des instructeurs (Anish, Jon, Jose) pour voir quels autres plugins nous utilisons. Consultez Vim Awesome pour d’autres plugins Vim géniaux. Il y a également des tonnes d’articles de blog sur ce sujet : il suffit de chercher “best Vim plugins”.

Le mode Vim dans d’autres programmes

De nombreux outils prennent en charge l’émulation de Vim. La qualité varie de bonne à excellente ; selon l’outil, il se peut qu’il ne prenne pas en charge les fonctions les plus sophistiquées de Vim, mais la plupart d’entre eux couvrent assez bien les bases.

Le shell

Si vous utilisez Bash, utilisez set -o vi. Si vous utilisez Zsh, utilisez bindkey -v. Pour Fish, fish_vi_key_bindings. De plus, quel que soit le shell utilisé, vous pouvez utiliser export EDITOR=vim. Il s’agit de la variable d’environnement utilisée pour décider quel éditeur est lancé lorsqu’un programme veut démarrer un éditeur. Par exemple, git utilisera cet éditeur pour les messages de commit.

Readline

De nombreux programmes utilisent la librairie GNU Readline pour leur interface de ligne de commande. Readline supporte également l’émulation (basique) de Vim, qui peut être activée en ajoutant la ligne suivante au fichier ~/.inputrc :

set editing-mode vi

Avec ce paramètre, par exemple, la Python REPL prendra en charge les liens Vim.

Autres

Il existe même des extensions de raccourcis clavier Vim pour les navigateurs web - parmi les plus populaires, citons Vimium pour Google Chrome et Tridactyl pour Firefox. Vous pouvez même obtenir des liaisons Vim dans les Jupyter notebooks. Voici une longue liste de logiciels avec des raccourcis clavier de type Vim.

Vim avancé

Voici quelques exemples pour vous montrer la puissance de l’éditeur. Nous ne pouvons pas vous enseigner toutes ces choses, mais vous les apprendrez au fur et à mesure. Une bonne heuristique : chaque fois que vous utilisez votre éditeur et que vous pensez “il doit y avoir une meilleure façon de faire ceci”, il y en a probablement une : regardez en ligne.

Recherche et substitution

commande :s (substituer) (documentation).

Fenêtres multiples

Macros

Ressources

Exercices

  1. Finissez vimtutor. Note : il est préférable d’utiliser une fenêtre de terminal de 80x24 (80 colonnes par 24 lignes).
  2. Téléchargez notre vimrc de base et sauvegardez-le dans ~/.vimrc. Lisez le fichier bien commenté (en utilisant Vim !), et observez comment Vim se présente et se comporte légèrement différemment avec la nouvelle configuration.
  3. Installez et configurez un plugin : ctrlp.vim.
    1. Créez le répertoire des plugins avec mkdir -p ~/.vim/pack/vendor/start
    2. Téléchargez le plugin : cd ~/.vim/pack/vendor/start ; git clone https://github.com/ctrlpvim/ctrlp.vim
    3. Lisez la documentation du plugin. Essayez d’utiliser CtrlP pour trouver un fichier en naviguant jusqu’au dossier d’un projet, en ouvrant Vim et en utilisant la ligne de commande de Vim pour lancer :CtrlP.
    4. Personnalisez CtrlP en ajoutant une configuration à votre ~/.vimrc pour ouvrir CtrlP en appuyant sur Ctrl-P.
  4. Pour vous entraîner à utiliser Vim, refaites la démo du cours sur votre propre machine.
  5. Utilisez Vim pour tous vos travaux d’édition de texte pendant un mois. Si quelque chose vous semble inefficace, ou si vous pensez qu’il doit y avoir un meilleur moyen, essayez de chercher sur Google, il y en a probablement un. Si vous êtes bloqué, venez aux heures de permanence ou envoyez-nous un mail.
  6. Configurez vos autres outils pour qu’ils utilisent les “bindings” Vim (voir les instructions ci-dessus).
  7. Personnalisez davantage votre ~/.vimrc et installez d’autres plugins.
  8. (Avancé) Convertir du XML en JSON (fichier d’exemple) en utilisant les macros Vim. Essayez de le faire par vous-même, mais vous pouvez consulter la section sur les macros ci-dessus si vous êtes bloqué.

Modifier cette page.

Sous licence CC BY-NC-SA.