如何在 zsh 中为自定义完成功能的路径添加自动完成功能?

如何在 zsh 中为自定义完成功能的路径添加自动完成功能?

我为audtool.这是一个示例:-

#compdef audtool

_audtool() { 
    local state

_arguments \
    '1: :->csi'\

case $state in
csi)
    _arguments '1::(
    --current-song
    --current-song-filename 
    --help
    --playlist-addurl)'
;;
esac
}

_audtool "$@"

除了一个小故障之外,上面的函数运行得很好,即,在自动完成之后,当我尝试向文件添加路径时,路径不会扩展。我想问的是为什么不

audtool --playlist-addurl /h

扩展到

audtool --playlist-addurl /home/ 

按下后Tab

如果有人可以帮助我解决这个问题。谢谢你!

答案1

我解决了。要添加一个参数以使其显示完整路径,我所要做的就是添加这些行:

_arguments '*:filename:_files'

所以,最终的函数如下所示:

#compdef audtool

_audtool() { 
    local curcontext="$curcontext" state line
    typeset -A opt_args

    _arguments \
        '1: :->csi'\
        '2: :->file'

    case $state in
    csi)
        _arguments '1: :(
            --current-song
            --current-song-filename 
            --current-song-length
            --playlist-addurl)'
    ;;
    file)
        _arguments '*:filename:_files'
    ;;
    esac
}

_audtool "$@"

相关内容