在zsh中禁用自动补全缓存

4

我有一个脚本,当使用complete参数调用时可以自动完成。以下是将该脚本转移到Zsh的Zsh自动完成脚本:

#compdef das

_das() {
        local -a commands
        self="$(echo $words | cut -d' ' -f1)"
        numargs=$(($CURRENT-2))
        if [ $numargs -ge 1 ]; then
                args=$(echo ${words#$self} | xargs | cut -d' ' -f-$numargs)
        fi
        $self complete $(echo ${args}) | while read line; do
                commands+=("$line")
        done
        _describe -t commands 'commands' commands
        return 0
}

_das

它的工作很好,但在第一次输入命令后,Zsh会记住它显示的最后一个完成,并仅显示该完成,而不再调用$self complete。 如何强制它每次都调用脚本,而不仅仅是第一次?


我也在尝试找出这个问题的答案。Bash 似乎不会进行缓存,而 zsh 则会。这使得在使用 nixos 或 nixpkgs 时,zsh 有点烦人。我一直在寻找控制它的选项,但没有看到任何选项。我还在这里寻找让 bash 像 zsh 一样运行的选项,但没有找到。 - nate
1个回答

0

为了让Zsh每次调用完成脚本,而不仅仅是第一次,您可以在脚本中的_describe命令中添加-r选项。此选项会导致Zsh重置完成系统,以便下一个完成请求再次调用您的脚本。

_describe -r -t commands 'commands' commands

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接