2019-12-20 digital life Editormaechtigkeit Exaktheit vs. repetitive Annaeherung Was ist der beste Texteditor? Das ist eine Frage, die sich die Unix-Welt schon mehrere Jahrzehnte stellt. (Dass die Windows-Welt sie sich nicht stellt, sagt einiges aus.) Einig sind sich die Ex- perten darin, dass es ein maechtiger Editor sein muss. Die Gruende, die gegen einfache Editoren sprechen, sind: 1) Einfuegen von Text geht bei ihnen einfach, aber zum Bearbeiten von Text bieten sie kaum Unterstuetzung, wo doch das Ueberar- beiten und Veraendern den Hauptteil der Arbeit ausmacht (bzw. ausmachen sollte ... und ein Editor, der dies erschwert, sorgt auch dafuer, dass es weniger gemacht wird). 2) Einfaches ist zwar ein bisschen einfacher, aber umfangreiche, schwierige oder stupide Editieraufgaben sind muehevoll, langweilig und nicht vorgesehen. 3) Man begrenzt die eigenen Editiermoeglichkeiten (und die dahinter liegenden Denkweisen) durch das Niveau des Editors. Wenn man die Funktionen eines einfachen Editors schon nach einer Woche alle kennt, dann bleibt einem als Fortschrittsraum nur noch schneller zu tippen und schnelleres Tastenkombinationsdruecken oder schnelleres Mausklicken uebrig. Das ist eine reine Ef- fizienzsteigerung ... wie schneller zu gehen, statt Effektivi- taetssteigerungen wie ein Fahrrad, Auto, Flugzeug zu benutzen ... oder sich direkt an den Zielort zu zaubern. Natuerlich braucht es Zeit und Energie Fahrradfahren oder Zaubern zu lernen, aber lang- fristig zahlt es sich aus. Man kann ja auch erst mal klein an- fangen. Ein guter Editor bietet Editiermoeglichkeiten auf verschiedenem Niveau und mit verschiedener Maechtigkeit, so dass jede Person individuell und inkrementell die eigene Editiererei auf ein hoeheres Niveau heben kann, gezielt in den Bereichen, wo die Per- son am meisten aktiv ist. Tipps dazu koennen von Freunden kommen. Das ist dann wie ein guter Zauberspruch, den man von einem Freund bekommt, weil der sieht, dass man genau dafuer Verwendung hat, weil man ein Problem bisher umstaendlich loest. Das kann dann auch ein anspruchsvollerer Spruch sein als man sie normal verwen- det. Der Aufwand lohnt sich weil der Zauber besonders hilfreich ist. Und ueber ihn lernt man fortgeschrittenere Techniken ken- nen, die man dann auch in anderen Bereichen anwenden kann. Das ist ein natuerliches und sachgemaesses System fuer den Lern- fortschritt ... das gute Editoren bieten. Wenn es ein Profi- Editor ist, also das was die besten Programmierer verwenden, dann kann man damit ueber die Jahre und Jahrzehnte aufsteigen bis zu ihrem Niveau. (Jedenfalls ist man selbst die einzige Begrenzung.) Beim Handwerkszeug sollte man immer das beste Material waehlen. Okay, jetzt befinden wir uns also unter Emacs, vi, sam und ed. Ed ist der beeindruckendste von ihnen. Mit nur gut 2.500 Zeilen C-Code (plus 1.100 Zeilen Regexp-Library, falls man die separat braucht) bietet er eine unglaubliche Editiermaechtigkeit. Ab und an mit ihm zu arbeiten ist eine Offenbarung. Da ed fuer Teletype-Terminals (d.h. Zeilendrucker statt Bildschirme) konzipiert ist und nur damit so richtig Sinn macht, gibt es sam und vi als darauf aufbauende, fuer Video-Terminals angepasste Versionen. Beide enthalten einen verbesserten ed im Kern und einen grafischen Editorteil drumrum. Sie sind also zwei Editoren in einem. Man kann Editieroperationen damit auf die eine oder die andere Editorart durchfuehren. (Und jede Art hat Edi- tierbefehle verschiedener Maechtigkeit.) (Mit Emacs kenne ich mich kaum aus. Der funktioniert nochmal anders. Emacs vs. vi/sam/ed entspricht Lisp vs. C -- verschiedene Welten; beide stimmig und maechtig.) Auf die verschiedenen Editierarten im vi moechte ich naeher eingehen. Gehen wir von folgender Situation aus: Der Cursor be- findet sich irgendwo im oberen Bereich des Bildschirms. Ich moechte eine der Zeilen am unteren Bildschirmende editieren. Wie komme ich dort hin? Hier ein paar Varianten: 1) Solange `j' (= Cursor eine Zeile runter) druecken, bis er in der richtigen Zeile ist. 2) `L' (= Cursor in unterste Bildschirmzeile), dann wenige Male `k' (= Cursor eine Zeile hoch) druecken. 3) `}' (= zum naechsten Absatz) ggf. mehrfach druecken, dann mit `j' oder `k' feinjustieren. 4) Mit `/' ein eindeutiges Wort der Zielzeile suchen. 5) `18j' um genau 18 Zeilen nach unten zu gehen. 6) `23G' um direkt in Zeile 23 zu springen. Welche dieser Varianten verwende ich nun in der Praxis? Welche sollte ich verwenden? Welche ist die beste? Die erste Antwort ist einfach: Ich verwende sie alle! Wenn ich eine Woche am Computer arbeite kommen alle davon vor. An einem Tag kommt zumindest die Haelfte davon vor. Welche davon ich verwende haengt vom Kontext ab. Bei Prosatext ist `}' eher sinnvoll als bei Code (dort verwende ich aber `]]'). Suchen wuerde ich nur dann wenn mir in der Zielzeile ein beson- deres Wort ins Auge sticht. Usw. Ist `18j' besser als `23G'? In dem Fall ist `23G' besser, weil ich die 23 direkt am Bildschirmrand sehe, die 18 dagegen erst berechnen muss. Anders bei `6j' vs. `1835G'. Dort habe ich die sechs Zeilen schneller im Blick als ich die vierstellige Zahl abgetippt habe. Was aber ist mit dem repetitiven Druecken von `j'? Oder nochmal anders formuliert (innerhalb einer Zeile): Achtmal `x' (= ein Zeichen loeschen) druecken oder `8x' (= acht Zeichen loeschen) oder `d2t)' (= loeschen bis vor die uebernaechste schliessende runde Klammer)? Mit dieser Frage beschaeftige ich mich schon laenger. Sollte der exakte Befehl nicht besser sein als die interaktive Annaeherung? Im ersten Fall muss ich den Befehl nur einmal einge- ben und weiss dann schon wie das Ergebnis aussieht -- das ist wie ed funktioniert. Im zweiten Fall basiert alles auf der staendigen Zielkontrolle. Dort muss ich beim Naeherkommen zum Ziel langsamer werden, damit ich es auch genau treffe statt zu frueh zu stoppen oder darueber hinaus zu schiessen. -- das ist wie einfache Edi- toren funktionieren. Vi hat beides: ersteres im ex-Mode und bei komplexen vi-Mode- Befehlen, und zweiteres bei einfachen vi-Mode-Befehlen. Sollte ich nicht primaer im komplexen Befehlsmodus des Editors arbeiten? Das sollte doch anzustreben sein. Das eben ist die Frage, mit der ich mich nun schon seit Jahren herumschlage. (... und in Konsequenz: Wenn komplexere Befehle das Ziel sind, dann ist ed ein gutes Tool, weil er nur solche Befehle hat.) Hier nun der eigentliche Gedankengang: Die Maechtigkeit und Exak- theit ist nicht das einzige Kriterium. Auch abgesehen vom Ler- naufwand (den ich vernachlaessige) gibt es einen guten Grund fuer einfache Befehle, und der ist, dass sie ohne aktives Denken fast unbewusst passieren koennen. Ein zentraler Aspekt bei intellektueller Arbeit ist die Fokus- sierung, d.h. die Vermeidung von Ablenkung. Im besten Fall kann man mit den aktiven Gedanken ganz bei der Sache bleiben. Alle Hilfstaetigkeiten sollten moeglichst unbewusst ablaufen. Wenn ich mich am Kopf kratze, dann denke ich in keiner Weise ak- tiv darueber nach. ich bewerte das Beduerfnis danach unbewusst, ich treffe die Entscheidung unbewusst, ich bewege meinen Arm un- bewusst, ich verarbeite das (wohltuende) Ergebnis unbewusst. In gleicher Weise unbewusst passiert das Schreiben fuer mich als Erwachsenen. Ich denke Inhalte und meine Hand fuehrt den Stift automatisch. Alles davon ist hochgradig in Hintergrundbereiche des Denkens ausgelagert: Gedanke zu Satz, Satz zu Wort, Wort zu Buchstabe, Buchstabe zu Zeichenanweisung, Zeichenanweisung zu Muskelbewegung. Als Zehn-Finger-Tipper hat man diesen gedankli- chen Automatisierungsgrad auch mit der Tastatur: Man denkt gar nicht ueber's Tippen nach oder wo die Tasten sind, sondern be- fasst sich nur mit den Inhalten selbst aktiv; die Tipperei pas- siert unbewusst. Und nun zum vi: Die einfachen Editoroperationen im vi-Mode, wie eine Leerzeile einfuegen, ein Wort(ende) loeschen, Zeichendreher korrigieren, falsche Gross-Klein-Schreibung am Wortanfang korri- gieren ... gerade diese letzte Operation ist ein Beispiel, das bei mir vollkommen unbewusst ablaeuft. Im Schreiben mache ich -- ohne nachzudenken -- schnell ein `Escape b ~ A' und schreibe direkt weiter. Meine Finger tippen das ohne einen aktiven Gedank- en. Wenn ich hier den Befehl hinschreiben will, dann muss ich viel laenger nachdenken wie er genau lautet als meine Finger das waehrend des Schreibens selbststaendig umsetzen. Der vi ist mir sogesagt ``in Fleisch und Blut'' uebergegangen. Wie einen Stift, eine Gabel, eine Computermaus oder einen Muskel bediene ich die einfachen vi-Befehle komplett ergebnisorientiert. Der Vorgang selbst verschwindet aus dem aktiven Denken. (Ihn mir zu vergegenwaertigen wird zunehmend schwieriger. Man ueberlege sich nur mal welche Muskeln im Koerper was genau machen wenn man einen Schritt macht!) Durch die Verselbststaendigung im Muskel- gedaechtnis wird mein bewusster Gedankengang nicht unterbrochen. Diese unbewusste Steuerung funktioniert aber nur bei Aktionen unter einem gewissen Komplexitaetsniveau. Implizit kann man keine Zeilennummerdifferenzen berechnen oder Zahlen abschreiben. Jedes `18j' oder `23G' erfordert daher eine Unterbrechung des bewussten Gedankengangs, einen Fokuswechsel, einen aktiven anderen Gedank- en, und das alles wieder zurueck, inklusive sich daran zu erin- nern wo man gerade war. Anders das geistig abwesend dur- chgefuehrte repetitive `j'-Druecken, so lange bis der Cursor in der richtigen Zeile ist ... waehrend man derweil den bisherigen Gedanken weiterdenkt. Aus diesem Grund ist `jjjjjjjjjjjjjjjjjj' mitunter durchaus ein guter Editierbefehl. Er braucht keinen gedanklichen Fokus, keine Aufmerksamkeit, er laeuft ganz im Hintergrund ab. Wenn dies aber die einzige Moeglichkeit waere, so waere sie armselig -- eben ein einfacher, schwacher Editor. Denn oft genug ist der aktiv fokussierte Prozess die Bearbeitung der Daten selbst. Wenn ich mich also aktiv damit befasse, wie ich die Daten moeglichst effektiv umarbeiten kann, dann ist `23G' derjenige Be- fehl, der mich auf meinem Gedankenpfad bleiben laesst, waehrend das Aufschreiben (und Pruefen!) von genau der richtigen Anzahl von `j' einen Fokus-Wechsel in ein reines Umsetzungsproblem dar- stellt. Es kommt also darauf an. Mal ist die eine mal die andere Variante die passende. ... und an dieser Stelle skaliert ein Editor wie vi dann auch noch, weil jede Aktion mit gleichem Denk- und Zeitaufwand zweimal oder tausendmal ausgefuehrt werden kann. (Die 18 `j' oben habe z.B. ich mit `18 a j Escape' eingefuegt. Auf die gleiche Weise haette ich auch 1800 `j' einfuegen koennen.) Es gibt genau zwei Gruende gegen einen Editor wie vi: Erstens: Man kann die Editieraufgaben der ersten zwei Wochen mit einem einfachen Editor schneller durchfuehren, weil die Ein- stiegshuerde kleiner ist. (Ab zwei Wochen Editierarbeit ist der Break Even erreicht und vi zahlt sich aus. Im Uebrigen ist ein- faches Editieren im vi gar nicht so schwer wie die meisten denk- en. Hier ein Minimaleinstieg in vi: [0] ) Zweitens: Auf Systemen ohne den maechtigen Editor fehlt einem fortan etwas ... [0] http://marmaro.de/docs/vi-for-nano-users/ http://marmaro.de/apov/ markus schnalke