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.

ThemaVimNeovimHelixsim
ErweiterungssystemVim 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 DateiMerkt 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).

Unsichtbare Zeichen, gemessen

Für jede Art von Zeichen, die nichts zeichnet oder auf das Terminal wirkt, zeigt diese Tabelle, was Neovim 0.12.5 und sim anzeigten, als eine kleine Datei damit in einem Terminal geöffnet wurde. Nur Neovim wurde gemessen, deshalb ist es der einzige andere Editor in dieser Tabelle.

Gemessen am 2026-10-18: Neovim 0.12.5 (nvim --clean) und sim im Commit d3caae2, der in sim 0.2.0 enthalten ist. Neovim 0.12.6, das neueste Release, wurde nicht gemessen.[22]

Art des ZeichensNeovim 0.12.5sim
U+200B Leerzeichen mit Breite null<200b><U+200B>
U+200D Zero-Width-Joiner zwischen Buchstabenroh<U+200D>
Trojan Source: U+202E, U+2066, U+2069<202e> <2066> <2069><U+202E> <U+2066> <U+2069>
Tag-Zeichen (ASCII smuggling)roh<U+E0049> …
Variantenselektoren hinter einem Buchstaben (U+FE00–FE03, U+E0155 und ähnliche)roh<U+FE00> … <U+E0155> …
ein ideografischer Variantenselektor hinter einem Kanjiroh葛<U+E0100>
Hangul-Füllzeichen U+3164, U+115F, U+FFA0roh<U+3164> <U+115F> <U+FFA0>
weicher Trennstrich U+00AD und Grapheme Joiner U+034Froh<U+00AD> <U+034F>
Word Joiner U+2060<2060><U+2060>
Zeilentrenner U+2028roh<U+2028>
nicht zugewiesen U+0378, Nichtzeichen U+FDD0roh<U+0378> <U+FDD0>
Nichtzeichen U+FFFF<ffff><U+FFFF>
U+FEFF mitten in einer Datei<feff><U+FEFF>
ESC und DEL^[ ^?^[ ^?
C1-Steuerzeichen U+0085<85><U+0085>
privater Bereich (Nerd-Font-Symbole)unverändertunverändert
Emojis mit Joinern und Selektoren, ein Keycap, die Flagge von Englandunverändertunverändert

Von den 15 Arten, die sim zeigt, markierte Neovim 7 und zeichnete 8 roh.[23] [24] [25] [26]

„roh“: Das Terminal bekam das Zeichen selbst, und der Editor markierte nichts. „unverändert“: von beiden absichtlich belassen (die Symbole einer Nerd Font, Emoji-Sequenzen). Die übrigen Zellen zeigen, was an der Stelle des Zeichens gezeichnet wurde.

Die sim-Spalte ist sim im Commit d3caae2. Die Dateien, die Befehle und jede Zeile stehen in der NOTES.md von sim in diesem Commit.

sim zeigt eine kleine Rust-Datei. Eine versteckte Anweisung in Tag-Zeichen, eine Nutzlast in Variantenselektoren, bidirektionale Steuerzeichen, ein Hangul-Füllzeichen, ein weicher Trennstrich und ein Leerzeichen mit Breite null sind jeweils als sichtbarer Code wie <U+202E> auf einem magentafarbenen Block gezeichnet.
sim, dieselbe Datei: Jedes versteckte Zeichen ist ein sichtbares <U+XXXX> auf einem magentafarbenen Block.
Neovim 0.12.5 zeigt dieselbe Datei. Die Tag-Zeichen, die Variantenselektoren, das Füllzeichen und der weiche Trennstrich werden gar nicht gezeichnet; nur die bidirektionalen Steuerzeichen und das Leerzeichen mit Breite null erscheinen, als <202e> und <200b>.
Neovim 0.12.5, dieselbe Datei: Die Zeile mit der Nutzlast liest sich "a"; und die erste Zeile wie ein harmloser Kommentar, weil die Tag-Zeichen und Selektoren nicht gezeichnet werden. Nur <202e>, <2066>, <2069> und <200b> werden es.

Was der Weg von sim kostet, laut derselben Messung: Ein gezeigtes Zeichen belegt die Spalten seiner Form (8 bei einem vierstelligen Code, 9 bei einem fünfstelligen), eine Zeile mit vielen davon wird also lang; ein Kanji mit ideografischem Variantenselektor zeigt den Selektor; und die Anzeige lässt sich nicht abschalten.

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

  1. Vim 9.2.1202, runtime/doc/repeat.txt (packages, recording)
  2. Neovim, Lua guide
  3. Helix 25.07.1 release (the latest, July 2025)
  4. Helix PR #8675: Add Steel as an optional plugin system (draft, open)
  5. Vim 9.2.1202, runtime/doc/options.txt ('modeline', 'modelinestrict', 'exrc', 'isprint', 'fsync')
  6. Vim patch 9.2.0350: Enabling modelines poses a risk ('modelinestrict')
  7. NVD: CVE-2019-12735 (Vim before 8.1.1365 and Neovim before 0.3.6, modeline)
  8. NVD: CVE-2026-34982 (Vim before 9.2.0276, modeline sandbox bypass)
  9. Neovim 0.12.6, runtime/doc/options.txt ('modeline', 'modelineexpr', 'exrc', 'isprint', 'fsync')
  10. Helix issue #729: Vim modeline parsing (open)
  11. Helix PR #7788: add basic modeline support (closed, not merged)
  12. Helix 25.07.1, book/src/configuration.md (a config.toml local to a project)
  13. Helix PR #15177: Add workspace trust support (merged 2026-03-26)
  14. Helix development branch, book/src/workspace-trust.md
  15. Neovim 0.12.6, src/nvim/mbyte.c (utf_printable)
  16. Helix issue #11255: Substitute unprintable characters in a buffer (open)
  17. Helix issue #16320: C0 control characters are written raw (open)
  18. Vim 9.2.1202, runtime/doc/editing.txt (timestamps)
  19. Neovim 0.12.6, runtime/doc/editing.txt (timestamps, 'autoread')
  20. Helix issue #6492: make the “file modified by an external process” message louder
  21. Helix issue #1125: automatic reload when file changes externally (open)
  22. sim, NOTES.md at commit d3caae2: “Hidden characters in Neovim 0.12.5, measured against sim” (2026-10-18)
  23. The Unicode Standard 18.0, chapter 23, Special Areas and Format Characters (§23.4 Variation Selectors, §23.9 Tag Characters)
  24. Unicode Technical Standard #51: Unicode Emoji, revision 31 (ZWJ sequences, emoji tag sequences, Annex C)
  25. Johann Rehberger, ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes (Embrace The Red, 14 January 2024)
  26. Endor Labs, Invisible Threats and the Blind Spots of Security (an analysis of GlassWorm)
  27. Neovim, LSP client
  28. Helix README (features)