我有将文件名参数作为
的程序scp:path/to/file.ext
ark:/abs/path/to/file.ext
是否可以在某些关键字后跟冒号后生成zsh完整文件名?
到目前为止,我发现了如何在bash中执行此操作:将:
添加到COMP_WORDBREAKS
变量。
感谢Gilles,我设法像这样工作。
$ cat ~/.zshrc
...
function aftercolon() {
if compset -P 1 '*:'; then
_files "$expl[@]"
else
_files "$expl[@]"
fi
}
autoload -Uz compinit
compinit
compdef aftercolon hello olleh
现在在命令hello
和olleh
中,完成之后:按预期工作。
我认为可能有更好的方法:
我不得不奇怪if / else,因为这些命令也带有没有前缀的文件名。
由于我有很多命令采用这种参数,我需要添加每个命令的名称
答案 0 :(得分:1)
调用compset -P 1 '*:'
删除第一个冒号前的所有内容,然后调用_files
以完成冒号后的内容。例如,如果文件名完成不依赖于冒号之前的部分:
if compset -P 1 '*:'; then
_files "$expl[@]"
else
compadd "$expl[@]" -S : ark scp
fi
如果文件名完成取决于冒号前的部分,请先从$PREFIX
保存。
if [[ $PREFIX = *:* ]]; then
local domain=${PREFIX%%:*}
compset -P 1 '*:'
case $domain in
ark) _files "$expl[@]" -g "*.((tar|cpio)(|.gz|.xz|.bz2)|tgz|zip|rar|7z)";;
*) _files "$expl[@]";;
esac
else
compadd "$expl[@]" -S : ark scp
fi