Zsh:手动加载完成功能

Tuy*_*ham 2 zsh autocomplete

如果我在 shell 启动时加载完成函数,但我像疯子一样生成 shell 来处理同一个文件夹。

当我有多个以包含.git文件夹的存储库为目标的完成函数时就是这种情况,如果我们在 repo 中,则加载这些函数。

问题是所有完成函数在生成新 shell 时都启动,它绘制 shell 提示很慢。

那么如何手动触发加载/source完成功能呢?即使我知道我已经在.gitrepo 中,我仍然希望在使用它之前手动加载完成功能,缓慢的 shell spawn 成本高于完成本身。

Gil*_*il' 5

不要在启动时加载完成函数,而是将它们声明为自动加载。这样,每个函数将在第一次使用时加载。

执行此操作的正常方法是将每个函数的代码放入$fpath. 使用您要赋予该函数的名称调用该文件。在文件的第一行,添加一个#compdef标签

因此,如果您曾经在您的.zshrc:

autoload -Uz compinit
compinit -u
_foo () {
  code goes here
}
compdef _foo foo
Run Code Online (Sandbox Code Playgroud)

然后,相反,只把它放在你的.zshrc

fpath=(~/.zsh/functions $fpath)
autoload -Uz compinit
compinit -u
Run Code Online (Sandbox Code Playgroud)

并创建~/.zsh/functions/_foo包含

#compdef foo
code goes here
Run Code Online (Sandbox Code Playgroud)