我使用afsh通过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文件系统。一旦我手动键入主机,子目录就可以正常工作。 E.g~ / remote / host / [TAB]工作正常。
大多数zsh compdef教程都专注于为自定义命令构建自定义完成符。这不是我想要的。
我一直在尝试使用compdef将特定目录的完成覆盖到我的hosts文件(使用内置的_hosts完成函数),但据我所知,compdef基于每个命令工作。我希望我的完成者能够处理所有试图在该目录上执行正常文件/目录完成的命令。
感觉就像它是如此基本,它是一个单行,如果我知道如何。我怎么能这样做?
答案 0 :(得分:0)
将以下内容添加到您的~.zshrc
文件中(或将其粘贴到命令行中进行尝试):
autoload -Uz compinit && compinit
bindkey '^I' complete-word
zstyle -e ':completion:*' fake-files '
[[ $PWD/$PREFIX$SUFFIX == $HOME/remote/ ]] && ISUFFIX="/"
reply=( $HOME/remote:${(j: :v)${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} )'
我尝试过了,而且行得通。我从_host
's source code开始进行了长时间的参数扩展。