Cách nhận tự động hoàn thành kiểu bash trong zsh, (đối với lệnh git)


4

Tôi chuyển sang zsh và tìm thấy nó tốt hơn bash , nhưng tôi có một vấn đề với oh-my-zsh (sau đây " OMZ ") Tính năng tự động hoàn tất.

Khi tôi gõ git chec, OMZ hoàn thành điều đó để git check; trong bash nó được hoàn thành git checkout. Tôi cũng có một vấn đề với các chi nhánh từ xa: ori hoàn thành oriGorig đến origin, trong bash nó được hoàn thành origin/

Tôi có cùng vấn đề với người khác git các lệnh như checkout.

Tôi nghĩ vấn đề là bí danh được thêm bởi các plugin. Tôi không sử dụng chúng, vì tôi không muốn làm quen với chúng, nhưng chúng phá vỡ tính năng tự động hoàn thành cho tôi.

Có cách nào để có được bash tự động hoàn tất (tôi biết không có tự động hoàn thành trong bash) trong zsh ? Hoặc một cách để hack plugin OMZ để nó không bị hỏng ở mỗi bản cập nhật.


Không có "plugin git" trong vanilla zsh. Vì vậy, bằng "plugin git", bạn đang đề cập đến plugin git cho oh-my-zsh , bạn không Và tôi nghi ngờ bạn có nghĩa là hoàn thành Tab thay vì tự động hoàn thành. Sự khác biệt là cái đầu tiên chỉ hoàn thành sau khi nhấn Chuyển hướng và cái sau sẽ tự động thực hiện bằng cách chỉ cần gõ các lệnh bình thường. Cả hai đều có thể trong zsh, vì vậy tôi phải hỏi.
Adaephon

Có, tôi sử dụng plugin từ oh-my-zsh và tôi đề cập đến việc hoàn thành Tab
Hunsu

Bạn có biết rằng bạn có thể nhấn TAB hai lần để xem các tùy chọn có sẵn? Điều đó thường cho bạn biết tại sao hoàn thành dừng lại ở nơi nó đã làm. Cũng lưu ý rằng theo mặc định, zsh / omz được cấu hình không phân biệt chữ hoa chữ thường.
barbaz

Ngoài bình luận của @barbaz 'ở trên, chỉ cần gõ git che sau đó nhấn <tab> bốn lần để chuyển qua các tùy chọn hoàn thành.
Simon O'Hanlon

Câu trả lời:


4

Hoàn thành và nơi nó đến có thể khá khó hiểu. Lấy một hệ thống Ubuntu 14.04 làm ví dụ:

$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git

Các zsh-common Gói tàu git chức năng hoàn thành. Mặt khác, git gói cũng đi kèm với các tệp hoàn thành cho bash và zsh:

$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk

Có chứa các tệp như

$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

Gói git thậm chí cung cấp một dấu nhắc nhận biết git có thể được kích hoạt, tất cả đều không có các addon ưa thích như oh-my-zsh.

Tóm lại, việc hoàn thành tiểu ban git có thể đến từ trình bao của bạn (zsh):

https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git

từ git

https://github.com/git/git/tree/master/contrib/completion

hoặc từ các plugin như oh-my-zsh.

Để quay lại câu hỏi của bạn: Hành vi cũ của việc hoàn thành git chec mà bạn mô tả là thực sự có lỗi. chec vẫn còn mơ hồ và một kịch bản hoàn thành thích hợp không nên hoàn thành nó checkout, vì có nhiều tiểu ban bắt đầu bằng chec. Nếu bạn muốn hành vi đó, hãy tìm ra tập lệnh hoàn thành nào trong số bạn đã sử dụng trước đó, vô hiệu hóa plugin git oh-my-zsh và tiếp tục sử dụng tập lệnh hoàn thành cũ của bạn.

Ngoài ra, tôi khuyên bạn nên thiết lập bí danh và làm quen với nó. Bạn có thể dùng

git config --global alias.co checkout

để làm cho git co mới của bạn git checkout - plugin oh-my-zsh nhận thức được các bí danh này và vẫn sẽ hoàn thành tên nhánh và thẻ tiếp theo!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.