sim editor · Rust · Linux und macOS

Das Vim der neuen Generation. Es zeigt, was verborgen ist.

sim ist das Vim der neuen Generation: von Grund auf in Rust geschrieben, mit Vims modalem Editieren und den zentralen Tasten.

Es liest keine Modelines, lädt keine Plugins und öffnet keine Netzwerkverbindung, und es bringt auf den Bildschirm, was sonst verborgen bleibt: unsichtbare Zeichen, Schreibzugriffe von außerhalb des Editors, Repositories, die Code ausführen würden.

Keine Plugins. Keine Modelines. Kein Netzwerk.

Kostenlos und Open Source (MIT OR Apache-2.0). Über Homebrew installieren oder aus dem Quellcode bauen. Release Notes: v0.2.0

sim zeigt notes/access.py. Zeilen mit einem Rechts-nach-links-Override und Isolate-Zeichen zeigen diese als <U+202E> und <U+2066> auf magentafarbenen Blöcken. Ein Leerzeichen am Zeilenende erscheint als drei Punkte, ein geschütztes Leerzeichen als kleines Kästchen.
Ein echtes U+202E und der wörtliche Text <U+202E> in einer Zeile: Nur das echte Zeichen bekommt den magentafarbenen Block. Darunter eine Zeile im Stil von Trojan Source, ein Leerzeichen am Zeilenende (·) und ein geschütztes Leerzeichen (⍽). Der Dateibaum zeigt den git-Status, die Randspalte die Änderungen gegenüber HEAD.

Eine Regel: zeigen, was verborgen ist

Die meisten Angriffe über Editoren funktionieren, weil der Editor eine Datei als etwas anderes zeigt, als sie ist. Das Aussehen von sim (depth, Nebel, rote und grüne Diffs, das magentafarbene Warn-Badge) hat nur eine Aufgabe: Verborgenes sichtbar zu machen. Farben folgen einer festen Regel, sodass eine Farbe immer dasselbe bedeutet.

Was jede Farbe bedeutet

  • GrauNeutrale Grautöne und Schriftstärke tragen die Struktur: Text, Zahlen, Icons, Rahmen.
  • BlauDer eine Akzent bedeutet „hier handeln“: der Modus, der aktuelle Tab, ein Suchtreffer, ein Link.
  • Grün, Bernstein, RotGrün, Bernstein und Rot bedeuten Änderung und sonst nichts.
  • MagentaMagenta steht nur für Verborgenes oder Gefährliches: ein Zeichen, das nicht als es selbst angezeigt wird, ein aus Sicherheitsgründen übersprungenes git.

Was sim auf den Bildschirm bringt

Fünf Dinge, die Dateien und Repositories verbergen. sim zeigt jedes davon.

  • Unsichtbare und bidirektionale Zeichen werden angezeigt

    Ein Rechts-nach-links-Override oder ein Leerzeichen mit Breite null wird in jedem Zustand als <U+202E> bzw. <U+200B> auf einem magentafarbenen Block gezeichnet und nie roh an das Terminal gesendet. Der wörtliche Text <U+202E> bekommt keinen Block, sodass sich beides unterscheiden lässt.

    Mehr lesen: Unsichtbare und bidirektionale Zeichen werden angezeigt

  • Leerzeichen, die wie nichts aussehen, werden markiert

    Leerzeichen am Zeilenende erscheinen als ·, ein geschütztes Leerzeichen als ⍽ und ein Tabulator als »: Zeichen, die kein Code verwendet, über den Text gezeichnet und nie ein Teil von ihm.

    Mehr lesen: Leerzeichen, die wie nichts aussehen, werden markiert

  • Schreibzugriffe von außen werden markiert

    Schreibt ein anderer Prozess die geöffnete Datei neu, markiert sim die Änderungen im Text, am Tab und im Dateibaum, und ein Speichern schreibt nichts, wenn sich die Datei seit dem Einlesen geändert hat.

    Mehr lesen: Schreibzugriffe von außen werden markiert

  • Änderungen gegenüber git HEAD auf einen Blick

    Markierungen in der Randspalte, ein Statusbuchstabe für jede Datei im Dateibaum und +n ~n -n in der Statuszeile: alles stammt von git und läuft im Hintergrund.

    Mehr lesen: Änderungen gegenüber git HEAD auf einen Blick

  • Die eigene Konfiguration eines Repositorys kann git keinen Befehl ausführen lassen

    Die eigene Konfiguration eines Repositorys kann git keinen Befehl ausführen lassen: Ein Monitor, Hooks und Filter werden abgeschaltet, und wo die Konfiguration trotzdem einen ausführen könnte (core.sshCommand, ein Include), wird git nicht ausgeführt. Der Rahmen sagt, was der Fall ist, und die Statuszeile nennt den Schlüssel und die Datei.

    Mehr lesen: Die eigene Konfiguration eines Repositorys kann git keinen Befehl ausführen lassen

