Warum kann ich die Standardeingabe für Vim nicht mittels Umleitung in eine Datei auf der Festplatte ändern?

Warum kann ich die Standardeingabe für Vim nicht mittels Umleitung in eine Datei auf der Festplatte ändern?

Ich las die "Das UNIX Time-Sharing System Dennis M. Ritchie und Ken Thompson" Papier und als Beispiel für die Umleitung der Standard-Eingabe/Ausgabe wird das Beispiel des ed-Editors gegeben:

Der Befehl ed <scriptinterpretiert das Skript als eine Datei mit Editorbefehlen. „ <script“ bedeutet also „Eingabe übernehmen von script“.

Wenn ich jedoch dasselbe mit vim versuche, erhalte ich die Fehlermeldung „Fehler beim Lesen der Eingabe“:

[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Wieso ist es so?

Antwort1

edund exsindZeileneditoren. Sie verfügen über eine Benutzeroberfläche, die über Zeilen in einer Textdatei gesteuert werden kann.

viund alle seine Klone wie VIM sindVollbild-Editoren. Sie verfügen über Benutzeroberflächen, die Eingabe und Ausgabe nicht als Textdateizeilen behandeln. Die Eingabe besteht aus einzelnen Zeichen und Zeichenfolgen, die nicht in Zeilen gruppiert sind. Die Ausgabe besteht aus einzelnen Zeichen und Escape- und Steuersequenzen zum Zeichnen auf einem Videoterminal.

Das Modell vonBenutzer-E/Ada sich Textdateien nicht in interaktive Vollbild-TUI-Programme und schon gar nicht in GUI-Programme umwandeln lassen.

Welches Verhalten Sie erhalten, ist von Programm zu Programm unterschiedlich. Einige Vollbild-TUI-Programme erkennen, wenn ihre Standardeingabe kein Terminal ist, und brechen ab nvi. Andere, wie VIM, warnen, behandeln die Nicht-Terminal-Eingabedatei jedoch als Terminaleingabe, was zu einem etwas merkwürdigen Verhalten bei Benutzern führt, die erwarten, dass die Eingabe als Skriptbefehle behandelt wird. Wieder andere, wie lessbeispielsweise, öffnen explizit ein Terminalgerät für die Benutzeroberfläche und verwenden dafür (den Eingabeteil) keine Standard-E/A. Wieder andere, wie die meisten Shells (die, beachten Sie, interaktive Benutzeroberflächen haben, die über den Zeilenmodus hinausgehen), wechseln in einen nicht-interaktiven Modus.

Ein 1974 über Unix verfasster Artikel ist kein guter Leitfaden für den Unterschied zwischen zeilenorientierten Benutzeroberflächen und Vollbild-Benutzeroberflächen. Möglicherweise emlag der erste Unix-Editor für Videoterminals, der von George Coulouris, noch ein Jahr in der Zukunft. Ebenfalls in der Zukunft lagen Termcap, Shells mit (ihrer eigenen) Befehlszeilenbearbeitung und Zeilendisziplin-Standards, die nicht-grafische Sonderzeichen verwendeten.

verwandte Informationen