如果我在 shell 启动时加载完成函数,但我像疯子一样生成 shell 来在同一个文件夹上工作。
当我有多个以包含.git
文件夹的存储库为目标的完成函数时,如果我们位于存储库中,则加载这些函数。
问题是,当生成新 shell 时所有完成功能都会启动,它绘制 shell 提示的速度相当慢。
那么如何手动触发加载/source
完成函数呢?即使我知道我已经在.git
仓库中,我仍然想在使用它之前手动加载完成功能,缓慢的 shell 生成的成本高于完成本身。
答案1
不要在启动时加载完成函数,而是将它们声明为自动加载。这样每个函数都会在第一次使用时加载。
执行此操作的正常方法是将每个函数的代码放入$fpath
.使用您想要为该函数指定的名称来调用该文件。在文件的第一行添加#compdef
标签。
所以如果你曾经有这个在你的.zshrc
:
autoload -Uz compinit
compinit -u
_foo () {
code goes here
}
compdef _foo foo
然后,只需将其放入您的.zshrc
:
fpath=(~/.zsh/functions $fpath)
autoload -Uz compinit
compinit -u
并创建~/.zsh/functions/_foo
包含
#compdef foo
code goes here