sim vs. Vim, Neovim und Helix
Vim, Neovim und Helix sind ausgereifte, leistungsfähige Editoren, und sim ist neu. Diese Tabelle behandelt nur, was sich an einer Primärquelle prüfen lässt: den eigenen Dokumentationen der Editoren, CVE-Einträgen, Release Notes und Issue-Trackern. Wo die Quellen nichts sagen, sagt die Tabelle nichts.
Geprüft am 2026-10-17. Aktuelle Releases damals: Vim 9.2.1202, Neovim 0.12.6, Helix 25.07.1.
| Thema | Vim | Neovim | Helix | sim |
|---|---|---|---|---|
| Erweiterungssystem | Vim script und Pakete.[1] | Lua und Plugins in Vim script.[2] | Kein Plugin-System in einem Release. Ein Plugin-System in Scheme (Steel) ist ein offener Draft-Pull-Request (#8675, aktualisiert 2026-10-09). Das neueste Release ist 25.07.1 (Juli 2025).[3] [4] | Keines, mit Absicht: Plugins stehen auf der Liste dessen, was es nicht baut. |
| Modelines (Einstellungen in einer Datei) | Standardmäßig an (für root aus). Seit Patch 9.2.0350 (April 2026) dürfen aus einer Modeline nur noch wenige ausgewählte Optionen gesetzt werden ('modelinestrict', standardmäßig an). Frühere CVEs: CVE-2019-12735, CVE-2026-34982.[5] [6] [7] [8] | Standardmäßig an (für root aus); 'modelineexpr' ist aus. Das Handbuch rät, Modelines zu deaktivieren, bevor nicht vertrauenswürdiger Text bearbeitet wird. CVE-2019-12735 wurde in 0.3.6 behoben.[9] [7] | Parst keine Modelines: Die Anfrage (#729) ist offen, und ein Pull Request (#7788) wurde geschlossen, ohne gemergt zu werden.[10] [11] | Wird nie gelesen. Einstellungen und Befehle stammen nicht aus Dateiinhalten. |
| Projektlokale Konfiguration | 'exrc' ist standardmäßig aus. Das Handbuch nennt das Einschalten „a potential security leak“ (ein mögliches Sicherheitsleck) und sagt „BETTER NOT SET THIS OPTION!“ (diese Option besser nicht setzen).[5] | 'exrc' ist standardmäßig aus. Ist es an, werden .nvim.lua, .nvimrc und .exrc nur ausgeführt, wenn die Datei in der Vertrauensliste steht (:trust).[9] | Lädt eine .helix/config.toml aus dem Workspace (für 25.07.1 dokumentiert). Workspace Trust, das vorher nachfragt (PR #15177, gemergt im März 2026), liegt auf dem Entwicklungszweig und ist in noch keinem Release enthalten.[12] [13] [14] [3] | Keine Konfigurationsdateien und keine projektlokale Konfiguration, die sich laden ließe. |
| Bidirektionale Steuerzeichen (U+202E und Verwandte) | Angezeigt als <202e>: Das Handbuch sagt, nicht druckbare Unicode-Zeichen und Zeichen mit Breite null würden als <xxxx> angezeigt, und dass für nicht druckbare Zeichen die SpecialKey-Hervorhebung verwendet werde.[5] | Angezeigt als <202e>, <2066> und so weiter, in der SpecialKey-Hervorhebung (in unserem Test Cyan im Standard-Farbschema): U+200B–200F, U+202A–202E, U+2060–206F und U+FEFF stehen in seiner Tabelle der nicht druckbaren Zeichen.[9] [15] | Im Release 25.07.1 keine sichtbare Markierung (in unserem Test belegen sie eine leere Zelle). Zeichen mit Breite null sind ein offenes Issue (#11255), und Steuerzeichen werden roh ins Terminal geschrieben (#16320, offen).[16] [17] [3] | <U+202E> auf einem magentafarbenen Block in jedem Zustand, nie roh gesendet. Der wörtliche Text <U+202E> bekommt keinen Block. |
| Eine von einem anderen Prozess geänderte Datei | Merkt sich Zeitstempel, Modus und Größe der Datei und warnt bei Abweichung (geprüft nach Shell-Befehlen, in der GUI beim Fokuswechsel und per :checktime); 'autoread' lädt einen Puffer neu, den Sie nicht geändert haben.[18] | Dieselben Prüfungen und Warnungen; 'autoread' lädt einen Puffer neu, den Sie nicht geändert haben.[19] | Ein Schreibvorgang wird mit „file modified by an external process, use :w! to overwrite“ (Datei von einem externen Prozess geändert, mit :w! überschreiben) abgelehnt (zitiert in #6492). Automatisches Neuladen ist eine offene Anfrage (#1125).[20] [21] | Beobachtet die geöffnete Datei, markiert Geändertes in Text, Tab und Dateibaum und vergleicht vor dem Speichern den Hash der Datei; ist sie geändert, wird nichts geschrieben. Ein Schreibvorgang im selben Augenblick wie diese Prüfung kann trotzdem durchrutschen. |
sim: die eigene Spezifikation des Projekts (README.md, SPEC.md, sim/SPEC.md, sim/CONCEPT.md).
Was die anderen vorerst noch besser können
sim tauscht Breite gegen ein festes, überprüfbares Verhalten. Wenn Sie eines davon heute brauchen, nehmen Sie die anderen.
- Neovim und Helix liefern einen Language-Server-Client mit. sim hat noch keinen; ein Client in einer Sandbox ist geplant.[27] [28]
- Vim und Neovim lassen sich mit Paketen und Plugins erweitern. sim wird keine Plugins anbieten.[1] [2]
- Vim und Neovim zeichnen Makros auf und spielen sie ab. sim hat noch keine Makros; sie sind geplant. Register und Marken sind in sim 0.2.0.[1]
Wie das geprüft wurde
Die Dokumentation ist an das jeweils neueste Release-Tag gebunden. Issues und Pull Requests werden mit dem Stand zitiert, den sie am oben genannten Datum hatten, und dieser Stand kann sich ändern. Wo eine Zeile „in unserem Test“ sagt, haben wir im genannten Release eine Datei mit einem echten U+202E geöffnet und uns angesehen, was gezeichnet wird; die Quellen können das nicht für uns sagen. Ist hier etwas veraltet oder falsch, sollte es korrigiert werden.
Quellen
- 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)

