使用zsh';s compdef或compctl以使用所有命令的_主机完成特定目录

使用zsh';s compdef或compctl以使用所有命令的_主机完成特定目录,zsh,fuse,sshfs,zsh-completion,Zsh,Fuse,Sshfs,Zsh Completion,我使用afuse使用sshfs将其他主机自动装载到本地文件系统。像这样: afuse -o timeout=30 -o mount_template=sshfs -C %r:/ %m -o unmount_template=fusermount -u -z %m ~/remote/ 这非常有效,但我希望能够使用我的~/remote目录自动完成/TAB命令。Zsh可以理解地认为~/remote是空的,因为afuse是一个神奇的虚拟FUSE文件系统。手动键入主机后,子目录就可以正常工作了。例如~/

我使用afuse使用sshfs将其他主机自动装载到本地文件系统。像这样:

afuse -o timeout=30 -o mount_template=sshfs -C %r:/ %m -o unmount_template=fusermount -u -z %m ~/remote/
这非常有效,但我希望能够使用我的~/remote目录自动完成/TAB命令。Zsh可以理解地认为~/remote是空的,因为afuse是一个神奇的虚拟FUSE文件系统。手动键入主机后,子目录就可以正常工作了。例如~/remote/host/[TAB]工作正常

大多数zsh compdef教程都侧重于为自定义命令构建自定义完成器。那不是我想要的

我一直在尝试使用compdef将特定目录的完成覆盖到我的主机文件中(使用内置的hosts completion函数),但据我所知,compdef是基于每个命令工作的。我希望我的完成程序能够处理所有试图在该目录上完成普通文件/目录的命令


感觉它是如此的基本,以至于它是一行一行的,只要我知道怎么做就好了。如何执行此操作?

将以下内容添加到您的
~.zshrc
文件中(或将其粘贴到命令行中进行尝试):

自动加载-Uz compinit&&compinit
bindkey“^I”完整单词
zstyle-e':完成:“‘假文件’
[[$PWD/$PREFIX$SUFFIX==$HOME/remote/]&&ISUFFIX=“/”
答复=($HOME/remote:${(j::v)${(s:)${(ps:\t:)${(f)~”$(