如果我在 shell 启动时加载完成函数,但我像疯子一样生成 shell 来处理同一个文件夹。
当我有多个以包含.git
文件夹的存储库为目标的完成函数时就是这种情况,如果我们在 repo 中,则加载这些函数。
问题是所有完成函数在生成新 shell 时都启动,它绘制 shell 提示很慢。
那么如何手动触发加载/source
完成功能呢?即使我知道我已经在.git
repo 中,我仍然希望在使用它之前手动加载完成功能,缓慢的 shell spawn 成本高于完成本身。
不要在启动时加载完成函数,而是将它们声明为自动加载。这样,每个函数将在第一次使用时加载。
执行此操作的正常方法是将每个函数的代码放入$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)