In Bash funktioniert die automatische Vervollständigung von Pfaden seit kurzem nicht mehr, wenn vim
Befehle ausgegeben werden, deren Pfad tiefer als zwei Verzeichnisse ist (bei anderen Befehlen wie ls
und funktioniert sie weiterhin wie erwartet cd
).
Wenn ich zum Beispiel tippe ls .config/btsync/bt
und dann die Tabulatortaste drücke, wird dies auf erweitert ls .config/btsync/btsync.conf
.
Wenn ich tippe vim .config/bt
und dann die Tabulatortaste drücke, wird es zu erweitert vim .config/btsync/
.
Wenn ich jedoch tippe vim .config/btsync/bt
und dann die Tabulatortaste drücke, passiert nichts (ich würde erwarten, dass es vim .config/btsync/btsync.conf
wie im ls
obigen Beispiel erweitert wird).
Ich bekomme das gleiche Problem, wenn ich als mein eigener Benutzer und als su ausgeführt werde.
Ich habe diesen Beitrag gelesen, in dem ein Problem mit älteren Versionen der Bash-Vervollständigung erwähnt wurde, aber ich verwende 2.1-5.
UPDATE: Nach einigen zusätzlichen Tests habe ich festgestellt, dass das Hauptproblem darin besteht, dass Bash nur Verzeichnisnamen vervollständigt, keine Dateinamen.
UPDATE: Es stellte sich heraus, dass dies bash-completion
die Hauptursache war. Siehe meinen zweiten Kommentar zur akzeptierten Antwort.
Anregungen zur möglichen Ursache dieses Verhaltens werden gerne entgegengenommen!
quelle
.bashrc
!.bashrc
geposteten, wie gewünscht.Antworten:
Ich habe weitere Nachforschungen für Sie angestellt, und ich habe Folgendes gefunden: Der Schlüssel zur automatischen Vervollständigung ist der
bash
Befehlcomplete
. Sie können die Regeln fürvim
Folgendes ausdrucken :Ebenso können Sie diese spezifischen Regeln entfernen mit:
Mit diesem Befehl werden die Standardeinstellungen wiederhergestellt - die üblichen Pfade und Dateinamen werden ohne zusätzliche Logik vervollständigt. Das ist wahrscheinlich was Sie wollen.
Weitere Informationen finden Sie unter
help complete
oderman bash
im Abschnitt zumcomplete
Befehl (es ist eine integrierte Bash, daher ist sie in der Bash-Manpage dokumentiert).Ein letzter Punkt - die oben genannten Änderungen betreffen nur die aktuelle
bash
Sitzung, wenn Sie die vim Regeln entfernen wollen nach jedem Login die setzencomplete -r vim
auf Ihre~/.bashrc
.Ich hoffe, das hilft :)
quelle
complete -p vim
Befehl wurde zurückgegebencomplete -F _filedir_xspec vim
und vomcomplete -r vim
Befehl entfernt, wodurch das Problem behoben wurde. Ich werde dencomplete
Befehl und die vom Schalter -p zurückgegebenen Informationen lesen . Ein wenig verwundert, warum sich dieses Verhalten so geändert hat, wird das auch untersuchen._filedir_xspec
Funktion/usr/share/bash-completion/bash_completion
schließt nur Verzeichnisse ab. Ich habe deinstalliertbash-completion
, diecomplete -r vim
Leitung von meinem entfernt.bashrc
und neu gestartet undvim
verhält mich nun wie erwartet.Standardmäßig vervollständigt Bash automatisch nur Pfad- und Dateinamen. Der Mechanismus ist jedoch erweiterbar und es kann Bash beigebracht werden, unterschiedliche Autovervollständigungen für unterschiedliche Programme durchzuführen. Beispielsweise
git
kann es die Unterbefehlsnamen (Klonen, Festschreiben) und Revisionen anstelle von nur Pfadnamen automatisch vervollständigen. Manchmal ist es praktisch, manchmal ziemlich ärgerlich - zum Beispiel, wenngzip -d
es abgelehnt wird, Dateinamen zu vervollständigen, die das nicht haben.gz
Erweiterung .Die Bash-Vervollständigung ist normalerweise in konfiguriert
/etc/bash_completion.d
- Sie werden dort wahrscheinlich eine Datei finden, die aufgerufen wirdvim
. Dies ist die Datei, die die Regeln für die automatische Vervollständigung der Befehlszeile enthältvim
.Jetzt haben Sie zwei Möglichkeiten:
vim
und führen Sie nur die automatische Vervollständigung des Standardpfads durch.Und natürlich einen Fehlerbericht einreichen, der das Problem umreißt, damit es in zukünftigen Versionen behoben wird :)
quelle
/etc/bash_completion.d
und es ist nur einehg
Datei vorhanden (für Mercurial). Sehr eigenartig./usr/share/bash-completion/
alle Dateien vonvim
package oder frombash
oderbash-completion
packages aufzulisten (nicht sicher, wie sie unter ArchLinux aufgerufen werden). Es wird irgendwo da sein.bash-completion
Paketshows/usr/share/bash-completion/completions
enthält Regeln für viele Programme, jedoch nicht für allevim
. Bei der Auflistung der mit demvim
Paket installierten Dateien werden keine vervollständigungsbezogenen Dateien angezeigt, und bei der Suche im gesamten System werdenfind / -name vim
auch keine vervollständigungsbezogenen Dateien angezeigt.Vielleicht könnten Sie die Bash-Vervollständigung neu installieren:
apt-get install --reinstall bash-completion
Und schauen Sie sich die Datei /etc/bash.bashrc an:
nano /etc/bash.bashrc
Und vergewissern Sie sich, dass die folgende Zeile unkommentiert ist:
Starten Sie dann Ihre Terminalsitzung neu
quelle
bash-completion
, dasvim
Verhalten zu entfernen , es zu testen und dann erneut zu installierenbash-completion
und zu testen, aber unter beiden Umständen trat immer noch das gleiche Problem auf. Die von Ihnen aufgelisteten Zeilen sind in nicht vorhanden/etc/bash.bashrc
. Diese Zeile ist jedoch[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion