3

Есть кое-что, чего я не понимаю в Git и его завершении в Zsh.

Я использую Windows-машину с Git (v2.11. Для Windows) и Cygwin с Zsh (с Babun). Когда я git checkout и дважды нажимаю TAB , я получаю сообщение о завершении для ветвей и имен объектов:

Довольно аккуратно! Теперь на моей машине с OS X с Git (2.13.0 для Mac, установленной через Homebrew) и Zsh, когда я набираю git checkout и дважды нажимаю TAB , я получаю только это:

Откуда берется функциональность в первом приглашении? Другими словами, что мне нужно установить в OS X / Zsh, чтобы это произошло?

Некоторые вещи, которые я пробовал:

  • Я уже исключил, что это делает git плагин Oh-my-Zsh, потому что когда я отключаю это в Windows/Cygwin, я все равно получаю такое же модное завершение.
  • Все, что мне нужно сделать в Windows, начиная с пустого .zshrc чтобы это завершение работало, это запустить autoload -U compinit && compinit
  • Я попытался добавить fpath=(/usr/local/share/zsh/site-functions/ $fpath) к моему .zshrc в надежде, что он поймет, что установлен Homebrew (как упомянуто в выводе brew info git ), но это ничего не изменило.
  • Я попытался установить zsh-completions из Homebrew, добавив fpath=(/usr/local/share/zsh-completions $fpath) в мой .zshrc как было предложено. Все еще без изменений.
  • Что меня смущает еще больше, так это то, что недавно я использовал MacBook от коллеги, который мало что знал о Git. У него был только установлен Git. Он получил такое же расширенное завершение, ничего не настроив.
  • Мой .zcompdump , если это поможет: https://pastebin.com/raw/UzrZ2NqD
  • Мой .zshrc: https://github.com/slhck/dotfiles/blob/master/.zshrc

Еще несколько отладочных выводов из OS X, когда я git , затем Ctrl-X , затем h:

tags in context :completion::complete:git::
    argument-1 options  (_arguments __git_zsh_main _git)
    use-compctl         (_default _git)
    globbed-files       (_files _default _git)
tags in context :completion::complete:git:argument-1:
    alias-commands common-commands all-commands  (__git_zsh_main _git)
    alias-commands                               (__git_zsh_cmd_alias __git_zsh_main _git)
    common-commands                              (__git_zsh_cmd_common __git_zsh_main _git)
    all-commands                                 (__git_zsh_cmd_all __git_zsh_main _git)

Тогда как когда я делаю то же самое на Windows/Cygwin, я получаю:

tags in context :completion::complete:git::
    argument-1 options  (_arguments _git)
tags in context :completion::complete:git:argument-1:
    aliases main-porcelain-commands user-commands third-party-commands ancillary-manipulator-commands ancillary-interrogator-commands interaction-commands plumbing-manipulator-commands plumbing-interrogator-commands plumbing-sync-commands plumbing-sync-helper-commands plumbing-internal-helper-commands  (_git_commands _git)

Вывод ls -l ${^fpath}/_git

ls: /Users/werner/.oh-my-zsh/completions/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/functions/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/brew/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/docker-compose/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/docker/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/gem/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/git-extras/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/git-flow/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/git/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/github/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/osx/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/python/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/rails/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/ruby/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/svn/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/vagrant/_git: No such file or directory
ls: /Users/werner/.oh-my-zsh/plugins/virtualenv/_git: No such file or directory
ls: /usr/local/share/zsh-completions/_git: No such file or directory
-rw-r--r--  1 werner  admin  336270 Dec 21 19:42 /usr/local/Cellar/zsh/5.3.1/share/zsh/functions/_git
lrwxr-xr-x  1 werner  admin      56 May 18 17:26 /usr/local/share/zsh/site-functions/_git -> ../../../Cellar/git/2.13.0/share/zsh/site-functions/_git
lrwxr-xr-x  1 werner  admin      56 May 18 17:26 /usr/local/share/zsh/site-functions/_git -> ../../../Cellar/git/2.13.0/share/zsh/site-functions/_git
lrwxr-xr-x  1 werner  admin      56 May 18 17:26 /usr/local/share/zsh/site-functions/_git -> ../../../Cellar/git/2.13.0/share/zsh/site-functions/_git

1 ответ1

0

Не уверен, что именно не так, но вот что я сделал, чтобы решить эту проблему:

Сначала обязательно откройте терминал и запустите Bash (/bin/bash), затем:

brew uninstall zsh
rm -rf /usr/local/share/zsh/site-functions
brew install zsh

Очевидно, однако, переустановка Git вызовет ту же проблему снова:

brew reinstall git

Как только я это сделаю, завершение вернется к сокращенной форме. Если это так, вы можете удалить установленные Git дополнения Homebrew:

rm /usr/local/share/zsh/site-functions/git-completion.bash
rm -rf /usr/local/share/zsh/site-functions/_git

Это заставит расширенные завершения появиться снова.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .