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中调用的,所以在调用它之前来设置变量也可以解决这个问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容