2013-01-13 29 views
17

Tôi có một bí danh: alias gco='git checkout'Tab hoàn thành cho các lệnh phụ aliased trong zsh: alias gco = 'git checkout'

Làm thế nào tôi có thể thêm hoàn tab như thể tôi đã gõ git checkout?

Đối với số alias g='git' Tôi sử dụng compdef g='git'.

Tôi đã cố gắng sử dụng compdef nhưng tôi đã không thành công.

+0

Trong zsh, nó chỉ làm việc cho tôi ngay sau khi tôi xác định một bí danh (không có 'compdef' hoặc bất cứ điều gì). Bạn đã thử à? –

+0

Có, tôi đã thử điều đó., Tôi chỉ nhận được tệp hoàn thành. –

Trả lời

15

Bạn không cần phải làm bất cứ điều gì, đặc biệt là compdef g='git', nó sẽ hoạt động mà không có bất kỳ cấu hình nào. Bạn sẽ cần một cái gì đó chỉ khi bạn sử dụng chức năng thay cho một bí danh.

+1

Tôi chỉ nhận được tệp hoàn thành. Tôi đã nhận thấy oh-my-zsh sử dụng compdef; https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh –

+3

@ WilliamBettridge-Radford Những người này phải làm điều gì đó để vô hiệu hóa hành vi mặc định hoặc chỉ thực hiện công việc không cần thiết. Chỉ cần thực hiện 'zsh -f autoload -Uz compinit compinit alias gco = 'git checkout' gco '. Tôi thấy một danh sách các ref trong trường hợp này. Một thử nghiệm khác: 'alias g = 'git' compdef g = 'hg' g ': 'compdef' chỉ đơn giản là bị bỏ qua, tôi nhận được hoàn thành cho git và không mercurial và am' compdef git = 'hg'' để ghi đè hành vi (rõ ràng cho cả hai bí danh và 'git'). – ZyX

+0

Điều đó có hiệu quả, cảm ơn bạn. Tôi đang sử dụng một ngã ba của dotfiles từ github. Tôi nghĩ rằng tôi sẽ tắt tất cả chúng sau đó thêm chúng trở lại từ từ. https://github.com/holman/dotfiles –

21

Tắt tùy chọn này và bạn cũng tốt ...

# don't expand aliases _before_ completion has finished 
# like: git comm-[tab] 
# setopt complete_aliases 
+5

Điều này đã làm cho tôi. Chỉ cần để làm cho nó rõ ràng, bạn muốn bình luận ra rằng dòng trong phản ứng này, không làm cho 'config.zsh' của bạn trông giống như nó. Bạn không nên ** đặt tùy chọn complete_aliases nếu bạn muốn hoàn thành các bí danh. –

1

Đối với tôi thêm cả hai complete_aliasescompdef là cần thiết để có được bên dưới đoạn mã làm việc:

alias docker-compose-dev='docker-compose -f docker-compose.yml -f docker-compose-dev.yml' 

compdef docker-compose-dev='docker-compose' 
setopt complete_aliases 
Các vấn đề liên quan