Как я могу настроить систему завершения zsh для завершения «поддельных» файлов при некоторых обстоятельствах?
Точнее говоря, файловая система AVFS представляет архивы как каталоги, создавая «поддельный каталог» рядом с каждым архивом. По умолчанию он реплицирует всю иерархию каталогов в своей точке монтирования ~/.avfs
. Кроме того, ~/.avfs
для каждого файла архива, такого как /tmp/foo.zip
, помимо самого файла архива ~/.avfs/tmp/foo.zip
, есть каталог, ~/.avfs/tmp/foo.zip#
который отображает содержимое архива. Однако этот дополнительный каталог не отображается в списке ~/.avfs/tmp
: он существует только при явном запросе. (Это похоже на работу некоторых автомонтировщиков.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Когда я набираю команду, подобную приведенной выше, foo.zip#
она не отображается как завершение ~/.avfs/tmp/
, поскольку такой директории нет. Как я могу сказать zsh, что всякий раз, когда существует файл, полный путь которого $arc
совпадает с ~/.avfs/**/*.(tgz|zip)
should, он должен делать вид, что существует каталог с именем ${arc}#
?
(Обратите внимание, что я хочу, чтобы завершение работало с каждым вызовом _files
или _dirs
, а не только с cd
командой. Я бы предпочел не дублировать код _files
функции, если это возможно.)
¹ и все остальные расширения
/path/to/foo
виден как ~/.avfs/path/to/foo
.
avfs
. Если он представляет #
запись каталога по умолчанию для любых файлов, которые соответствуют строкам, которые он поддерживает, или даже магически проверяет файлы в каталоге на предмет того, что нужно для #
записи, тогда завершение будет просто работать. Я полагаю, что это может привести к снижению производительности примерно так же, find
как это теперь происходит при сжатии сжатых файлов.