sim face à Vim, Neovim et Helix
Vim, Neovim et Helix sont des éditeurs matures et capables, et sim est nouveau. Ce tableau ne couvre que ce qui peut être vérifié dans une source primaire : la documentation des éditeurs eux-mêmes, les entrées CVE, les notes de version et les gestionnaires d’issues. Là où les sources ne disent rien, le tableau ne dit rien non plus.
Vérifié le 2026-10-17. Dernières versions à cette date : Vim 9.2.1202, Neovim 0.12.6, Helix 25.07.1.
| Sujet | Vim | Neovim | Helix | sim |
|---|---|---|---|---|
| Système d’extensions | Vim script et paquets.[1] | Lua, et plugins Vim script.[2] | Aucun système de plugins dans une version publiée. Un système de plugins Scheme (Steel) est une pull request ouverte, à l’état de brouillon (#8675, mise à jour le 2026-10-09). La dernière version est la 25.07.1 (juillet 2025).[3] [4] | Aucun, par conception : les plugins figurent dans sa liste de ce qu’il ne construit pas. |
| Modelines (réglages dans un fichier) | Activées par défaut (désactivées pour root). Depuis le patch 9.2.0350 (avril 2026), seule une courte liste d’options peut être définie depuis une modeline ('modelinestrict', activée par défaut). CVE passés : CVE-2019-12735, CVE-2026-34982.[5] [6] [7] [8] | Activées par défaut (désactivées pour root) ; 'modelineexpr' est désactivée. Le manuel recommande de désactiver les modelines avant d’éditer du texte non fiable. CVE-2019-12735 a été corrigé dans la 0.3.6.[9] [7] | N’analyse pas les modelines : la demande (#729) est ouverte, et une pull request (#7788) a été fermée sans fusion.[10] [11] | Jamais lues. Les réglages et les commandes ne viennent pas du contenu des fichiers. |
| Configuration locale au projet | 'exrc' est désactivée par défaut. Le manuel qualifie son activation de « a potential security leak » (une faille de sécurité potentielle) et dit « BETTER NOT SET THIS OPTION! » (mieux vaut ne pas activer cette option !).[5] | 'exrc' est désactivée par défaut. Lorsqu’elle est activée, .nvim.lua, .nvimrc et .exrc ne s’exécutent que si le fichier figure dans la liste de confiance (:trust).[9] | Charge un .helix/config.toml depuis l’espace de travail (documenté pour la 25.07.1). La confiance dans l’espace de travail (workspace trust), qui demande avant d’agir (PR #15177, fusionnée en mars 2026), se trouve sur la branche de développement et dans aucune version pour l’instant.[12] [13] [14] [3] | Aucun fichier de configuration, et aucune configuration locale au projet à charger. |
| Caractères de contrôle bidirectionnels (U+202E et compagnie) | Affiché <202e> : le manuel dit que les caractères Unicode non imprimables et de largeur nulle sont affichés sous la forme <xxxx>, et que la coloration SpecialKey est utilisée pour les caractères non imprimables.[5] | Affichés <202e>, <2066> et ainsi de suite, avec la coloration SpecialKey (cyan dans le jeu de couleurs par défaut, dans notre test) : U+200B–200F, U+202A–202E, U+2060–206F et U+FEFF figurent dans sa table des caractères non imprimables.[9] [15] | Aucun marqueur visible dans la version 25.07.1 (ils occupent une cellule vide dans notre test). Les caractères de largeur nulle font l’objet d’une issue ouverte (#11255), et les caractères de contrôle sont écrits tels quels dans le terminal (#16320, ouverte).[16] [17] [3] | <U+202E> sur un bloc magenta dans tous les états, jamais envoyé tel quel. Le texte littéral <U+202E> ne reçoit aucun bloc. |
| Fichier modifié par un autre processus | Mémorise l’horodatage, le mode et la taille du fichier et avertit quand ils diffèrent (vérifié après les commandes shell, dans l’interface graphique à la prise de focus, et par :checktime) ; 'autoread' recharge un tampon que vous n’avez pas modifié.[18] | Mêmes vérifications et mêmes avertissements ; 'autoread' recharge un tampon que vous n’avez pas modifié.[19] | Une écriture est refusée avec le message « file modified by an external process, use :w! to overwrite » (« fichier modifié par un processus externe, utilisez :w! pour écraser », cité dans #6492). Le rechargement automatique est une demande ouverte (#1125).[20] [21] | Surveille le fichier ouvert, signale ce qui a changé dans le texte, l’onglet et l’arborescence, et compare l’empreinte du fichier avant d’enregistrer ; n’écrit rien si le fichier a changé. Une écriture au même instant que cette vérification peut encore passer. |
sim : la spécification du projet lui-même (README.md, SPEC.md, sim/SPEC.md, sim/CONCEPT.md).
Ce que les autres font encore mieux, pour l’instant
sim échange l’étendue contre un comportement fixe et vérifiable. Si vous avez besoin de l’un de ces éléments dès aujourd’hui, utilisez les autres.
- Neovim et Helix intègrent un client de serveur de langage. sim n’en a pas encore ; un client dans un bac à sable est prévu.[27] [28]
- Vim et Neovim peuvent être étendus par des paquets et des plugins. sim n’offrira pas de plugins.[1] [2]
- Vim et Neovim enregistrent et rejouent des macros. sim n’a pas encore de macros ; elles sont prévues. Les registres et les marques sont dans sim 0.2.0.[1]
Comment cela a été vérifié
La documentation est épinglée sur le tag de la dernière version. Les issues et les pull requests sont citées dans l’état où elles se trouvaient à la date ci-dessus, et cet état peut changer. Quand une ligne dit « dans notre test », nous avons ouvert un fichier contenant un véritable U+202E dans la version nommée et regardé ce qui était dessiné ; les sources ne peuvent pas le dire à notre place. Si un élément est périmé ou erroné, il doit être corrigé.
Sources
- Vim 9.2.1202, runtime/doc/repeat.txt (packages, recording)
- Neovim, Lua guide
- Helix 25.07.1 release (the latest, July 2025)
- Helix PR #8675: Add Steel as an optional plugin system (draft, open)
- Vim 9.2.1202, runtime/doc/options.txt ('modeline', 'modelinestrict', 'exrc', 'isprint', 'fsync')
- Vim patch 9.2.0350: Enabling modelines poses a risk ('modelinestrict')
- NVD: CVE-2019-12735 (Vim before 8.1.1365 and Neovim before 0.3.6, modeline)
- NVD: CVE-2026-34982 (Vim before 9.2.0276, modeline sandbox bypass)
- Neovim 0.12.6, runtime/doc/options.txt ('modeline', 'modelineexpr', 'exrc', 'isprint', 'fsync')
- Helix issue #729: Vim modeline parsing (open)
- Helix PR #7788: add basic modeline support (closed, not merged)
- Helix 25.07.1, book/src/configuration.md (a config.toml local to a project)
- Helix PR #15177: Add workspace trust support (merged 2026-03-26)
- Helix development branch, book/src/workspace-trust.md
- Neovim 0.12.6, src/nvim/mbyte.c (utf_printable)
- Helix issue #11255: Substitute unprintable characters in a buffer (open)
- Helix issue #16320: C0 control characters are written raw (open)
- Vim 9.2.1202, runtime/doc/editing.txt (timestamps)
- Neovim 0.12.6, runtime/doc/editing.txt (timestamps, 'autoread')
- Helix issue #6492: make the “file modified by an external process” message louder
- Helix issue #1125: automatic reload when file changes externally (open)
- sim, NOTES.md at commit d3caae2: “Hidden characters in Neovim 0.12.5, measured against sim” (2026-10-18)
- The Unicode Standard 18.0, chapter 23, Special Areas and Format Characters (§23.4 Variation Selectors, §23.9 Tag Characters)
- Unicode Technical Standard #51: Unicode Emoji, revision 31 (ZWJ sequences, emoji tag sequences, Annex C)
- Johann Rehberger, ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes (Embrace The Red, 14 January 2024)
- Endor Labs, Invisible Threats and the Blind Spots of Security (an analysis of GlassWorm)
- Neovim, LSP client
- Helix README (features)

