Ist es für Bash/Readline möglich, Vervollständigungsvorschläge aus dem Terminal zu „bereinigen“?

Ist es für Bash/Readline möglich, Vervollständigungsvorschläge aus dem Terminal zu „bereinigen“?

Wenn Sie zsh verwenden und eine tabVervollständigung für Befehle, Pfadnamen, Optionen usw. durchführen, werden die Vorschläge immer dann, wenn es mehrere mögliche Übereinstimmungen gibt, unter der Eingabeaufforderung angezeigt.
Sobald Sie einen Vorschlag ausgewählt haben, entfernt zsh die Liste der Vorschläge aus dem Terminal, wie Sie hier sehen können:

Bildbeschreibung hier eingeben

Bildquelle

Wenn Bash dagegen Vervollständigungsvorschläge anbietet, gibt es die Liste aus und bringt Sie zu einer neuen Eingabeaufforderung zurück.

Bildbeschreibung hier eingeben

Bildquelle
Das zsh-Verhalten ist mir vorzuziehen, da die Vorschläge, die ich nie verwendet habe, keinen Wert bieten und nur mehr „Lärm“ im Terminal erzeugen.
Ist es möglich, bash/readline so zu konfigurieren, dass sie sich auf diese Weise wie zsh verhalten?

Antwort1

Kurz gesagt: Es ist möglich, aber als .inputrcBindung komplex.

lang: Wie in einem Kommentar vorgeschlagen,könnteMachen Sie so etwas in Ihrer Bash-Eingabeaufforderung und in den Readline-Bindings.

Das Speichern/Wiederherstellen des Cursors wäre wirkungslos, da Sie den Rest des Bildschirms nur dann zuverlässig löschen könnten, wenn Sie Enterzum Abschließen der Auswahl auf drücken.

Sobald Sie die Kontrolle an übergeben haben accept-line, ist es zu spät, den Rest des Bildschirms zu löschen. Es ist möglich (aber komplex), eine Reihe von echten und Ad-hoc-„Tastenkombinationen“ zu definieren, damit readline mehr als eine Operation ausführen kann. Siehe zum Beispiel

Dieser Ansatz beschränkt Sie jedoch darauf, Zeichen an bash zu senden und Befehle an readline auszugeben. Keiner der readline-Befehle

printf '\033[J'

zum Löschen derRestdes Bildschirms. Am nächsten kommt Readlines eingebaute Funktion clear-screen(nichtwas du willst). Deine Bindung müsste so etwas tun wie

  • beginning-of-line
  • einfügen " printf '\033[J';"
  • end-of-line
  • accept-line

Das end-of-linewürde eine Eigenart von readline umgehen. Es erlaubt Ihnen,Enter überallin der Zeile. Wenn sich Ihr Cursor in der Mitte der Zeile befände, wäre nur ein Fragment Ihrer Eingabe sichtbar (obwohl Bash die gesamte Zeichenfolge erhalten würde).

verwandte Informationen