guest@6admin.io:~$

MyVim: l'IDE DevOps qui ne fait que 640 lignes, parce que le manager fait le reste

Voici l’épilogue d’une série qui a commencé avec apt pour Vim en 2016 , est passée par les submodules à la main , une réécriture VimScript et une saga durcissement v2 . MyVim, c’est ce que tout ça achète: myvim v0.4.0 n’est ni une distribution ni un gestionnaire de config. C’est un plugin de configuration personnelle, environ 640 lignes de VimScript et c’est délibérément ennuyeux.

L’architecture: la config comme plugin

Les plugins sont des git submodules gérés par vim-plugin-manager; MyVim est déclaré en dernier dans le bloc PluginBegin et ne livre que ce que les plugins ne peuvent pas savoir les uns sur les autres:

  • plugin/vim_*.vim: config Vim pure, sans plugin. Settings, mappings, alias, colorscheme, détection de filetypes.
  • plugin/plugin_*.vim: exactement un fichier par plugin (plugin_coc.vim, plugin_ale.vim, plugin_nerdtree.vim, …). La table de mapping dans le README documente qui possède quoi.

Tous les mappings globaux vivent dans un seul fichier (vim_mappings.vim), parce que la seule façon d’auditer un setup de keymaps est de le lire d’une traite. Le manager gère les versions et la reproductibilité; MyVim gère les opinions. Ce découpage est la raison de ses 640 lignes et pas 6 000: une distro réimplémente la gestion et la gestion est déjà faite.

Un IDE DevOps, scopé honnêtement

La table des filetypes se lit comme un CV de sysadmin: yaml/ansible, terraform, hcl, terragrunt, nix, helm , python, go, dockerfile, cloud-init, xml libvirt. coc.nvim comme hub LSP, ALE en front des linters. La partie intéressante, ce sont les règles de scoping qui gardent les linters génériques honnêtes:

  • un buffer yaml dont la première ligne commence par apiVersion: reçoit kubeconform buffer-locally; tout autre fichier yaml ne le voit jamais;
  • actionlint ne tourne que sur .github/workflows/;
  • terragrunt.hcl a son propre filetype terragrunt (alias de syntaxe HCL) pour que terragrunt-ls s’attache sans réclamer chaque fichier HCL nu, policies vault incluses;
  • les templates de charts Helm ont leur propre filetype helm pour que les linters yaml restent hors des fichiers templateés;
  • cloud-init est détecté par sa première ligne #cloud-config.

Un linter qui se déclenche sur le mauvais fichier est du bruit et le bruit vous apprend à ignorer le linter. Le scoping par contenu de buffer est toute l’astuce; il n’y a rien de plus, c’est pourquoi ça tient dans un fichier de config par plugin.

Le formatage tourne à la demande seulement (ale_fix_on_save = 0 exprès): pas de réécriture surprise de mes buffers quand je sauve, le fixer est à une touche (<leader>f).

Les détails qui le rendent mien

  • Les secrets restent dehors: plugin/*-secrets.vim est gitignored; la config fugitive pointe dessus et chaque copie du repo reste propre. swapdir/ et undodir/ sont créés automatiquement en mode 0700, parce que les fichiers d’undo se souviennent de tout ce que vous avez un jour ouvert.
  • OSC52 clipboard par SSH: sur les sessions distantes, un yank nourrit le presse-papiers local via la séquence d’échappement, sans build +clipboard; le plafond d’octets et l’opt-out viennent d’un vrai bug fix (#8: base64 portable, pas l’encodage naïf qui casse sur les terminaux 7 bits).
  • <F9> toggle de capture souris: mouse=a pour le scroll de l’éditeur, vide pour que la sélection et le copier/coller du terminal reprennent la main. L’état est écho au toggle. Ça paraît trivial, c’est la différence entre “vim a volé mon copier tmux ” et un terminal fonctionnel.
  • La dynastie des alias: command W w !sudo tee > /dev/null % et command Q qa, héritées de l’article .bashrc de 2009 , toujours en poste; côté shell, myflec ajoute la garde :q qui détecte les :terminal de vim via $VIMRUNTIME. Les trois typos les plus coûteuses de 2008 se neutralisent toujours en 2026.
  • L’IA sans quitter la philosophie: vim-ai contre un ollama local (endpoint compatible OpenAI), rôles dans roles.ini; copilot et codeium existent en plugins lazy optionnels pour le jour où un client les impose.

La v0.4.0 (septembre 2026) a arrondi la couverture DevOps: nix (LSP nil, deadnix/statix), filetype terragrunt, détection cloud-init/LXC, linting helm et k8s, swap du LSP python vers coc-pyright et le minimap restauré via le fork maintenu.

La boucle dogfood se referme

MyVim est la preuve vivante du manager: chaque plugin déclaré dans un bloc PluginBegin, un submodule par plugin sous pack/plugins/start/, des pins ré-assertés à chaque update, :PluginManager gc qui attrape mes orphelins, :PluginManager health qui vérifie le setup. Quand le manager a gagné ses fixes sécurité v2, MyVim a été le premier repo contre lequel ils ont tourné. Quatre générations d’outillage (aptogen 2016, bash 2018, VimScript 2025, durci 2026) et la config d’éditeur qu’ils servent tous fait 640 lignes d’opinions. Les outils se sont améliorés; les opinions ont à peine bougé.

[edit: 2026] L’implémentation Ansible de tout ceci: les rôles neovim et vim .