autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
source /path/to/your/bash_completion_script
Я использую zsh zsh 5.0.2 (x86_64-apple-darwin13.0)
без ~ / .zshrc и приведенная выше последовательность работала в только что созданной оболочке zsh.
Спасибо скрипту git-Completion.bash за подсказку: D
Читайте подробнее о трех строках выше:
Bash имеет потрясающую встроенную поддержку автозаполнения, но скрипты автозаполнения bash не работают напрямую zsh, поскольку в среде zsh нет основных вспомогательных функций автозаполнения bash, таких как compgen
,complete
. Это делается для того, чтобы сессия zsh оставалась быстрой.
В наши дни zsh поставляется с соответствующими сценариями завершения, такими как compinit
иbashcompinit
которые имеют необходимые функции для поддержки сценариев автозаполнения bash.
autoload <func_name>
: Обратите внимание, что автозагрузка определяется в zsh, а не в bash. autoload
ищет файл с именем в пути к каталогам, возвращаемым fpath
командой, и отмечает функцию для загрузки при первом вызове.
- -U: игнорировать любые псевдонимы при загрузке такой функции, как compinit или bashcompinit
- + X: просто загрузите названную функцию fow и не выполняйте ее
Например , на моей системе echo $fpath
возвратов /usr/share/zsh/site-functions
и /usr/share/zsh/5.0.5/functions
и как compinit
и bashcompinit
доступны в /usr/share/zsh/5.0.5/functions
.
Кроме того, для большинства людей , может быть только autoload -U +X bashcompinit && bashcompinit
требуется потому , что какой -либо другой сценарий , как мерзавца автозаполнения или их собственные ~/.zshrc
может делать autoload -U +X compinit && compinit
, но это безопасно просто запустить их обоих.