问题描述
最近为了方便使用自己写的脚本,想给脚本添加自动补全机制。
zsh
中自动补全机制还是很方便的,创建好补全completion
脚本之后放在全局变量$fpath
中的某一个文件夹中即可。
但是尝试自己修改$fpath
,将本地的目录加入其中,并没有生效。给文件创建链接到现有的目录中就能成功使用。
系统环境为MacOS
,使用了Iterms2+zsh+oh-my-zsh
。
问题解决
首先可以还是按照大多数开源工具的做法,创建一个链接到某个$fpath
中,例如:
ln -s "${your file name}" "/usr/local/share/zsh/site-functions"
或者修改$fpath
的时候应该放在~/.zshrc
中source $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
中调用的,所以在调用它之前来设置变量也可以解决这个问题。