apt pour Vim: l'histoire de vim-apthogen (2012-2016)
Entre 2012 et 2016, ma config Vim ressemblait à un système Debian vu par son gestionnaire de paquets: une pile de répertoires bundle/ installés à la main et vim-pathogen
qui faisait le chargement. Pathogen est honnête sur son rôle: c’est dpkg, le chargeur bête. Personne n’avait écrit l’apt au-dessus. Alors je l’ai écrit.
Le résultat: vim-apthogen
, publié sur vim.org le 12 avril 2016 (Vim 7.0, 1136 téléchargements, un karma de 19/6, des chiffres dont je suis déraisonnablement fier). La ligne du README que j’aime toujours: Like apt for dpkg, vim-apthogen is a frontend to vim-pathogen.
La métaphore, prise au sérieux
Quand on s’engage dans apt, le reste s’écrit tout seul:
.apthogen.list: l’index des paquets, une lignename@https://github.com/author/repopar plugin, exactement comme une sources list..required.list,.minimal.list,.recomended.list: les paliers de dépendances, tout droit sortis du jeu de sélection des tasks Debian.bundle-availlable/(typo incluse, elle est authentique) contient chaque plugin téléchargé; en activer un, c’est un symlink versbundle/, en désactiver un, c’est retirer le lien. Les admins Apache reconnaîtront plutôta2enmod/a2dismodqu’apt et j’assume cet emprunt.
Deux scripts, 291 lignes de bash
apthogen (225 lignes) parle les verbes attendus: install, remove, enable, disable, update, upgrade, list, search, show. netinstall (66 lignes) c’est le bootstrap: un curl | bash qui construit un ~/.vimnew tout neuf, l’infecte avec les modules requis et demande quel profil vous voulez:
[S]lim (Only Required Modules)
[M]inimal (Default)
[H]ighly Recomended
[R]ecomended
[W]hynot
[A]ll (Not Recomended For Testing Purpose)
[C]ancel
Enter your choice and press [Enter]: R
Et parce qu’un script de 2016 ne pouvait pas simplement dire “clonage”, la sortie est une leçon de biologie: Apthogen::Incubate, Apthogen::Infection, Apthogen::Propagate::required, Apthogen::Phagocyte::https://github.com/tpope/vim-pathogen, Apthogen::Evolve::nerdtree lors des upgrades. L’infection comme fonctionnalité. 2016 était une époque plus simple.
Ce qu’il faisait bien
Le couple enable/disable par symlink était la bonne idée. Il m’offrait “installé mais désactivé” gratuitement, des années avant que pack/plugins/opt n’existe dans Vim 8. La commande show était un joli tour de passe-passe aussi: elle allait chercher le README du plugin sur raw.githubusercontent.com et le passait à less, un proto-:help pour les plugins pas encore installés.
Ce qu’il faisait mal (la liste honnête)
- L’index des modules était reconstruit en parsant
.git/configavec grep et awk. Ça marchait jusqu’à ce que ça ne marche plus. installétait en réalité un alias deimport, non documenté et le bras*)du case avale tout, y compris ses propres typos.- La ligne d’usage dit
./aptogen(unhen moins). Publié. Pendant des années. showtéléchargeait du contenu distant et le passait àlessdans votre éditeur. Un petit footgun adjacent au remote code, que personne n’a exploité faute d’utilisateurs.- Tout est basé sur
cd. Le moindre échec vous laisse dansbundle-availlable.
C’est du bash d’époque: chaînes [[ ... ]]&&{ ... }||{ ... }, erreurs avalées par &>>$LOGS, fichiers de log horodatés. Je garde le zip (toujours sur vim.org
) comme une pièce de musée et c’en est une plus grande que je me le souvenais: avec les deux scripts, il livre un environnement complet, .vimrc inclus (qui s’ouvre sur runtime! debian.vim), des templates de fichiers pour bash/C/Perl/PHP/Python/XHTML, des fichiers de spell français et anglais, des fichiers de syntaxe en plus et six fichiers de config plugin/*.vim. Ce n’a jamais été juste un plugin manager; c’était une distribution avec apt attaché. Le repo GitHub est mort, le script_id est la pierre tombale; le zip est le mausolée.
L’échelle, pour l’instant
C’était le premier barreau. Quelques années plus tard, les plugins sont passés en git submodules avec un deuxième script bash (voir l’épisode suivant ), puis tout a été réécrit en VimScript sous le nom de vim-plugin-manager et durci pendant des années encore. Chaque génération a gardé une idée de la précédente:
- apthogen: verbes apt, split on/off, listes déclaratives.
- l’ère des submodules: le repo lui-même devient l’état, plus besoin d’index local.
- vim-plugin-manager: installations parallèles, pinning ré-asserté depuis le vimrc, lazy loading.
Le design a moins changé que la plomberie. C’est je crois la vraie leçon: poser la bonne métaphore tôt, puis passer une décennie à la rendre ennuyeuse.
[edit: 2026] L’implémentation Ansible de tout ceci: le rôle vim .