我有一个包含 zsh 完成脚本的项目,当用户安装软件时我应该将完成文件复制到哪里(例如通过运行make install
,apt install
或pacman -Si
...)?
我知道其他 shell 有一些特定的完成脚本目录,例如:
鱼->/usr/share/fish/vendor_completions.d
巴什->/usr/share/bash-completion/completions
那么 zsh 呢?
桀骜->/usr/share/???
答案1
zsh
用于补全功能的路径是可配置的(参见${fpath[@]}
),但是遵循它是安全的系统的例子:默认情况下将它们安装在share/zsh/site-functions
安装前缀下,但允许覆盖它。安装前缀应该是/usr/local
默认的。
对于打包完成,Fedora及其衍生品使用/usr/share/zsh/site-functions
,Debian及其衍生品使用/usr/share/zsh/vendor-completions
;您不应该关心此处使用的特定目录,但这种情况解释了为什么允许覆盖完成安装目录很有用。
对于非打包完成,两个发行版都支持/usr/local/share/zsh/site-functions
.
答案2
从 zsh 5.0.7 开始,默认函数load path( $fpath
)包含/usr/local/share/zsh/site-functions
。因此,请在那里安装完成功能。
注意/usr/share/fish/vendor_completions.d
和/usr/share/fish/vendor_completions.d
都是错误的。运行时make install
不应添加或修改 、 或其中任何其他部分下的任何内容/usr/bin
(/usr/lib
除非明确/usr/share
指示)。为发行版安装的文件保留。手动安装的东西,例如通过,进入/usr
/usr/local
/usr
make install
/usr/local
。