zsh完了:指定されたディレクトリのファイルを完了します。

zsh完了:指定されたディレクトリのファイルを完了します。

私のスクリプトは、オプションのパラメータ(-i、-w)と指定されたディレクトリのファイル名を使用します。 zshに通常のファイル(ディレクトリやシンボリックリンクではない)のみを完了するように指示するにはどうすればよいですか?$HOME/data

これは私のものです/usr/share/zsh/functions/Completion/Unix/_my-script

#compdef my-script

_my-script() {
    integer ret=1
    local -a args
    args+=(
    '-i[case insensitive]'
    '-w[match whole words]'
    )

    _arguments $args[@] && ret=0
    return ret
}

_my-script

どこに追加し、通常のファイルのみを完了するように_files指定するには?zsh$HOME/data

#compdef my-scriptまた、最初の行はコメントではないようです。完成したファイルにコメントを追加するにはどうすればよいですか?

答え1

ファイル名はパラメータ1なので、1次のように渡されます。_arguments。位置1はパラメータをとるため、パラメータは次_argumentsのようになります。完了するファイルを指定するには、次のオプションを渡します。1:description:code to do the completion_files、その一部は以下から継承されます。_path_files:含めることができる特定のパターンと一致するように-W指定されたディレクトリ内で完了します。-gグローバル予選ファイル形式を制限します。ディレクトリは常に提供され、ディレクトリのパススルーが許可されていないとディレクトリは提供されませんので、代わりに_path_files使用してください。_files_files_path_files-g

args=( …
  '1:thing:_path_files -W ~/data -g "*(.)"'
)

レビューを書きたい場合は、一般的な方法で書いてください。#compdef …最初の行は、ファイルにが含まれていることをzshに伝える魔法のコメントです。初期化ファイルにmy-scriptあるのと同じです。compdef _my-script my-script最初の行にする必要があります。

関連情報