Seit 2012 verwende ich die von Alexey Torgashin erstellten Editoren, um fast alle Textdateien, Protokolle und Programmcodes in den Sprachen VFP / JS / Python / XML / HTML anzuzeigen und zu ändern: Zuerst war es SynWrite , jetzt sein Nachkomme CudaText . Er wählte seinen Editor absichtlich aus der Liste der getesteten Elemente aus , darunter AkelPad , Notepad ++ und Sublime Text . Die Reaktionsfähigkeit des technischen Supports erwies sich als entscheidend - Alexey akzeptierte eine Vielzahl von Wünschen / Beschwerden von Benutzern und setzte diese schnell um. Ich werde es erklären. Die Anzahl der Wünsche / Beschwerden war im Laufe der Jahre nahezu einheitlich und nach dem Wechsel zu GitHub vor drei Jahren wurde sie messbar und wird von mir auf 400 Wünsche / Jahr und 100 Fehler / Jahr geschätzt. Es ist angenehm überraschend, dass die Erweiterung der Funktionalität auf Wunsch der Mitarbeiter die Zuverlässigkeit des gesamten Editors nicht beeinträchtigte. Und als die Ressourcen für nachhaltige Entwicklung von SynWrite erschöpft waren, entstand CudaText .
Ich übergebe das Wort an Alexei.Ich habe Gespräche mit Alexey zu verschiedenen Themen. Er hat kürzlich aufgelistet, "was Sublime fehlt". Es schien mir interessant zu sein, und wir waren uns einig, diese Ideen auf Habré zu präsentieren. Weiter wird es eine Präsentation von Thesen von Alexei in meiner Bearbeitung geben.
Nachdem Sie mehrere Jahre damit verbracht haben, Ihr Programm zu erstellen, sehen Sie die Ergebnisse Ihrer Konkurrenten anders. Sie bemerken in ihnen nicht nur gute Eigenschaften (sie haben sie entweder bereits angewendet oder Sie möchten sie anwenden), sondern auch Nachteile. Ich werde zeigen, was in Sublime Text (im Folgenden Sublime ) verbessert werden könnte, wenn wir es mit meinem CudaText (im Folgenden Cuda ) vergleichen. Gleichzeitig betone ich, dass mein Herausgeber entstanden ist, als Sublime bereits weit verbreitet war. Viele seiner Ideen waren für Cuda grundlegend:
- Textkonfigurationsdateien
- Überlagerungseinstellungen
- Mehrfachwagen
- Python-Plugins
- Die Palette aller Teams
Sublime erzwingt streng einen Text-Team-Arbeitsstil.
Zum Beispiel.
- Es sind keine Dialoge zu konfigurieren - es gibt nur JSON-Dateien (es gibt viele davon).
- Im Dialogfeld "Nach Datei suchen" gibt es keine zusätzlichen Steuerelemente. Stattdessen gibt es eine "Sprache" zum Ausfüllen von Textfeldern.
Dieser Stil ist effizient, flexibel und erweiterbar, erfordert jedoch kontinuierliches Lernen vom Benutzer. Für Anfänger schafft dies eine spürbare Einstiegsschwelle.
Cuda versucht, ein erschwinglicheres Werkzeug zu sein. Dies ist möglich, weil es in der Lazarus- Umgebung erstellt wurde, die ein umfangreiches GUI-Arsenal und Portabilität zwischen Win / Linux / Mac bietet. Infolgedessen wird die Flexibilität der JSON-Einstellungen in Cuda mit Dialog-Plug-Ins kombiniert, z. B. Suche nach Dateien (es gibt eine Habr-Übersicht ), dem Einstellungseditor und anderen.
Ich werde versuchen, einige Ideen zur Verbesserung von Sublime auszudrücken. Dies ist natürlich nur meine private Meinung.
Symbolleisten
In Sublime gibt es keine Symbolleisten. So manifestiert sich sein Text-Team-Stil. Anscheinend wird angenommen, dass ein nützlicher Ort für bearbeitbaren Code wichtiger ist. Sie können alle Befehle entweder über das Menü oder über die Palette nach Namen oder über Hotkeys aufrufen. Dieser Ansatz hat einen klaren Nachteil: Sie müssen im Voraus entweder den Namen des Teams oder dessen Hotkey kennen. Aber die Existenz des richtigen Teams und sein Name sind alles andere als immer offensichtlich.
Eine anpassbare, einschließlich nicht trennbare Symbolleiste ist eines der Details, die den Nutzungsschwellenwert senken.
Cuda verfügt über eine horizontale benutzerdefinierte Symbolleiste zum Aufrufen von Befehlen und eine vertikale Seitenleiste zum Wechseln der Bedienfelder: Baum, Projekt, Konsole. Die API ist für die Einrichtung der Symbolleiste verantwortlich, dh sie wird über das Plugin ausgeführt. In der Seitenleiste werden möglicherweise neue Schaltflächen angezeigt, wenn Plugins neue Bedienfelder hinzufügen.

Das Hinzufügen einer Symbolleiste zu Sublime würde keine der vorherigen Technologien verletzen.
Statusleiste
In Sublime ist die Statusleiste schlecht.

