autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
source /path/to/your/bash_completion_script
Tôi đang chạy zsh zsh 5.0.2 (x86_64-apple-darwin13.0) mà không có bất kỳ ~ / .zshrc nào và trình tự trên đã hoạt động trong một trình bao zsh mới tạo.
Cảm ơn git-complete.bash script cho gợi ý: D
Đọc tiếp để biết thêm chi tiết về 3 dòng trên:
Bash có tuyệt vời trong xây dựng hỗ trợ tự động hoàn tất nhưng các kịch bản bash autocomplete không làm việc trực tiếp Zsh như môi trường zsh không có autocomplete bash thiết yếu chức năng helper thích compgen, complete. Nó làm như vậy với nỗ lực giữ cho phiên zsh nhanh.
Ngày nay, zsh được vận chuyển với các tập lệnh hoàn thành thích hợp như compinitvà bashcompinitcó các chức năng cần thiết để hỗ trợ các tập lệnh tự động hoàn thành bash.
autoload <func_name>: Lưu ý rằng autoload được định nghĩa trong zsh chứ không phải bash. autoloadtìm kiếm một tệp có tên trong các đường dẫn thư mục được trả về bởi fpathlệnh và đánh dấu một hàm để tải giống như khi nó được gọi lần đầu tiên.
- -U: Bỏ qua bất kỳ bí danh nào khi tải một hàm như compinit hoặc bashcompinit
- + X: Chỉ cần tải hàm fow được đặt tên ngay bây giờ và không thực thi nó
Ví dụ trên hệ thống của tôi echo $fpathtrả lại /usr/share/zsh/site-functionsvà /usr/share/zsh/5.0.5/functionsvà cả hai compinitvà bashcompinitcó sẵn tại /usr/share/zsh/5.0.5/functions.
Ngoài ra, đối với hầu hết mọi người, chỉ có thể được autoload -U +X bashcompinit && bashcompinityêu cầu vì một số tập lệnh khác như git autocomplete hoặc của riêng họ ~/.zshrccó thể đang làm autoload -U +X compinit && compinit, nhưng sẽ an toàn nếu chỉ chạy cả hai.