GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Werden die ersten Zeichen des Befehls beim Beenden im Display wiederholt?

Die ersten beiden Zeichen wurden wiederholt, während ich Tab verwende Abschluss zu tun. Im Screenshot unten cd wird wiederholt.

Ich habe rxvt-unicdoe, xterm, terminator ausprobiert. Alle diese Terminalemulatoren haben dieses Problem.

Zsh Version 5.0.2, Konfigurationsdatei on-my-zsh

Akzeptierte Antwort:

Wenn die Zeichen auf Ihrer Befehlszeile manchmal versetzt angezeigt werden, liegt dies häufig daran, dass zsh die falsche Breite für die Eingabeaufforderung berechnet hat. Die Symptome sind, dass die Anzeige gut aussieht, solange Sie Zeichen hinzufügen oder Zeichen für Zeichen verschieben, aber verstümmelt wird (wobei einige Zeichen weiter rechts erscheinen, als sie sollten), wenn Sie andere Befehle verwenden, die den Cursor bewegen (Home , Vervollständigung usw.) oder wenn der Befehl eine zweite Zeile überlappt.

Zsh muss die Breite der Eingabeaufforderung kennen, um zu wissen, wo die Zeichen des Befehls platziert werden. Es wird davon ausgegangen, dass jedes Zeichen eine Position einnimmt, sofern nicht anders angegeben.

Eine Möglichkeit ist, dass Ihre Eingabeaufforderung Escape-Sequenzen enthält die nicht richtig abgegrenzt sind. Escape-Sequenzen, die die Farbe oder andere Formatierungsaspekte des Textes oder den Fenstertitel oder andere Effekte ändern, haben eine Breite von Null. Sie müssen in ein Prozent-Klammern-Konstrukt eingeschlossen werden %{…%} . Allgemeiner eine Escape-Sequenz wie %42{…%} weist zsh an, davon auszugehen, dass das, was innerhalb der geschweiften Klammern steht, 42 Zeichen breit ist.

Überprüfen Sie also Ihre Eingabeaufforderungseinstellungen (PS1 , PROMPT , oder die Variablen, auf die sie verweisen) und stellen Sie sicher, dass alle Escape-Sequenzen (wie \e[…m um Textattribute zu ändern – beachten Sie, dass es über eine Variable wie $fg[red] vorhanden sein kann ) befinden sich innerhalb von %{…%} . Da Sie oh-my-zsh verwenden, überprüfen Sie sowohl Ihre eigenen Einstellungen als auch die Definitionen, die Sie von oh-my-zsh verwenden.

Das gleiche Problem tritt in bash auf. Dort müssen Sequenzen mit Nullbreite in einer Eingabeaufforderung in \[…\] eingeschlossen werden .

Eine andere Möglichkeit besteht darin, dass Ihre Eingabeaufforderung Nicht-ASCII-Zeichen enthält und dass zsh (oder eine andere Anwendung) und Ihr Terminal eine andere Vorstellung davon haben, wie breit sie sind. Dies kann passieren, wenn die Codierung nicht übereinstimmt Ihres Terminals und der in der Shell deklarierten Codierung, und die beiden Codierungen führen zu unterschiedlichen Breiten für bestimmte Bytefolgen. Typischerweise könnten Sie auf dieses Problem stoßen, wenn Sie ein Nicht-Unicode-Terminal verwenden, aber ein Unicode-Gebietsschema deklarieren oder umgekehrt.

Anwendungen verlassen sich auf Umgebungsvariablen, um das Gebietsschema zu kennen; die relevante Einstellung ist LC_CTYPE , die aus den Umgebungsvariablen LANGUAGE ermittelt wird , LC_ALL , LC_CTYPE und LANG (der zuerst gesetzte gilt). Der Befehl locale | grep LC_CTYPE teilt Ihnen Ihre aktuelle Einstellung mit. Normalerweise lässt sich der Terminal-Emulator am besten LC_CTYPE festlegen, um lokale Probleme zu vermeiden , da es weiß, welche Codierung es erwartet; aber wenn das bei dir nicht funktioniert, stelle sicher, dass du LC_CTYPE einstellst .

Die gleichen Symptome können auftreten, wenn der vorherige Befehl eine Ausgabe anzeigte, die nicht mit einem Zeilenumbruch endete, sodass die Eingabeaufforderung in der Mitte der Zeile angezeigt wird, die Shell dies jedoch nicht erkennt. In diesem Fall würde das nur nach Ausführung eines solchen Befehls passieren, nicht dauerhaft.

Verwandte:IO-Umleitung und der Head-Befehl?

Wenn eine Zeile nicht richtig angezeigt wird, kann der Befehl redisplay oder clear-screen (gebunden an Strg +L standardmäßig) wird es beheben.


Linux
  1. Wie kann man Steuerzeichen (^c, ^d, ^[, …) in der Shell anders darstellen?

  2. Im Befehlsverlauf scheinen die ersten 75 Zeilen zu fehlen?

  3. Generieren Sie die Verteilung der Dateigrößen über die Eingabeaufforderung

  4. Wie erfasse ich die erste IP-Adresse von einem ifconfig-Befehl?

  5. Warum gibt slabtop -o nur die ersten 23 Zeilen zurück, wenn der Befehl weitergeleitet wird?

So verwenden Sie den Hostnamen-Befehl unter Linux

Lesezeichen für die Linux-Befehle für einfacheren wiederholten Aufruf

Textfarbe der Ausgabe in der Eingabeaufforderung ändern?

Verwenden des tr-Befehls in Linux, um mit Charakteren zu spielen

Wie kann die Ausgabe eines Befehls in eine Datei umgeleitet werden, wenn der Befehl Benutzereingaben auffordert?

Ersetzen Sie alle Zeichen außer den ersten vier Zeichen