zsh 自定义完成文件来源不正确

zsh 自定义完成文件来源不正确

我在自定义脚本的 ZSH 完成方面遇到了奇怪的行为,需要一些想法、出了什么问题以及如何解决它。

我编写了一些自定义脚本myscript,并创建了相应的完成脚本_myscript。后者像往常一样以以下几行开头:(#compdef myscript也尝试过#compdef _myscript myscript相同的结果)。一开始,我的~/.local/bin目录中有这两个文件,这是我的$PATH.我还将它添加到我的中,$fpath以便 ZSH 可以找到完成脚本。

到目前为止,一切都很好。命令完成后一切正常myscript。但后来我将这两个文件移动到我的.dot文件通过相应的 git 存储库共享它们。我的点文件包含一个用于完成脚本的文件夹,它也是我的$fpath.但是当移动到我的点文件的这个子目录时,补全停止工作......

我删除了.zcompdump更新完成分配并测试了不同的语法以将目录添加到我的$fpath,但没有任何帮助。我还在compinit删除后手动调用.zcompdump,以确保在执行所有分配后调用它。

rustup第一个奇怪的事情是,dotfile 目录中的其他完成脚本可以被 ZSH 完成系统识别,因为它还包含 my和命令的完成脚本cargo。当我尝试不同的步骤后 grep 时.zcompdump,它总是显示这两个命令的分配,但不显示myscript.

第二个奇怪的行为是,当我将完成脚本移回目录~/.local/bin并重新启动 ZSH 时,它突然识别该脚本并且完成再次开始工作。现在我也可以在我的内部 grep 它.zcompdump

现在我已经不知道可能是什么原因了,特别是因为rustup完成cargo工作在同一目录中正常工作。让我的所有自定义完成都从我的点文件中工作会更舒服,因此我可以在不同的机器上使用它们,而无需太多手动配置。当然,我知道我可以在我的 内部对完成分配进行硬编码zshrc,但这也不像常规那样可移植,fpath这可能是我缺少的一个小方面,但希望有人知道解决方案。

我无法提供太多代码,因为它似乎不是由于我的脚本代码造成的。 JFYI:我正在运行 Manjaro Linux(具有预定义的 ZSH 设置,我已经检查过)。

答案1

好吧,绝对是我的错。

当我用 neovim 编辑zshrc并创建一个保存点文件路径的变量时,neovim 自动补全/在字符串末尾添加了一个额外的斜杠;我不认识什么。使用该变量作为子字符串来添加保存完成脚本的目录,并fpath添加不必要的双斜杠。因此,ZSH 正在搜索错误的目录......

剩下的唯一奇怪的事情是,完成 forrustupcargo仍然使用错误的路径。但这不是问题...

相关内容