4

У меня есть git и git-flow установленные через Homebrew. Я на Mac.

У меня zsh 5.0.2 (x86_64-apple-darwin12.4.0)

git завершений работают. git-flow дополнений нет.

Я не могу заставить работать git flow .

Я пробовал два способа установки функций.

Способ 1

Я установил git-flow с помощью Homebrew, который добавил функции в этот каталог /usr/local/share/zsh/site-functions

Этот путь находится в моем $fpath

> echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions

Способ 2

Я загрузил функции завершения git-flow с https://github.com/zsh-users/zsh-completions и поместил файл в ~/.zsh/completions .

Затем я добавил каталог в мой ~/.zshrc

fpath=(~/.zsh/completions $fpath)

> echo $fpath
/Users/jord/.zsh/completions /usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions

Ни один из этих методов не работает.

Что я делаю неправильно?

ОБНОВИТЬ

Вывод git-flow [CTRL+X] [h] :

> git flow
tags in context :completion::complete:git::
    all-files  (_files _default _git (eval))

ОБНОВЛЕНИЕ 2

Работает!

Я поместил функции _git с URL-адреса, предоставленного @mpy в ~/.zsh/completions/ и добавил ~/.zsh/completions в мой $fpath в ~/.zshrc .

fpath=(
  ~/.zsh/completions
  $fpath
)

Затем я скачал git-flow-completion.zsh ~/.zsh/completions с https://github.com/bobthecow/git-flow-completion и поместил его в ~/.zsh/завершений и получил этот файл из моего .zshrc .

git и git flow теперь работают, но я понятия не имею, почему ?!

2 ответа2

2

Файл $fpath/_git-flow обеспечивает завершение для git-flow (с тире), см. Его первую строку:

#compdef git-flow

Итак, используя git-flow [CTRL+X] [h] я получаю

$ git-flow [CTRL+X] [h]
tags in context :completion::complete:git-flow::
    argument-1  (_arguments _git-flow)
tags in context :completion::complete:git-flow:argument-1:
    commands  (_describe _git-flow)

показывая, что zsh обнаруживает, что приглашение теперь является первым аргументом git-flow .

Функция завершения для git очень мощная (и, честно говоря, я не могу «прочитать» ее), поэтому и git flow (без черты) обеспечивает завершение git-flow , но контекст другой:

$ git flow [CTRL+X] [h]
tags in context :completion::complete:git::
    argument-rest  (_arguments _git)
tags in context :completion::complete:git-flow::
    argument-1  (_arguments _git-flow _call_function _git)
tags in context :completion::complete:git-flow:argument-1:
    commands  (_describe _git-flow _call_function _git)

Если используется несуществующий модуль git, я получаю

$ git foo [CTRL+X] [h]
tags in context :completion::complete:git::
    argument-rest  (_arguments _git)
tags in context :completion::complete:git-foo::
    directories    (_files _git) 
    globbed-files  (_files _git) 
    all-files      (_files _git)

который выглядит ближе всего к вашему результату.

Поэтому мои предложения будут:

  • проверьте, что файл _git-flow не поврежден и имеет правильные окончания строк (EOL)
  • запускать завершение для git-flow, например, с помощью git-flow [CTRL+X] [h] и посмотреть, какой вывод which _git-flow:

    • если функция завершения не может быть прочитана, это приводит к

      $ which _git-flow
      _git-flow () {
              # undefined
              builtin autoload -XUz
      }
      
    • если прочитано правильно, вы получите напечатанную функцию:

      $ which _git-flow
      _git-flow () {
          local curcontext="$curcontext" state line
          typeset -A opt_args
          _arguments -C ':command:->command' '*::options:->options'
          ...
      
  • попробуйте скомпилировать файл функции _git-flow с помощью zcompile _git-flow чтобы увидеть, будет ли ошибка. (Затем полученный файл _git-flow.zwc должен быть прочитан после автозагрузки.)

  • проверьте ~/.zcompdump если указано завершение _git-flow .
1

Я думал, что вы можете попробовать это:https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1#r30789420

Вы используете macOS? Автозаполнения идут с Homebrew git, которые конфликтуют со скриптом git-flow autocompletions.

Попробуйте удалить папку zsh в /usr/local/Cellar/git/x.xx.x/share/ и перезагрузить свой zsh.

Рекомендации:
1. https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1
2. https://github.com/bobthecow/git-flow-completion/issues/50
3. https://github.com/robbyrussell/oh-my-zsh/issues/1717

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