2013-01-13 60 views
17

我有一個別名:alias gco='git checkout'選項卡完成在zsh的別名子命令:別名GCO =「git的結帳」

我如何添加標籤完成,如果我輸入了git checkout?我使用compdef g='git'

我一直在嘗試使用compdef,但我沒有取得任何成功。

+0

在zsh的,它只是只要我定義一個別名(沒有'compdef'或任何東西),我就可以工作。你試過了嗎? –

+0

是的,我已經嘗試過了,我只是完成文件。 –

回答

15

你不需要做任何事情,特別是compdef g='git',它應該沒有任何配置工作。只有使用函數代替別名時,才需要某些東西。

+1

我剛剛得到文件完成。我發現oh-my-zsh使用了compdef; https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh –

+3

@ WilliamBettridge-Radford這些人一定做了一些事情來禁用默認行爲或者只是做不必要的工作。只要做'zsh -f autoload -Uz compiniti compinit 別名gco ='git checkout' gco '。在這種情況下,我看到一份參考文獻清單。另一個測試:'別名g ='git' compdef g ='hg' g ':'compdef'簡單地被忽略,我完成git而不是mercurial,並且需要'compdef git ='hg''來覆蓋行爲(很明顯,對於別名和'git')。 – ZyX

+0

工作,謝謝你。我正在使用github的dotfiles分支。我想我會把它們全部關掉,然後慢慢加回來。 https://github.com/holman/dotfiles –

21

禁用此選項,你也不錯......

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

這是爲我做的。爲了清楚起見,你想在這個響應中註釋掉那行,而不是讓你的'config.zsh'看起來像這樣。如果你想完成別名,你應該不要**設置complete_aliases選項。 –

1

對於我來說加入兩個complete_aliasescompdef是必要得到片斷如下工作:

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

compdef docker-compose-dev='docker-compose' 
setopt complete_aliases