我正在尝试遵循Make zsh complete arguments from a file,但要使用命令。没关系。
在/usr/local/share/zsh/site-functions/_foo
中,我有
#compdef foo
aliases=($(a complicated command here printing everything twice))
_describe aliases aliases
单独运行时的命令将显示以下内容:
foo foo bar bar this this that that
这似乎可以创建一个关联数组。当我在echo ${(kv)aliases}
命令之前添加_describe aliases aliases
并运行/usr/local/share/zsh/site-functions/_foo
时,我得到了
foo foo bar bar this this that that
然后我刚做${(k)aliases}
时
foo bar this that
我并不是真正的描述,所以这对我有用。但是,它不适用于zsh。
我添加了
function foo() { echo $* }
autoload _foo
compdef _foo foo
到~/.zshrc
,然后在. ~/.zshrc
之后键入foo [tab]
时得到_foo:2: bad set of key/value pairs for associative array
。我尝试更改命令以仅打印所有内容一次。结果相同。我尝试更改命令以为每个foo打印"foo:x "
。结果相同。那么我的程序应该如何产生这种效果呢?
答案 0 :(得分:1)
aliases
已经作为包含您所有shell别名的关联数组存在。将该变量称为其他名称。
对于普通数组,别名可能有助于将变量声明为局部变量:
local -a compl_aliases
一组错误的键/值对通常表示在进行关联数组分配时,元素数量为奇数。每个键必须有一个偶数和一个值。