sim im Terminal

sim zeigt store.py nach einem Schreibzugriff von außen. Zwei geänderte Zeilen haben einen grünen Hintergrund, der obere Rahmen trägt ein grünes Badge, 2 changes on disk, und der Tab zeigt ↯.
Ein anderer Prozess hat die geöffnete Datei neu geschrieben. Die geänderten Zeilen sind markiert, im Rahmen steht „2 changes on disk“, der Tab zeigt ↯, und im Puffer ging nichts verloren.
Ein schwebendes Fenster mit dem Titel Live grep über dem Dateibaum. Es listet passende Zeilen nach Dateien gruppiert auf, darunter eine Vorschau mit Syntaxfarben.
Ctrl-f durchsucht den Inhalt aller Dateien schon während der Eingabe, mit einer Vorschau der ausgewählten Zeile.
sim zeigt README.md mit Überschriften auf Bändern, einem umzäunten Codeblock, einer mit Strichen ausgerichteten Tabelle, einer Aufgabenliste und einem Zitatbalken; die erste Zeile, in der der Cursor steht, zeigt ihr # wie getippt.
Eine README in der Leseansicht: Überschriften, eine nach Anzeigebreite ausgerichtete Tabelle, eine Aufgabenliste und ein Zitat, gezeichnet, wie sie sich lesen. Die Zeile, in der der Cursor steht, ist der Text der Datei selbst.
sim in einem Repository, dessen Konfiguration core.sshCommand setzt. Der obere Rand des Dateibaum-Rahmens trägt ein magentafarbenes Abzeichen, git not run, und die Statuszeile lautet: git skipped: core.sshcommand in .git/config could run a command.
In einem Repository, dessen .git/config core.sshCommand setzt, führt sim git nicht aus: Der Rahmen des Dateibaums sagt git not run, und die Statuszeile nennt den Schlüssel und die Datei.

Schnell. Gemessen, nicht behauptet.

Im eigenen Benchmark des Projekts (Release-Build, eine Datei mit 100.000 Zeilen, Panel geöffnet, Hervorhebung an) braucht eine Taste bei p99 weniger als 1 ms. In einem Repository mit 100.000 Dateien wird der erste Frame gezeichnet, bevor die Dateiliste gelesen ist: gemessen 1,8 bis 8,7 ms.

Vom Projekt auf einem AMD Ryzen 9 9950X gemessen (SPEED-1, SPEED-2 in dessen Spezifikation). Auf Ihrem Rechner werden die Werte abweichen.

Gegen Vim, Neovim und Helix

Eine Tabelle mit Quellen: Plugins, Modelines, Projektkonfiguration, versteckte Zeichen und Schreibzugriffe von außen. Sie sagt auch, wo die anderen noch besser sind.

Zum Vergleich

Roadmap

Geplant, nicht ausgeliefert. Nichts davon ist heute verfügbar.

  • Makros

    Geplant

  • Zwischenablage-Integration

    Geplant

  • Language Server in einer Sandbox

    Geplant

  • Eine GUI mit echter Tiefe

    Geplant

  • Weitere Wege zur Installation

    Geplant

Alle geplanten Funktionen

Das Vim der neuen Generation starten

Über Homebrew installieren oder aus dem Quellcode bauen. Pakete für AUR und crates.io kommen demnächst.