【问题标题】:zsh-completions error when loading `zsh: compinit: function definition file not found`加载`zsh:compinit:找不到函数定义文件`时出现zsh-completions错误
【发布时间】:2022-01-22 18:41:04
【问题描述】:

在尝试从 oh-my-zsh 移回更轻的 zsh 配置后,我安装了 zsh-completions 插件,当通过自制软件安装时,该插件需要以下内容:

if type brew &>/dev/null; then
    fpath=${HOMEBREW_PREFIX}/share/zsh-completions:$fpath

    autoload -Uz compinit
    compinit
fi

问题是它无法正常工作,因为它找不到compinit,我得到了下一个错误:

zsh: compinit: function definition file not found

【问题讨论】:

  • 第一行检查是否安装了brew。如果删除 if 语句并重新启动终端仿真器(或简单地获取 .zshrc-file)会发生什么?如果这行得通,那么你就知道它与那个 if 语句有关。如果它仍然不起作用,那么您可以写 brew config | grep HOMEBREW_PREFIX 以查看 HOMEBREW_PREFIX 指向的内容(并将其添加到问题中)。并且还请在您的.zshrc 文件中添加涉及$fpath 的其他行。也许还可以尝试回显整行(echo $fpath) - 并将其添加到问题中。
  • 肯定和fpath有关系,基本上fpath=${HOMEBREW_PREFIX}/share/zsh-completions:$fpath是错的。

标签: shell autocomplete homebrew zsh


【解决方案1】:

在看到使用echo $fpath 设置的值后,我意识到自制警告建议的代码有误,并且它没有包含 compinit 函数所在的文件夹。

修复很容易,替换:

fpath=${HOMEBREW_PREFIX}/share/zsh-completions:$fpath

export fpath=(${HOMEBREW_PREFIX}/share/zsh-completions $fpath)

解决了问题。

【讨论】:

  • 导出是不必要的,既是因为zsh本身(而不是子进程)需要fpath,又因为在任何情况下都无法导出数组。
  • 如果您想要使用以冒号分隔的目录列表,正确的变量是FPATH。 (FPATH 是“真实”变量;fpath 是一个与FPATH“绑定”的数组。对一个的更改会反映在另一个上,因此它们只是为相同的配置提供两个不同的接口。)跨度>
  • 你说得对,将删除答案。随意添加答案并接受它
  • 答案不需要删除。没有export 命令,fpath=(...) 完全正确。 fpathFPATH 之间的关系更像是一个仅供参考的评论。
猜你喜欢
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多