我的 $ZSH 设置为 /home/goldy/.oh-my-zsh
我有这个文件
# $ZSH/functions/run_after_save
function run_after_save {
# my logic here
}
并且我的 fpath 确实包含了函数文件夹:
$ echo $fpath
# many lines omitted for brevity ...
/home/goldy/.oh-my-zsh/functions
但是当我尝试run_after_save
从脚本调用或直接在终端中输入时,我得到:
$ run_after_save
zsh: command not found: run_after_save
有什么线索吗?
这是我尝试放在$ZSH/functions
文件夹下的第一个函数
答案1
与命令和不同$path
,函数仅在你的 中是不够的$fpath
。在调用函数之前,你需要先autoload
执行以下代码:
autoload -Uk run_after_save
-U
防止在解析函数时出现别名扩展。-k
打开KSH_AUTOLOAD
,这似乎是您的函数所需要的。有关更多信息,请参阅https://zsh.sourceforge.io/Doc/Release/Options.html#index-KSHAUTOLOAD。如果您的功能需要KSH_AUTOLOAD
关闭,则使用-z
。
或者你也可以autoload
全部目录中的函数functions
,例如,在您的.zshrc
文件内部:
setopt EXTENDED_GLOB # Enables ~ operator.
autoload -Uk $ZSH/functions/*~*.zwc # Exclude compiled zsh byte code.
请注意,要使此方法有效,同一目录中的所有函数都应写入期望KSH_AUTOLOAD
设置。如果您同时拥有ksh
-style 和zsh
-style 函数,则将它们放在两个单独的目录中更简单,因此您可以使用autoload
前者-k
,使用后者-z
。(或者更好的是,将您的函数编写为没有 KSH_AUTOLOAD
,因此您可以随时使用-z
。)