Was sim heute kann
Was sim heute kann, nach Zweck gruppiert. Zu jeder Funktion sind die Anforderungs-IDs aus der Spezifikation des Projekts aufgeführt, die sie belegen. Geplante Funktionen stehen nur unter Roadmap.
Lehnt ab, was abzulehnen ist, und bewahrt Ihren Text
Ohne ausdrückliche Aktion geht niemandes Text verloren, und Dateien können den Editor nicht umkonfigurieren.
Keine Modelines, keine Konfigurationsdateien, keine Plugins
Einstellungen und Befehle werden nie aus dem Inhalt einer Datei gelesen, eine Datei kann den Editor also nicht umkonfigurieren. Es gibt keine Konfigurationsdatei, die aus einem Repository geladen würde, keine Plugin-API, und sim öffnet keine Netzwerkverbindungen. Gemerkt werden nur Ihr Look, Ihre Icon-Auswahl und Ihre Markdown-Ansicht, je ein Wort.
Spezifikation: SAFE-9
Speichern, das nie halb schreibt
Beim Speichern wird neben dem Original eine temporäre Datei angelegt (mit Modus 0600 und O_EXCL), mit fsync gesichert, per rename über das Original gelegt und das Verzeichnis ebenfalls mit fsync gesichert; Sie sehen also die alte oder die neue Datei, nie eine Mischung. Eine Datei, die jemand anderem gehört, Hardlinks hat oder in einem schreibgeschützten Verzeichnis liegt, wird nach einer Wiederherstellungskopie an Ort und Stelle gespeichert. sim weigert sich, durch einen Link zu schreiben, der jemand anderem gehört. Öffnen und Speichern ohne Bearbeitung ergibt eine byte-identische Ausgabe.
Spezifikation: SAFE-1, SAFE-2, SAFE-3, SAFE-5
Bei einem Absturz geht nichts verloren
Ungespeicherte Änderungen werden höchstens einmal pro Sekunde als Snapshot in einem privaten State-Verzeichnis (0700) gesichert. Nach einem Absturz,
kill -9oder einem geschlossenen Terminal bietet sim sie beim erneuten Öffnen der Datei als einen Undo-Schritt wieder an. Höchstens eine Sekunde Arbeit geht verloren.Spezifikation: SAFE-6
Die Suche führt nie aus, was das Repository bestimmt
sim findet ripgrep selbst in den absoluten Einträgen von
PATHund startet es mit leerer Umgebung und--no-config, nie mit--pre; ein Repository kann also keine Suche dazu bringen, seinen Code auszuführen. Eine Suche schreibt nie etwas und folgt nie einem Symlink aus dem Projekt hinaus.Spezifikation: GREP-7, GREP-8
Dateien, die kein Text sind, öffnen schreibgeschützt
Eine Datei, die kein gültiges UTF-8 ist oder in ihren ersten 8 KB ein NUL enthält, wird schreibgeschützt geöffnet, mit angezeigtem Grund; ungültige Bytes werden als U+FFFD gezeichnet. Bearbeiten und Schreiben werden abgelehnt, weil der Text auf dem Bildschirm sonst nicht die Datei wäre.
Spezifikation: SAFE-4
Ein Speichern mit Konflikt behält beide Versionen
Stellt ein Speichern fest, dass sich die Datei auf dem Datenträger geändert hat, geht auf keiner Seite etwas verloren.
:w!behält Ihre Version, nachdem die fremde ins State-Verzeichnis kopiert wurde, und:e!übernimmt die fremde nach einem Snapshot Ihrer eigenen.Spezifikation:
--plain: keine externen Prozessesim --plainist der Kern allein: der Look calm, eine Datei, kein Panel, und es startet von sich aus kein Programm: kein git, kein ripgrep, kein Filter, kein Hook. Es ist der Standard als root und als Editor von sudoedit, und die Statuszeile zeigtplain.Spezifikation:
Erreichbarkeit und Tempo
Die wenigsten Schritte von „genau dieser Datei“ bis zum Lesen.
Ein Dateibaum, der sich nie verschiebt
simöffnet sich mit dem Dateibaum des aktuellen Verzeichnisses. Zuerst kommen Verzeichnisse, dann Dateien, jeweils nach Namen, immer in derselben Reihenfolge, und aufgeklappt bleibt, was Sie aufgeklappt gelassen haben; so finden Sie Dateien nach ihrer Position, statt zu lesen. Verzeichnisse werden im Hintergrund gelesen: Einträge erscheinen, sobald sie eintreffen, ohne etwas darüber zu verschieben.Spezifikation: TREE-1, TREE-3, TREE-4, TREE-5
Dateien und Text in einem schwebenden Fenster finden
Ctrl-pfindet Dateien per Fuzzy-Suche auf dem Pfad, sortiert nach Trefferqualität und danach, wie wahrscheinlich Sie die jeweilige Datei öffnen.Ctrl-fdurchsucht schon während der Eingabe den Inhalt aller Dateien (mit ripgrep, falls es inPATHliegt), die Treffer nach Dateien gruppiert, mit einer Vorschau der ausgewählten Zeile. MitEscist alles wieder wie zuvor.Spezifikation: FIND-2, FIND-4, GREP-1, GREP-5, PICK-1
Wahrscheinliche Dateien sind dort markiert, wo sie stehen
sim merkt sich, welche Dateien Sie öffnen, und ordnet sie nach Aktualität und Häufigkeit zusammen. Die fünf wahrscheinlichsten sind im Dateibaum mit
•markiert. Eine Taste,., beschränkt den Dateibaum auf Dateien, die geändert wurden, geöffnet sind oder kürzlich geöffnet wurden.Spezifikation: MARK-2, MARK-3
Mehrere Dateien, je ein vollständiger Editor
Jede geöffnete Datei hat ihr eigenes Undo, ihre eigenen Snapshots, ihre eigene Dateiüberwachung und ihr eigenes Speichern. Eine Tab-Leiste zeigt sie an, mit einem fetten
●für ungespeicherte Änderungen.TabundShift-Tabwechseln.Spezifikation: BUF-1, BUF-2, UI-4
So schnell, dass man es nicht merkt
Im Benchmark des Projekts (Release-Build, eine Datei mit 100.000 Zeilen, Panel geöffnet, Hervorhebung an) braucht eine Taste bei p99 höchstens 1 ms, auf Bildschirmen von 80×24 bis 240×60. In einem Repository mit 100.000 Dateien wird der erste Frame gezeichnet, bevor die Dateiliste gelesen ist: gemessen 1,8 bis 8,7 ms, bei einer Anforderung von 20 ms. Alles Langsame (einen Baum durchlaufen, git fragen, für die Hervorhebung parsen) läuft in einem Hintergrund-Thread.
Spezifikation: SPEED-1, SPEED-2
Eine Binärdatei: sim
Die separate Binärdatei
siist insimaufgegangen: ein Befehl zum Installieren und einer zum Starten. Den Kern bildet eine Bibliothek,sim-editor-core, auf dersimaufbaut.sim --versionundsim --helpgeben ihre Ausgabe aus und beenden sich, ohne das Terminal anzufassen.Spezifikation:
Einen Tab per Buchstabe wählen
<Space>bpsetzt einen Buchstaben auf jeden Tab, und der Buchstabe springt zu dessen Datei.<Space>bctut dasselbe zum Schließen eines Tabs und schließt nie eine geänderte Datei. Ein Hinweis nenntTabundShift-Tab, sobald zum ersten Mal eine zweite Datei offen ist, bis Sie sie dreimal benutzt haben.Spezifikation:
Ein Baum der Änderungen gegenüber git HEAD
<Space>gezeigt den Baum nur mit den Dateien, die vonHEADabweichen, vorgemerkt, nicht vorgemerkt und unversioniert, jede mit ihrem Statusbuchstaben und+n −n, jeden Ordner mit den Summen. Enter öffnet dieHEAD-Version einer Datei, schreibgeschützt.Spezifikation: GIT-1, GIT-2, GIT-3, GIT-4, DIFF-1, DIFF-3, DIFF-4
Angenehm lesen
Farben und Layout, die berechnet statt geraten sind.
Syntaxfarben aus Ihrer eigenen Palette
Die Farben stammen aus der Palette Ihres Terminals (gelesen per OSC 4). Sie behalten ihren Farbton, verschieben aber ihre Helligkeit, bis der Text gegenüber dem Hintergrund |Lc| 75 erreicht. Schlüsselwörter sind rot, Zeichenketten und Zahlen grün, Typen gelb, Funktionen cyan, Kommentare grau und kursiv; Blau und Magenta werden nie für Code verwendet. Die Sprache ergibt sich aus Dateiname, Endung oder erster Zeile, anhand des Syntax-Sets von bat.
zhschaltet die Farben aus.Spezifikation: SYN-1, SYN-2, SYN-4
Eine Leseansicht für Markdown
In einer Markdown-Datei wird jede Zeile außer der des Cursors so gezeichnet, wie sie sich liest: Hervorhebungs- und Code-Markierungen werden nicht gezeichnet, Tabellen werden nach Anzeigebreite ausgerichtet, und Hinweisboxen (
> [!NOTE]) zeigen das Wort ihrer Art. Verborgen werden nur diese Markierungen, nie ein#, eine Klammer, eine URL oder ein Textzeichen, und<Space>umzeigt den Rohtext.Spezifikation: UI-8, MD-1, MD-10, MD-11
Drei Looks
Calm ist der schlichte: vier Stile und ein farbiger Hintergrund. Flat zeigt einen Diff grün und rot mit getönten Zeilen. Depth, der Standard, ergänzt Rahmen, ein Übersichtslineal und einen Nebel, der Text mit wachsendem Abstand vom Cursor verblassen lässt.
zlschaltet reihum zwischen ihnen. Calm ist der Look für alle, die Rot und Grün nicht unterscheiden können.Spezifikation: LOOK-1, LOOK-2, LOOK-3
Lesbar durch Messung
Text hat |Lc| 90, sekundärer Text |Lc| 60 (APCA), berechnet aus dem Hintergrund Ihres Terminals. In calm bleibt die eine Änderungsfarbe bei protanem, deutanem und tritanem Farbsehen unterscheidbar. Ein Farbton bedeutet in der gesamten Oberfläche eine einzige Sache: Grau für Struktur, Blau für den Ort, an dem Sie handeln, Grün, Bernstein und Rot für Änderung, Magenta nur für Verborgenes oder Gefährliches.
Spezifikation: VIS-4, VIS-5, COLOR-1, UI-12
Ein Editor, in dem man leben kann
Icons im Dateibaum (dafür wird ein Nerd Font gebraucht;
zischaltet sie aus), eine Tab-Leiste, ein Breadcrumb als Titel des Editors (src › sim.rs › leader_key), eine Statuszeile mit Modus, Branch, den Änderungen gegenüber HEAD und der Position (Kodierung und Zeilenende nennt sie nur, wenn sie nicht UTF-8 oder LF sind), relative Zeilennummern, Einrückungslinien, eine Scrollleiste mit Markierungen und ein kurzes Aufblitzen auf dem gerade Kopierten.Spezifikation: UI-2, UI-5, UI-6, UI-10, UI-11
Japanischer und anderer CJK-Text
Breite Zeichen belegen zwei Spalten, Fließtext wird nach den japanischen Kinsoku-Regeln umbrochen, Wortbewegungen trennen CJK-Text dort, wo das Schriftsystem wechselt, und bei aktivem IME funktionieren vollbreite Tasten als Befehle.
Spezifikation: VIS-7, VI-10
Funktioniert ohne Farbe, und nie allein durch Farbe
NO_COLORund Terminals mit weniger als 8 Farben zeichnen nur mit Schriftstärke, Unterstreichung und inverser Darstellung, und sim fragt das Terminal nicht nach Farben. Bedeutung hängt nie allein von der Farbe ab: Eine geänderte Zeile ist┆in der Randspalte, Ordner zeigen den Buchstaben des stärksten git-Status, und ein Tab zeigt↯für eine auf dem Datenträger geänderte Datei. Bei ausgeschalteten Icons wird kein Glyph aus dem Private-Use-Bereich gezeichnet.Spezifikation:
Icons starten dort eingeschaltet, wo ein Nerd Font wahrscheinlich ist
Icons brauchen einen Nerd Font, und ein Terminal kann nicht sagen, ob es einen hat. In Ghostty, kitty und WezTerm starten sie eingeschaltet, anderswo ausgeschaltet, mit einem einmaligen Hinweis in der Statuszeile:
zi: icons (needs a Nerd Font). Waszizuletzt gewählt hat, gilt immer.Spezifikation:
Kopiertes leuchtet auf, in jedem Look
Was Sie gerade mit Yank kopiert haben, leuchtet 150 ms lang auf. Calm, der schlichte Look, lässt es jetzt auch aufleuchten: im Grau einer Auswahl oder unterstrichen, wo es keine gibt. Eine Zeile, die ein anderer Prozess gerade in die geöffnete Datei geschrieben hat, leuchtet 400 ms lang auf.
Spezifikation: UI-13, UI-19
Tasten
Die vi-Grammatik, ohne die Macken von vi.
Die vi-Tasten, die Ihre Hände kennen
Motions, Operatoren, Textobjekte, Anzahlen,
., Visual-Modus, Suche mit smartcase,:sund Bereiche, ohne die Macken von vi:Ykopiert bis zum Zeilenende,Ustellt wieder her (redo),Ctrl-sspeichert undqbeendet. Pfeiltasten, Home, End und Delete funktionieren überall.Spezifikation: VI-1, VI-2, VI-3, VI-4, VI-5, VI-6, VI-7
Kopiertes gelangt in die System-Zwischenablage
Jeder Yank ohne Registernamen geht über OSC 52 auch in die System-Zwischenablage, auch innerhalb von tmux. Löschen und Ändern füllen nur das Register, sodass
xundddnie überschreiben, was Sie kopiert haben.Spezifikation: VI-8
Die Maus, ohne Überraschungen
Klicken öffnet eine Datei oder setzt den Cursor, das Mausrad scrollt, Ziehen wählt aus. Die Maus bearbeitet, speichert oder erstellt von sich aus nie einen Snapshot.
Spezifikation: PTR-1, PTR-2
Space ist die Leader-Taste, mit which-key-Fenster
Eine Pause bei einem Präfix (
Space,g,z,Z,[,]oder einem Operator wied) öffnet ein kleines Fenster, das die Tasten auflistet, die als Nächstes kommen können. Weitertippen funktioniert genau wie ohne das Fenster.Spezifikation:
:helpund F1: eine durchsuchbare Liste aller Tasten:helpundF1öffnen eine durchsuchbare Liste aller Tasten und Befehle, mit einer Vorschau darauf, was die jeweilige Taste oder der jeweilige Befehl tut.:help tabfindetTab,Shift-Tabund<Space>bp. Die Liste ist die eine Tastentabelle des Produkts und kann deshalb nicht von den Tasten abweichen.Spezifikation:
Die Suche sagt, wo Sie sind
Solange die Treffer einer Suche hervorgehoben sind, sagt die Statuszeile, bei welchem davon der Cursor steht und wie viele es gibt:
[3/12].Spezifikation:
Vim-Register
"abis"zhalten Text,"Abis"Zhängen an;"0ist der letzte Yank,"1bis"9die letzten Löschungen, und"_nimmt alles an und hält nichts.:registerslistet sie auf. Sie leben nur im Speicher, und alle geöffneten Dateien teilen sie. Ein Yank ohne Namen geht weiterhin über OSC 52 in die System-Zwischenablage; eine Löschung nicht.Spezifikation: VI-15
Marken
mabismzsetzen eine Marke in der Datei;'aspringt in ihre Zeile und die Gravis-Taste an ihre genaue Stelle, auch mit einem Operator (d'a).''springt dorthin zurück, wo der Cursor vor dem letzten Sprung war. Eine Marke folgt ihrem Text durch Bearbeitungen, Rückgängig und Änderungen von außen, und:markslistet sie auf. Marken leben nur im Speicher.Spezifikation: VI-17
:tutorEtwa fünfzehn Minuten kurzer Lektionen in einem Scratch-Puffer, in der Sprache Ihrer Locale (English, 日本語, 简体中文, 繁體中文, 한국어, Español, Português, Français, Deutsch oder Русский; für jede andere English). Die Übungen markieren sich beim Tippen selbst mit ✗ und ✓.
Spezifikation: TUTOR-1, TUTOR-2, TUTOR-3, TUTOR-4
Roadmap
Geplant, nicht ausgeliefert. Nichts auf dieser Liste ist bisher verfügbar, und die Reihenfolge ist kein Versprechen.
Makros
Geplant
Tasten aufzeichnen und abspielen. Heute hat sim keine.
Zwischenablage-Integration
Geplant
Mehr als der heutige Yank über OSC 52.
Language Server in einer Sandbox
Geplant
Ein Language-Server-Client, dessen Server in einer Sandbox läuft, und in der Statuszeile eine Anzeige, ob die Projektwurzel vertrauenswürdig ist.
Eine GUI mit echter Tiefe
Geplant
Ein grafisches Frontend mit echten Schatten und Erhebung (Elevation). Es ist als Prototyp gestartet; es gibt nichts zu installieren.
Weitere Wege zur Installation
Geplant
Pakete für AUR und crates.io kommen demnächst.