(这是在带有zsh 5.7.1的MacOS上)
这是我在zsh中加载自定义函数的方式:
# Custom functions
fpath=($HOME/.zfunc $fpath)
autoload -Uz mackupbackup
autoload -Uz tac
autoload -Uz airplane
autoload -Uz wakeMyDesktop
每个函数在~/.zfunc
目录中都是其自己的文件。请注意,由于,此目录被符号链接到另一个目录mackup
。
我编写了一个新函数,将当前提交哈希复制到剪贴板。我在$ fpath中创建了一个名为的文件ghash
,编写了函数,并在$ fpath中添加了新autoload
行.zshrc
并执行了source ~/.zshrc
。
这是功能
# copy the commit hash of the given git reference, or HEAD if none is given
ref=$1
if [[ $ref ]]; then
git rev-parse $1 | pbcopy
else
git rev-parse HEAD | pbcopy
fi
采购后.zshrc
,该功能可用并且可以使用,但是我想添加一行以打印确认该功能可以使用:
echo "Copied $(pbpaste) to clipboard"
因此,我添加了这一行,保存了文件,然后.zshrc
再次获得资源。
我再次运行该函数,但其行为没有改变!
我以为我做错了事,所以我一直对功能进行更改,并且.zshrc
没有任何资源。总而言之,我进行了.zshrc
22次资源调拨,至此,该操作花费了37秒来完成...
然后我意识到也许没有在重载该函数,所以我运行zsh
了一个新实例(耗时约1秒钟),并且该函数按预期开始工作!
有人知道为什么source
要使用我的新功能,但是在功能更改时没有更新吗?
额外的问题:为什么source ~/.zshrc
每次运行它都需要更长的时间?
如果实际可行,很少会采购rc文件,因为人们很少将其写为幂等。一个合适的例子就是您自己的情况,您fpath
每次都在路径前添加相同目录,这当然意味着每次搜索该路径都需要花费更长的时间。此外,毫无疑问,这不是您要做这类事情的唯一地方。
您也无法正确理解自动加载。如doco所述,在没有主体的情况下自动加载功能会在第一次执行该功能时发生。显然,如果该函数已经加载,因此具有主体,则不会再次加载该函数。
您需要再次使用unfunction
该功能autoload
。
.zshrc
Z shell源代码中的示例包含一个freload()
函数,该函数对所有作为其参数命名的函数都执行此操作。它也做typeset -U path cdpath fpath manpath
,注意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句