(1) Konsole / Suchen / Ersetzen / Durch Panel-Dateischalter
(2) Post
(3) Codierung
(4) Typ EOL
(5) Registerkarteneinstellung
(6) Syntax
Von diesen sechs Feldern können nur zwei (Codierung und EOL) in der Konfiguration ausgeblendet werden, und im Feld Nachricht können Plugins Schlüssel-Wert-Paare hinzufügen / entfernen. Sie können die verbleibenden Felder nicht ausblenden, neu anordnen oder konfigurieren. Es ist besonders seltsam, dass wichtige Informationen über den / die Wagen / Auswahl (en) in das Nachrichtenfeld gelangen, wo sie mit den Texten der Teams gemischt werden.
In Cuda kann ein Benutzer in user.json
für die Statusleistenfelder deren Reihenfolge, Breite und Ausrichtung angeben:
"ui_statusbar_panels": "caret,L,250|msg,L,0|lexer,L,70|tabsize,L,70"
Das Ausfüllen des caret
Felds (Informationen zu Wagen / Auswahlen) kann mithilfe der Makrosubstitution separat konfiguriert werden. Zum Beispiel so
"ui_statusbar_no_sel": "r={y}/{count} c={xx}", "ui_statusbar_carets": "carets={carets} top/bot={y}/{y2}", "ui_statusbar_col_sel":"r={y}/{count} c={xx} s=[{sel} x {cols}]",
Aufgrund dieser Einstellungen wird Cuda in der Statusleiste angezeigt
- Wenn ein Wagen:

- Wenn es vier Wagen gibt:

- Wenn die vertikale Auswahl:

Mit Cuda können Sie auch konfigurieren, wie lange es dauert, Text im Feld Nachricht anzuzeigen.
Codebaum
Der Wunsch von Sublime , alles in Textform zu präsentieren, ist verständlich. Die Ablehnung des Baumbedienfelds, das in allen IDEs und erweiterten Texteditoren zu finden ist, ist jedoch sehr schmerzhaft. Sie können den „Textbaum“ verwenden, der in einer regulären Registerkarte platziert ist (z. B. mit dem Outline
Plugin), aber er ist schlecht in die Sublime- Oberfläche integriert und kein vollwertiger Ersatz.
Cuda verfügt über ein Codebaumfenster zur Anzeige der Syntaxelemente der aktiven Datei: Funktionen / Klassen / Felder für Programmiersprachen, Tags / Schlüssel für Auszeichnungssprachen.

Integration:
- Die Anzeige ist synchron, dh der Baum zeigt den Status des Codes unmittelbar nach dem Ändern an (mit einer benutzerdefinierten Verzögerung).
- Der ausgewählte Baumknoten wird mit der Position des Wagens im Code synchronisiert.
- Baumknoten werden verwendet, um Blöcke auszuwählen, Wagen zu verschieben und andere Operationen durchzuführen.
Darüber hinaus können Sie mit der Cuda- API ein neues Bedienfeld mit einem Baum erstellen und füllen. Das Project Manager
Plugin macht genau das.
Ordner mit Einstellungen und Plugins
Für einen Benutzer, der nicht tief in Sublime- Handbücher vertieft ist, ist die Situation beim Platzieren von Einstellungen / Paketen / Plugins in Ordnern verwirrend. Der erste Schritt im frisch installierten Editor ist atemberaubend: Mit dem Menübefehl Preferences -- Settings
zwei Dateien geöffnet, von denen eine (Standardeinstellungen) im Titel des Editors als (in Win) sichtbar ist.
Sublime Text 3/Packages/Default/Preferences.sublime-settings
Es gibt jedoch keine solche Datei oder keinen solchen Ordner auf der Festplatte. Im Allgemeinen wird die Logik eines solchen Tricks erraten. Die Standardeinstellungen sollten mit dem Editorcode verknüpft sein und werden in einer Datei dupliziert oder nicht - dies liegt im Ermessen des Entwicklers. Sublime gibt vor, in einer Datei zu sein.
In Cuda sind die Standardeinstellungen ebenfalls geschützt, es befindet sich jedoch eine echte Datei in der Assembly
settings_default\default.json
in denen sie dupliziert und kommentiert werden. Das Vorhandensein einer solchen Datei bietet nicht nur Benutzern, sondern auch Plug-Ins Komfort. Beispielsweise extrahiert der Einstellungseditor aus dieser Datei die Liste der Optionen selbst sowie Kommentare zu diesen und das Markup für die Verteilung der Optionen auf den Baum.
Ähnliche Probleme treten bei Paketen in Sublime auf - Sie suchen sie in Packages
und finden sie nicht.
Obwohl Cuda nicht über eine so leistungsstarke Basis an zusätzlichen Paketen wie Sublime verfügt , ist die Platzierungslogik von Cuda transparent. Für Plugins gibt es beispielsweise einen py
Ordner, in dem alles sichtbar ist - sowohl Standard als auch vorinstalliert. Es gibt einen data/themes
für data/themes
, data/snippets
für data/snippets
, data/lexlib
für Lexer.
Paketkontrolle
Eine seltsame Situation mit dem Package Control
Plugin. Einerseits kommt Sublime sofort ohne dieses Plugin. Auf der anderen Seite kann fast nichts Ernstes ohne es getan werden - ohne Ergänzungen ist der Editor sehr spärlich. Selbst wenn Sie das Plugin im Menü " Preferences
und nicht in " Tools--Packages
, wird der spezielle Status angezeigt. Anscheinend hindern uns einige „Urheberrechte“ daran, dieses Plugin in die Sublime- Assembly aufzunehmen.
Cuda hat mehrere Plugins (jetzt 10), einschließlich Addons Manager
, die in der Distribution enthalten sind.
Schwimmende Paneele
Sublime hat ein monolithisches Fensterlayout, dh die Konsolen- und Registerkartengruppen befinden sich zusammen. Sie können mehrere Instanzen ausführen, aber jede von ihnen verfügt immer über Registerkarten und möglicherweise eine Konsole.
Cuda verfügt über Einstellungen und Befehle zum Anzeigen der Konsole in einem separaten Fenster. Auf diese Weise können Sie es bequem dehnen, ohne die Höhe des Haupttextes zu beeinträchtigen, und es beispielsweise auf einem zweiten Monitor platzieren. Außerdem können Sie das Bedienfeld mit dem Baum trennen, um die Breite des Haupttextes nicht einzuschränken.

