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, но это безопасно просто запустить их обоих.