Wie kann ich das Vervollständigungssystem von zsh optimieren, um unter bestimmten Umständen "gefälschte" Dateien zu vervollständigen?
Genauer gesagt, das AVFS- Dateisystem macht Archive als Verzeichnisse verfügbar, indem neben jedem Archiv ein „falsches Verzeichnis“ erstellt wird. Standardmäßig wird die gesamte Verzeichnishierarchie unter ihrem Bereitstellungspunkt repliziert ~/.avfs
. Außerdem gibt es unter ~/.avfs
für jede Archivdatei, z. B. /tmp/foo.zip
neben der Archivdatei selbst ~/.avfs/tmp/foo.zip
, ein Verzeichnis, ~/.avfs/tmp/foo.zip#
das den Inhalt des Archivs anzeigt. Dieses zusätzliche Verzeichnis erscheint jedoch nicht in der Liste von ~/.avfs/tmp
: es existiert nur auf ausdrücklichen Wunsch. (Dies ähnelt der Funktionsweise einiger Automounters.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Wenn ich einen Befehl wie oben eingebe, foo.zip#
wird er nicht als Vervollständigung angezeigt ~/.avfs/tmp/
, da es kein solches Verzeichnis gibt. Wie kann ich zsh mitteilen, dass immer, wenn es eine Datei gibt, deren vollständiger Pfad $arc
mit ~/.avfs/**/*.(tgz|zip)
¹ übereinstimmt , so getan werden sollte, als gäbe es ein Verzeichnis mit dem Namen ${arc}#
?
(Beachten Sie, dass die Vervollständigung bei jedem Aufruf von _files
oder funktionieren soll _dirs
, nicht nur für den cd
Befehl. _files
Wenn möglich, möchte ich nicht den Code der Funktion duplizieren müssen .)
¹ und alle anderen Erweiterungen
/path/to/foo
ist sichtbar als ~/.avfs/path/to/foo
.
avfs
. Wenn der Standardverzeichniseintrag #
für alle Dateien angezeigt wird , die mit den von ihm unterstützten Zeichenfolgen übereinstimmen, oder die Dateien in einem Verzeichnis von Magic auf die erforderlichen Einträge geprüft werden #
, funktioniert die Vervollständigung einfach. Ich denke, es würde einen Performance-Hit für so etwas geben, find
da es jetzt komprimierte Dateien durchwühlen würde.