Übrigens möchten Atom- (oder VS-Code- ) Benutzer Floating Panels haben, aber die Entwickler lehnten dies unter Berufung auf Einschränkungen in Electron ab . Dies könnte also der Vorteil von Sublime gegenüber direkten Wettbewerbern sein.
Konfigurations-Plugin
Sublime verfügt über mehr als hundert Kerneleinstellungen (107 in Version 3.1.1) und sechs zusätzliche überlappende Ebenen, um die geänderten Werte zu berücksichtigen:
(1) Packages/Default/Preferences (<platform>).sublime-settings
(2) Packages/User/Preferences.sublime-settings
(3) <Project Settings>
(4) Packages/<syntax>/<syntax>.sublime-settings
(5) Packages/User/<syntax>.sublime-settings
(6) <Buffer Specific Settings>
Es ist leicht vorstellbar, dass eine rein manuelle Verfolgung selbst eines kleinen Teils von 700 Werten (100 Tasten auf 7 Ebenen) zum Problem wird.
In Cuda gibt es fast 300 Kerneleinstellungen und drei zusätzliche Ebenen, um sie zu überlappen:
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
Das Problem ist das gleiche - zu viele Werte (bis zu 300 * 4) müssen berücksichtigt werden. Um den Benutzern zu helfen, gibt es ein Plug-In, das alle Einstellungen auf allen Ebenen in einer Tabelle anzeigt und so die Suche und Bearbeitung vereinfacht.

Beachten Sie die Spalte Section
- die Einstellungen werden den Baumknoten zugewiesen. Dies gibt zusätzliche Sortierung und Filter. Das Markup zum Erstellen dieses Baums ist in den Einstellungskommentaren in der Datei settings_default\default.json
enthalten. Zum Beispiel ein Kommentar
// [UI/Listbox]`
weist die darauf folgenden Optionen dem UI/Listbox
Knoten zu. Der ganze Baum kann auch gesehen werden

Für Sublime ist ein ähnlicher Dialog möglich:
- Der Name und sieben Überlappungsebenen sind nur acht Spalten in der Tabelle.
- Das Formular und die Steuerelemente können Tk oder der erweiterten Python-GUI-Bibliothek entnommen werden.
- Das Ändern von Optionen kann beim Speichern zu Änderungen an Dateien und deren Neuladen führen.
Kleinigkeiten
Es gibt einige kleinere Beschwerden, die hier natürlich nicht am richtigen Ort sind, sondern im Sublime Tech Support Forum. Lassen Sie sie der Vollständigkeit halber sein.
PgDn
/ PgUp
funktionieren nicht in PgUp
, z. B. in der Befehlspalette.- Oft müssen Sie ein kniffliges Zeichen einfügen, z. B. einen Pfeil oder einen Bruch. Es gibt nicht genügend Werkzeuge, um alle Unicode-Zeichen anzuzeigen / auszuwählen. In Cuda hat ein solches Tool die Form eines
Char map
Dialogfelds.

- Es gibt keine Möglichkeit, einzelne Farbetiketten festzulegen. Wenn viele Dateien geöffnet sind, besteht häufig der Wunsch, die Beschriftungen einiger von ihnen einzufärben. In Cuda befindet sich der Befehl
Set tab color...
im lokalen Menü über der Verknüpfung. Auf diese Weise konfigurierte Farben werden in der Sitzung gespeichert.
Fazit
Wie einfach ist es, Tipps zu geben!
Aber die obigen Überlegungen sind meiner Meinung nach nicht ohne Nutzen. Wenn sich in der nächsten Version von Sublime Text etwas als nützlich erweist, ist das in Ordnung. Übrigens übersetzt vielleicht jemand und gibt Ideen an Skinner (Jon Skinner) weiter.