Der traurige Teil meiner Antwort ist: Bash (via Readline) hat so viele Möglichkeiten zur Vervollständigung. Eine normale Linux-Distribution kann jedoch die grundlegende Dateinamenerweiterung mit [tab] (oder [tab] [tab]) durch Hinzufügen einer Optionserweiterung stören . In meinem Fall ist es das Paket "Bash-Vervollständigung" , das mir das im ursprünglichen Q beschriebene Verhalten verleiht.
Es ist nicht nur ein openvpn
Problem. Q sagt: "zum Beispiel".
Mit bind -p | grep complete
bekomme ich:
"\C-i": complete
"\e\e": complete
"\e!": complete-command
"\e/": complete-filename
...
"\e\C-i": dynamic-complete-history
"\eg": glob-complete-word
"\e*": insert-completions
# menu-complete (not bound)
...
"\C-x/": possible-filename-completions
Hier ist TAB = ctrl-i an die Grundfunktion gebunden complete
. Die anderen Bindungen auf meinem Archlinux habe ich gerade ausprobiert. Mit "ta [esc] [star]" kann ich alle Befehle ab "ta" in meine Befehlszeile einfügen.
Die complete
Readline-Funktion wird in man bash erklärt:
Abschluss
vollständig (TAB)
Versuchen Sie, den Text vor dem Punkt zu vervollständigen. Bash versucht, den Text als Variable
(wenn der Text mit $ beginnt), Benutzername (wenn der Text mit ~ beginnt), Hostname (wenn der Text mit @ beginnt) oder Befehl (einschließlich Aliasnamen und Funktionen) zu behandeln. Wenn keines davon eine Übereinstimmung ergibt,
wird versucht , den Dateinamen zu vervollständigen.
Ich kann das nur teilweise reproduzieren. Ich denke, man bash vergisst zu erwähnen, dass es davon abhängt, ob Sie ein erstes Wort oder ein zweites, drittes usw. Wort [tab].
Ich habe Dateien, die mit "ba" beginnen, in meinem Heim- / Arbeitsverzeichnis. Wenn ich an der Eingabeaufforderung "ba [tab]" eingebe, erhalte ich diese Namen nicht, sondern nur Befehle von badblocks
bis bashbug
. Dies ist ein vernünftiges Verhalten: Das erste Wort gibt Ihnen Befehle, die folgenden Wörter Dateinamen. Und wenn Sie "$ [tab]" eingeben, erhalten Sie wirklich eine schöne Liste von Variablennamen.
Wenn ich [Tab] sage, meine ich eigentlich [Tab] [Tab]. Aber wir gewöhnen uns so sehr daran, dass wir nicht einmal bemerken, was diese "vollständige" Readline-Funktion alles macht. Mit den Variationen "complete-" können Sie steuern, wonach gesucht wird (Befehl, Dateiname, Variable) und was mit der Liste zu tun ist, wenn mehr als eine Übereinstimmung vorliegt (Möglichkeit).
Diese Readline-Funktionen werden mit vielen Standardbindungen geliefert. Beide man bash
und man readline
listen die Funktionen und ihre Standardbindungen auf. Verwenden Sie zum Überprüfen bind -p wie oben. Dies ist auch die Basis für die ~/.inputrc
Datei. Ich habe gerade eine gemacht (es gab nur eine kryptische / etc / inputrc):
set colored-completion-prefix on
set colored-stats on
Mit farbigen Statistiken bekomme ich eine farbige Liste, wie bei ls --color
. Nach "bi [tab] [tab]" sehe ich "bind" in Weiß und "bison" in grün, was mir sagt, dass "bind" keine ausführbare Datei ist (sondern eine eingebaute ... dies ist eine BEFEHLserweiterung ... "bind" ist nicht einmal ein Dateiname!).
set show-all-if-ambiguous on
Dies steuert die Registerkarte im Vergleich zur doppelten Registerkarte. Nachdem ich es hinzugefügt und eingegeben habe
cd s[tab]
Ich bekomme direkt eine farbige Liste aller Dateinamen. Verzeichnisse, Links, normale Dateien usw. werden alle in ihrer eigenen Farbe angezeigt.
Diese Readline-Variablen können Sie mit sehen bind -v
. Um eine .inputrc-Änderung zu testen, starten Sie eine neue Bash mit "bash" und beenden Sie dann. Oder erneut anmelden.
Die nächste Schicht ist in/usr/share/bash-completion
Es enthält Skripts pro Befehl, hauptsächlich aus den Paketen util-linux und systemd. Es gibt eine Mount- (2 Kb) und eine Systemctl- (13 Kb) Datei. Die Mount-Datei ist interessant: Sie gibt Ihnen / proc / filesystems, nachdem Sie "-t" eingegeben haben.
Normalerweise erhalte ich nach "mount -t [tab]" FILENAMES. Nachdem ich diese "Mount" -Datei gefunden habe, bekomme ich wirklich fs-Typen wie ext2, ext3 und ext4. Ich gehe:
complete -r mount
um diese Funktion zu entfernen. (Dies complete
ist ein Shell-eingebauter Befehl)
Die dritte Schicht ist das zusätzliche "Bash-Completion" -Paket . Ich habe es bereits deinstalliert, nachdem ich es zum Testen installiert hatte. Mit diesem Paket habe ich diese nette Funktion zum Erweitern von Optionen und auch Paketnamen erhalten. Ich könnte "tar - [tab]" eingeben und sehe alle Optionen. Aber die Dateinamenerweiterung ging in vielen Konstellationen verloren. Amd nicht nur auf Archlinux.
Dieses Bash-Completion-Paket gab mir ein 2000-Zeilen-Skript "bash_completion" und viele Befehlsdateien. Die für "Teer" war 700 Zeilen voller Funktionen. Dies zu beheben ist also keine Lösung.
Wenn Sie sich wirklich für diese [Tab] vollständigen Feinheiten interessieren, müssen Sie unten beginnen und eine oder zwei Readline-Funktionen auswählen complete
, die nicht an andere Tasten als [Tab] gebunden sind. Meine obige Standardkonfiguration funktioniert wirklich, aber ich habe nie etwas anderes als [tab] verwendet. Jetzt möchte ich die richtigen Funktionen auf die richtigen Tasten einstellen. Mit oder ohne dieses optionserweiternde Bash-Completion-Paket.