Nach der Installation neuer Software weiß ein bereits geöffnetes Terminal mit zsh nichts über die neuen Befehle und kann für diese keine automatische Vervollständigung generieren. Das Öffnen eines neuen Terminals behebt anscheinend das Problem. Kann der Index (oder wie auch immer Sie ihn nennen) neu erstellt werden, sodass die automatische Vervollständigung auf dem alten Terminal funktioniert?
Ich habe es versucht, compinit
aber das hat nicht geholfen. Gibt es auch einen Weg, der nicht von der Shell abhängig ist? Es ist schön, auch eine Möglichkeit zu haben, die Antwort zu überprüfen (außer, etwas zu deinstallieren und erneut zu installieren).
Ich meine, nachdem ich ein paar Zeichen des Befehlsnamens eingegeben habe, kann ich drücken Tabund zsh
sollte den Rest tun, um den vollständigen Namen abzurufen.
quelle
Antworten:
Verwenden Sie
rehash
oder, um den Cache ausführbarer Befehle neu zu erstellenhash -rf
.Stellen Sie sicher, dass Sie die
hash_list_all
Option nicht deaktiviert haben (dies führt zu noch weniger Festplattenzugriffen, führt jedoch zu weniger Cache-Aktualisierungen).Wenn Sie keinen Befehl eingeben müssen, können Sie zsh anweisen, dem Cache nicht zu vertrauen, wenn Sie fertig sind, indem Sie die folgende Zeile in Ihr
~/.zshrc
¹ einfügen:Es gibt Leistungskosten, die bei einer typischen Desktop-Einstellung heutzutage jedoch vernachlässigbar sind. (Dies ist nicht der
$PATH
Fall, wenn Sie NFS oder ein System ohne Arbeitsspeicher verwenden.)Der
zstyle
Befehl selbst ist in derzshmodule
Manpage dokumentiert . Die Stilwerte sind in den Manpageszshcompsys
und dokumentiertzshcompwid
, oder Sie können die Quelle (hier der_command_names
Funktion) lesen . Wenn Sie eine lesbare Dokumentation wünschen ... wenn Sie welche finden, lassen Sie es mich wissen!¹ benötigt zsh≥4.3.3, danke Chris Johnsen
quelle
PATH="$PATH"
würde das auch klappen.HASH_LIST_ALL
wird in meiner Dokumentation standardmäßig angezeigt.Wenn Sie Probleme haben, die Argumentvervollständigung für die neuen Befehle zum Laufen zu bringen, ist compinit wahrscheinlich der Befehl, den Sie benötigen. Es gibt jedoch einen Caching-Mechanismus, der möglicherweise Ihr Problem verursacht.
In der Dokumentation zu meiner Version (4.3.10) heißt es, dass compinit eine zwischengespeicherte "Dump-Datei" verwendet,
.zcompdump
um kompilierte Vervollständigungsfunktionen zu speichern und nachfolgende Aufrufe zu beschleunigen. Die Sicherungsdatei wird nur ungültig, wenn eine Änderung der Anzahl der Vervollständigungsdateien (fpath
Elementdateien, die mit#compdef …
oder beginnen#autoload …
) festgestellt wird . Vermutlich würde die Installation neuer Software die Anzahl solcher Vervollständigungsdateien ändern (vorausgesetzt, dass auch die zsh -Dateien für die automatische Vervollständigung an der richtigen Stelle installiert wurden ), so dass ich davon ausgehen würde, dass eine einfache Dateicompinit
funktioniert. Wenn Sie sich in einer Situation befinden, in der dies nicht funktioniert, müssen Sie die Sicherungsdatei möglicherweise umgehen oder manuell ungültig machen.Um die Dump-Datei zu überspringen, verwenden Sie
compinit -D
; Dies wirkt sich nur auf die aktuelle Shell aus.Entfernen Sie die Sicherungsdatei, und führen Sie sie erneut aus, um sie neu zu erstellen
compinit
:Dies wirkt sich auf die aktuelle Shell, vorhandene Shells, die normal ausgeführt werden
compinit
, und alle zukünftigen Shells aus.quelle
zim
erlauben die Verwendung von Host-Dump-Dateien. In diesem Fall auch$zcompdump_file
zusammen mit entfernen.zcompdump
.