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 采用 (is) 一个参数,因此 的参数_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在你的初始化文件中。它需要位于第一行。

相关内容