![dnf 安装完成不能与 zsh 一起使用,但可以与 bash 一起使用](https://linux22.com/image/113143/dnf%20%E5%AE%89%E8%A3%85%E5%AE%8C%E6%88%90%E4%B8%8D%E8%83%BD%E4%B8%8E%20zsh%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%8C%E4%BD%86%E5%8F%AF%E4%BB%A5%E4%B8%8E%20bash%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8.png)
在 bash 中,如果我输入dnf install java<tab>
,我会得到一堆要安装的软件包的建议。但是,如果我在 zsh 中执行此操作,则不会发生任何情况。我玩过 /etc/bashrc 并发现 bash_completion 允许它在 bash 中工作,但我不知道如何在 zsh 中使其工作。
答案1
ZSH 的交付完成时间为$fpath
;这些随着时间的推移而变化,特别是对于新的和令人兴奋的程序,旧的和破旧的 ZSH 安装可能一无所知。通常的步骤应该是:
- 将您的 ZSH 更新到最新版本并查看现在是否存在完成脚本 -
print $fpath[-1]/_dnf
尽管对于某些命令,完成可能存在于某个compdef
行下的其他文件中。 - 检查软件是否附带了未贡献给例如
zsh-workers
邮件列表的 ZSH 完成脚本(很少见,但如果是这样,也许可以将该完成代码提交给 ZSH 人员,以便他们可以包含它。 - 检查其他 ZSH 完成存储库是否包含完成代码,例如https://github.com/zsh-users/zsh-completions/
- 为程序编写您自己的完成脚本。这通常需要研究现有的完成脚本、
zshall(1)
例如等的文档_arguments
,以及通常的摆弄和测试。
一个方便的文件整合命令$fpath
是
% print -l ${^fpath}/_pgrep(N)
/Users/jdoe/.zsh/functions/darwin/_pgrep
/opt/local/share/zsh/5.3.1/functions/_pgrep
%
这表明在我的 Mac 上,pgrep
除了上游之外,我还有一个自定义完成。