Завершение табуляции для подкоманд с псевдонимами в zsh: alias gco='git checkout'

У меня псевдоним: alias gco='git checkout'

Как я могу добавить завершение табуляции, как если бы я набрал git checkout?

Для моего alias g='git' я использую compdef g='git'.

Я пытался использовать compdef, но безуспешно.


person William Bettridge-Radford    schedule 13.01.2013    source источник
comment
В zsh у меня это просто работает, как только я определяю псевдоним (без compdef или чего-то еще). Вы пробовали?   -  person Anton Kovalenko    schedule 13.01.2013
comment
Да, я пробовал это. Я просто получаю завершение файла.   -  person William Bettridge-Radford    schedule 13.01.2013


Ответы (3)


Ничего делать не нужно, особенно compdef g='git', должно работать без всяких настроек. Вам нужно что-то, только если вы использовали функцию вместо псевдонима.

person ZyX    schedule 13.01.2013
comment
Я просто получаю завершение файла. Я заметил, что oh-my-zsh использует compdef; github.com/robbyrussell/oh- мой-zsh/блоб/мастер/плагины/git/ - person William Bettridge-Radford; 13.01.2013
comment
@WilliamBettridge-Radford Эти люди, должно быть, сделали что-то, чтобы отключить поведение по умолчанию или просто выполняли ненужную работу. Просто сделайте zsh -f<CR>autoload -Uz compinit<CR>compinit<CR>alias gco='git checkout'<CR>gco <Tab>. Я вижу список рефов в этом случае. Другой тест: alias g='git'<CR>compdef g='hg'<CR>g <Tab>: compdef просто игнорируется, я получаю завершение для git, а не для mercurial, и мне нужно compdef git='hg', чтобы переопределить поведение (очевидно, как для псевдонима, так и для git). - person ZyX; 13.01.2013
comment
Это сработало, большое спасибо. Я использую вилку dotfiles из github. Я думаю, что я отключу их все, а затем добавлю их обратно медленно. github.com/holman/dotfiles - person William Bettridge-Radford; 14.01.2013
comment
Моя проблема заключалась в том, что я фактически использовал функции. Спасибо! - person Ambrose Little; 30.07.2019

Отключите эту опцию, и вы тоже хороши...

# don't expand aliases _before_ completion has finished
#   like: git comm-[tab]
# setopt complete_aliases
person Matt Ryan    schedule 17.12.2013
comment
Это сделало это для меня. Просто чтобы было ясно, вы хотите закомментировать эту строку в этом ответе, а не делать так, чтобы ваш config.zsh выглядел так. Вы не должны не устанавливать параметр complete_aliases, если хотите иметь завершение для псевдонимов. - person Matt Dodge; 23.06.2016

Для меня необходимо добавить как complete_aliases, так и compdef, чтобы получить работу ниже фрагмента:

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

compdef docker-compose-dev='docker-compose'
setopt complete_aliases
person ypresto    schedule 26.01.2017