zsh中修改fpath后不生效

问题描述

最近为了方便使用自己写的脚本,想给脚本添加自动补全机制。
zsh中自动补全机制还是很方便的,创建好补全completion脚本之后放在全局变量$fpath中的某一个文件夹中即可。
但是尝试自己修改$fpath,将本地的目录加入其中,并没有生效。给文件创建链接到现有的目录中就能成功使用。
系统环境为MacOS,使用了Iterms2+zsh+oh-my-zsh

问题解决

首先可以还是按照大多数开源工具的做法,创建一个链接到某个$fpath中,例如:

ln -s "${your file name}" "/usr/local/share/zsh/site-functions"

或者修改$fpath的时候应该放在~/.zshrcsource $ZSH/oh-my-zsh.sh这句话前面。

再或者,在~/.zshrc中修改完$fpath之后添加:

compinit

手动再初始化一下comp统。

问题原因

zsh中修改了fpath之后,需要执行一下compinit才能初始化自动补全系统,并在~中生成一个名为~/.zcompdump的文件用以缓存命令和补全函数之间的对应关系。

oh-my-zsh中已经在oh-my-zsh.sh中调用过了这个命令,需要再调用一次这个命令来使修改后的fpath生效。

oh-my-zsh.sh脚本本身也是在~/.zshrc中调用的,所以在调用它之前来设置变量也可以解决这个问题。

你可能感兴趣的:(zsh中修改fpath后不生效)