我的脚本采用可选参数(-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
在你的初始化文件中。它需要位于第一行。