In zsh
hat der cd
Befehl eine aus zwei Argumenten bestehende Form: cd OLD NEW
ändert sich zu ${PWD/OLD/NEW}
. Mit dem neuen Vervollständigungssystem kann zsh vervollständigen NEW
: Das zweite Argument wird auf der Grundlage dessen vervollständigt, was ersetzt werden OLD
kann, um ein vorhandenes Verzeichnis zu erhalten. Das erste Argument wird jedoch nur für vorhandene Verzeichnisse ausgeführt.
Wie kann ich zsh dazu bringen OLD
, zusätzlich zum Vervollständigen vorhandener Verzeichnisse Vervollständigungen anzubieten, für die Werte möglich sind ?
Zum Beispiel, wenn das aktuelle Verzeichnis /path/to/foo
und es gibt auch Verzeichnisse /also/to/foo
und /path/to/foo/prime
dann cd p
Tabvervollständigt p
zu prime
. Wenn ich ausführen cd path also
möchte, möchte ich, dass zsh auch path
als Abschluss angeboten wird. Wie?
Die Verwendung von bereits eingegebenen Werten des zweiten Arguments zur Einschränkung der Möglichkeiten für das erste Argument wäre ein Plus, aber auch das unabhängige Vervollständigen des ersten Arguments wäre in Ordnung.
quelle
cd p also <Tab>
odercd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: Wenn ich drücke,<Tab>
während sich der Cursor in der Liste befindetalso
, erwarte ich, dass der Vorgangalso
abgeschlossen ist, nichtp
.cd t<tab>
sollte es anbietenth/to/foo/prime
undto/foo/prime
? Oder sollte es sich nur auf Verzeichnisgrenzen beschränken?Antworten:
Ich schätze, Sie könnten die Komponenten von
$PWD
zurcd
Vervollständigungsliste hinzufügen , obwohl dies ein Umgreifen erfordert_cd
. Das heißt, eine angepasste Version von_cd
muss zuerst in angezeigt werden$fpath
.Dann oben oben
~/zcomp/_cd
eine Funktion hinzufügenund dann
_alternative
fügen Sie kurz vor der Zeile hinzu, was zur Liste der Alternativen zurückkehrtDadurch werden die
pwd
Komponenten jedoch immer zu dencd
Vervollständigungen hinzugefügt :Mit zusätzlicher Logik können Sie die
$PWD
Komponenten nur dann hinzufügen, wenn statt immer bereits ein zweites Argument vorhanden ist.Jedoch! Dies bringt die
cd
Fertigstellung immer durcheinander und erfordert, dass wir die Upstream-_cd
Fertigstellung patchen . Eine andere Möglichkeit wäre, einen neuen Namen für die Funktion zu erstellen, die von dem Zwei-Argument bereitgestellt wirdcd
, das möglicherweise aufgerufen wirdcdsub
, und dafür nur die Vervollständigung vonPWD
Komponenten anzuzeigen. Fügen Sie dies zu~/.zshrc
Und dann eine entkernt
_cd
Vervollständigung_cdsub
, um irgendwo platziert zu werden in$fpath
:quelle