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 "$@"

上記の関数は、オートコンプリート後にファイルにパスを追加しようとしたときにパスが拡張されない1つの欠陥を除いて、うまく機能します。私が尋ねたいのはなぜダメなのかということだ。

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 "$@"

おすすめ記事