Warum zeigt das Terminal keine neuen Zeilen an?

15

Wenn ich zum Beispiel folgenden Befehl eingebe,

echo line | (cat >/dev/null; vi)

sogar in eine andere Schale gewickelt,

sh -c 'echo line | (cat >/dev/null; vi)'

und von Vim zurückgekehrt, jetzt wird kein Wagenrücklauf mehr angezeigt.

Wie kann ich die neuen Zeilen wieder anzeigen lassen? (Ohne Ausgang.)

Xiè Jìléi
quelle
obligatorischer Wechsel zu Emacs Bemerkung :)
Dang Khoa

Antworten:

34

Probieren Sie eine oder beide der folgenden Methoden aus:

  • Geben Sie ein ctrl+c, dann geben Sie ein resetund drücken Sie dann enter.
  • Geben Sie ein ctrl+c, dann geben Sie ein stty saneund drücken Sie dann enter.

das ctrl+cist keine anderen Zeichen löschen Sie in der Befehlszeile eingegeben haben könnte.

resetoder stty sanebehebt normalerweise ein fehlerhaftes Terminal. Lesen Sie die Manpage von resetund sttyfür weitere Informationen.

Beachten Sie, dass , wenn das Terminal bis genug ist, dann verwirrt ist es , dass nicht einmal sein könnte ctrl+coder enterwird erwartet funktionieren. Es gibt noch andere Methoden, um Zeichen einzugeben, aber sie beinhalten uralte dunkle Magie. In diesem Fall ist es normalerweise einfacher, das Terminal zu schließen und ein anderes zu starten.

Mein Verständnis der inneren Funktionsweise eines Terminals ist nicht tief genug, um zu erklären, warum oder wie es das tut.

lesmana
quelle
4

Es ist nicht die beabsichtigte Verwendung vi, um Eingaben von stdin zu erhalten.

Auf jeden Fall kann man mit wieder Newlines bekommen

stty sane

ohne das Terminal zurückzusetzen.

Enzotib
quelle