Wie kann das Terminal automatisch vervollständigt werden, wenn mehrere Dateien / Verzeichnisse vorhanden sind?

32

Wenn ich mehrere Verzeichnisse habe, wie:

afoo abar

Manchmal verweigert mein Terminal die automatische Vervollständigung, wenn ich die Tabulatortaste drücke (z. B. "cd a" und dann die Tabulatortaste) und drucke stattdessen die Verzeichnisliste. Manchmal gibt es sogar ein lautes, nerviges Geräusch von sich. Hast du eine Idee, wie es in solchen Fällen automatisch vervollständigt werden kann? ZB kann es zuerst abar zeigen, und dann afoo, wenn ich wieder die Tabulatortaste drücke. Ich habe gesehen, dass dies in Windows der Fall ist, oder in Ubuntu

TifatulS
quelle

Antworten:

46

Was mir das Leben rettet, ist, die Möglichkeiten durchzugehen, anstatt eine blöde Liste zu zeigen.

Fügen readlineSie die folgenden Zeilen hinzu, wenn bash für die automatische Vervollständigung verwendet wird~/.inputrc

Sobald Sie zufrieden sind und gründlich unter Lösung für ein paar Tage / Wochen getestet haben Ausschneiden und Einfügen (nicht kopieren!) Die gleichen Einstellungen von ~/.inputrczu /etc/inputrcdenen die systemweite Einstellungen enthält, diese auf Ihrem System für alle Benutzer zu machen (einschließlich Gast).

Der Code:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

dann exitdein terminal (oder remote terminal wie putty) und öffne es wieder ...

Beispiele:

  1. Wenn haben Sie 3 Dateien: file1, file2und file3und geben Sie ein:

    e fTabTabTab

    es wird durchlaufen:

    e file1
    e file2
    e file3

    und wenn Sie rückwärts fahren möchten, drücken Sie einfach Shift+Tab

  2. Wenn Sie Folgendes eingeben:

    very-complicated-command with lots of command line parameters

    und wenn Sie das nächste Mal den gleichen Befehl benötigen, geben Sie einfach Folgendes ein:

    very

    und es wird für Sie eingeben:

    very-complicated-command with lots of command line parameters

Das spart Ihnen eine Menge Zeit beim Bash! ;-)

Fabby
quelle
2
+1, interessant, aber: 1. ~/.inputrckönnte vorzuziehen sein /etc/inputrc, und 2. ich denke, Sie können dies bashdirekt einstellen : unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru
Das ist ganz nett, danke (und habe meine Zustimmung). Gibt es eine universelle Möglichkeit, die Optionen zu zeigen, durch die die Schleife geht, und die das Beste aus beiden Welten kombiniert? Ich mag die Tab + Tab-Möglichkeit mit Ordnern und Unterbefehlen usw., damit ich mich nicht an alle erinnern muss (z git branch <tab through branches>. B. Wenn ich jedoch eine Liste und einen Tab durch ihre Elemente sehen könnte, wäre das großartig! Für Verzeichnisse und Dateien lsist eine Option, um zu sehen, welche Elemente verfügbar sind. Für Unterbefehle ist es jedoch leider nicht so einfach oder offensichtlich.
Erik
Dies funktioniert auch auf PuTTy!
Musste
@Erik: Anscheinend ist das, wonach du gefragt hast, möglich, aber ich werde meine Antwort nicht bearbeiten, um die Dinge hier einfach zu halten. (löschte alten Kommentar, dass es nicht möglich ist)
Fabby
18

Nach dem 1. müssen tabSie weitere Buchstaben einfügen. Also, wenn Sie tippen

cd a

und drückst tabdu bekommst nichts und nach einer Sekunde tab(unmittelbar danach) bekommst du eine Liste der Namen beginnend mit aund musst dann ein einfügen f, damit es den Rest automatisch vervollständigt

cd atabtabftabtab

wird darin enden, dass

cd afoo
Rinzwind
quelle
2
IMHO: Dies ist der richtige Weg. Ich persönlich finde das Fensterverhalten sehr ärgerlich. Stellen Sie sich den Fall vor, dass Sie viele Dateien haben, die mit beginnen, aund dass Sie die letzte benötigen. Wenn Sie versehentlich die Tabulatortaste drücken, nachdem aSie die Liste aller möglichen Vervollständigungen durchlaufen haben, um die richtige zu finden.
Tobias
@Tobias: Wenn Sie versehentlich mit dem anderen System zu früh auf [Tab] geklickt haben , ist immer noch [Strg] [K] ... ;-)
Fabby