Bash-Vervollständigung: immer alle Dateien anzeigen

Bash-Vervollständigung: immer alle Dateien anzeigen

Ich habe es vor kurzem installiert bash-completion(über Homebrew). Es lässt jetzt Dateien in der Vervollständigungsliste weg, die ichwollenes anzuzeigen und lässt gültige Optionen vollständig aus, wie diese:

[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))

Als intensiver Benutzer der Befehlszeile ist dies äußerst ärgerlich. Kann mir jemand sagen, wie ich dieses Verhalten deaktivieren kann? Ich konnte weder in der Dokumentation noch bei Google etwas Nützliches finden.

Die Bash-VervollständigungFAQsagt:

F. Der Bash-Vervollständigungscode verhindert, dass einige Befehle für Dateien mit Erweiterungen abgeschlossen werden, die in meiner Umgebung zulässig sind. Muss ich die Vervollständigung für diesen Befehl deaktivieren, um die Ausführung für die erforderlichen Dateien zu ermöglichen?

A. Nein. Verwenden Sie M-/, um (in den Worten der Bash-Manpage) die Dateinamenvervollständigung für den Text links vom Cursor zu versuchen. Dadurch werden alle Dateitypbeschränkungen umgangen, die durch den Bash-Vervollständigungscode festgelegt wurden.

Aber das ist für mich keine akzeptable Lösung - ich möchte, dass mit „TAB“ alle Dateien/Verzeichnisse angezeigt werden, unabhängig davon, ob die Erweiterung für die Datei gültig ist oder nicht (so hat es bei mir in den letzten 20 Jahren gut funktioniert).

Wie kann ich das erreichen?

Ich würde eine .bashrc/ .bash_profile-Einstellung dem Löschen globaler Vervollständigungsskripte vorziehen. So binde ich derzeit die Bash-Vervollständigung ein (es ist nur eine Standard-Homebrew-Installation):

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

Update: Ich habe das gesehenBash-Dateinamen-Tab-Vervollständigungaber es ist nicht ganz das, was ich will, da es zu viel manuelle Arbeit für jede mögliche Dateierweiterung auf der Erde/meinem System erfordert.

Antwort1

Die akzeptierte Antwort behebt das Problem immer noch nicht wirklich, da sie die Befehlsvervollständigung unterbricht (z. B. „pyt+ TAB“, um Python zu erhalten usw.), da dies nicht im vollständigen Dateinamen enthalten ist.

complete -o default python

Dies behebt das Problem nicht für alle Befehle (nur „python“ in diesem Beispiel), aber es behebt es für bestimmte Befehle, die sich grob falsch verhalten. Leider scheint es keine saubere Möglichkeit zu geben, „default“ (d. h. Readlines Standard) für alles festzulegen. Dies muss für jeden einzelnen Befehl, den Sie möglicherweise verwenden, durchgeführt werden. Oder verwenden Sie die oben beschriebene .inputrc-Problemumgehung.

Antwort2

Das hat mich auch geärgert, also habe ich das Bash-Handbuch gelesen. Ich glaube, das gewünschte Verhalten lässt sich mit dieser ~/.inputrcDatei erreichen:

TAB: complete-filename
M-/: complete

Die normale Vervollständigung mit dem vollständigen Regelsatz wird auf abgebildet, Meta-/und die reine Dateinamenvervollständigung wird auf abgebildet TAB.

verwandte Informationen