【发布时间】:2012-09-24 18:30:06
【问题描述】:
我见过很多人这样做autoload -Uz compinit
compinit
和其他人这样做autoload -U compinit
compinit -i
我想知道区别。我应该使用哪一个?
【问题讨论】:
标签: zsh zshrc zsh-completion
我见过很多人这样做autoload -Uz compinit
compinit
和其他人这样做autoload -U compinit
compinit -i
我想知道区别。我应该使用哪一个?
【问题讨论】:
标签: zsh zshrc zsh-completion
autoload,来自man zshbuiltins:
标志
-z和-k标记要在本机或ksh 仿真中自动加载的函数,就好像选项KSH_AUTOLOAD分别未设置或已设置。
-U标志可以追溯:autoload等价于function -u,也就是等价于typeset -f。 typeset,简而言之,用于:
设置或显示外壳参数的属性和值。
当-f与-U结合使用时:
[-f 标志导致] 名称指的是函数而不是参数。 ... -u 和 -U 标志使函数被标记为自动加载; -U 还会在加载函数时抑制别名扩展。
compinit 是 compsys 使用的完成初始化函数,“较新”的 Z-Shell 完成系统。有关详细信息,请参阅man zshcompsys。
-i 标志用于:
要让 compinit 静默忽略所有不安全的文件和目录,请使用选项 -i
一般来说,您应该使用autoload -Uz,根据this interesting read。
【讨论】:
-Uz 的更多来源,但我自己对手册页的解释是-z 标记通过zsh 自动加载(即'native'),这是理想的因为你正在运行 zsh。 -U 防止别名扩展,这在加载函数时(可能)很好,因为您可能有覆盖函数名称的别名,并且加载顺序(别名、函数与函数、别名)可能会破坏。