問題描述
最近為了方便使用自己寫的腳本怕敬,想給腳本添加自動補全機制揣炕。
zsh
中自動補全機制還是很方便的,創(chuàng)建好補全completion
腳本之后放在全局變量$fpath
中的某一個文件夾中即可东跪。
但是嘗試自己修改$fpath
畸陡,將本地的目錄加入其中,并沒有生效虽填。給文件創(chuàng)建鏈接到現(xiàn)有的目錄中就能成功使用丁恭。
系統(tǒng)環(huán)境為MacOS
,使用了Iterms2+zsh+oh-my-zsh
斋日。
問題解決
首先可以還是按照大多數(shù)開源工具的做法牲览,創(chuàng)建一個鏈接到某個$fpath
中,例如:
ln -s "${your file name}" "/usr/local/share/zsh/site-functions"
或者修改$fpath
的時候應(yīng)該放在~/.zshrc
中source $ZSH/oh-my-zsh.sh
這句話前面恶守。
再或者第献,在~/.zshrc
中修改完$fpath
之后添加:
compinit
手動再初始化一下comp
統(tǒng)贡必。
問題原因
zsh中修改了fpath之后,需要執(zhí)行一下compinit才能初始化自動補全系統(tǒng)庸毫,并在~中生成一個名為~/.zcompdump
的文件用以緩存命令和補全函數(shù)之間的對應(yīng)關(guān)系仔拟。
在oh-my-zsh
中已經(jīng)在oh-my-zsh.sh
中調(diào)用過了這個命令,需要再調(diào)用一次這個命令來使修改后的fpath生效岔绸。
而oh-my-zsh.sh
腳本本身也是在~/.zshrc
中調(diào)用的理逊,所以在調(diào)用它之前來設(shè)置變量也可以解決這個問題。