Как включить завершение вкладки файла git с помощью zsh compinit?

У меня проблема с завершением вкладки zsh: После запуска:

autoload -U compinit
compinit

Завершение вкладки Git для файлов больше не работает. Например, если я наберу git add my_f для завершения my_file, ничего не произойдет. Завершение zsh git, похоже, работает только для веток и тегов git.

Без материала compinit завершение файла git работает, но, конечно, я упускаю все причудливые вещи завершения веток.

Итак ... Есть ли способ сделать возможным одновременное завершение файла git И завершение ветки git в zsh? Это действительно мне очень поможет.


person Ralph von der Heyden    schedule 29.10.2009    source источник
comment
У меня тоже работает завершение файлов после _1_ (_2_ 4.3.10-dev-1). Удивительно то, что он предлагает только неотслеживаемые и отслеживаемые, но измененные файлы при завершении _3_ (это нормально, поскольку это единственное, что вам нужно будет добавить). Для _4_ он предлагает все отслеживаемые файлы и все ветки.   -  person bobDevil    schedule 30.10.2009
comment
@Chris Johnsen: Вы правы, он действительно работает с файлами, которые соответствуют текущей команде git, например, с неотслеживаемыми файлами в случае git add. Я пробовал доработку, не обращая на это внимания. Так что большое вам спасибо!   -  person Chris Johnsen    schedule 31.10.2009
comment
Несмотря на то, что в последнее время была проделана некоторая работа по обеспечению использования _1_ из git.git через _2_ в zsh, типичная установка zsh с большей вероятностью будет использовать git завершение с помощью zsh: Completion / Unix / Command / _git.   -  person Ralph von der Heyden    schedule 02.11.2009


Ответы (2)


(Я добавляю сюда ответ в основном для того, чтобы убрать его из списка неотвеченных.)

Как видно из комментариев, это действительно работает. Я считаю, что в последнее время ситуация с zsh также значительно улучшилась:

совершить 06f44c3cc5ca5eca638f300a518c65aa98d26d6d

Дата: 6 сен 08:33:19 2010 -0400

завершение: сделать совместимым с zsh

Измените git-completed.bash так, чтобы он также работал с zsh при использовании bashcompinit. ...

Итак, если вы столкнулись с этим поиском в Google, и ваше завершение не работает, попробуйте обновить свой git-completion.bash (ссылка указывает на большой двоичный объект из git.git HEAD). Текущая версия git - 1.7.3.2; он должен попасть в следующий.

person Cascabel    schedule 04.11.2010
comment
Я не знаю, когда это изменилось, но я только что проверил, и мое завершение очень хорошо работает для Git под Zsh. (Я так привык к его неудачам, что не думаю, что пробовал использовать его годами.) Я использую Git 1.8.3.4, чего бы он ни стоил. - person Chris Johnsen; 05.11.2010

Обратите внимание, что в Git 2.30 (первый квартал 2021 г.) инструкции по завершению командной строки (в contrib /) для zsh были обновлены.

См. фиксацию 3ebd945 (2 июля 2020 г.) по Алексей (ogonkov).
(Объединено Junio ​​C Hamano - gitster - в фиксации bbdbe08 >, 02 ноя 2020)

completion: bash: удалить оболочку zsh

Подписано: Алексей
Проверено: Стефан Халлер

  • Добавьте compinit команду автозагрузки, так как все это не работает, если она не загружена.
  • В моем .zshrc у меня есть «autoload -U compinit», затем «compinit» в отдельной строке, и у меня все работает нормально. Вы запускаете одну команду или меня смущает форматирование?

Итак, команда будет такой:

# The recommended way to install this script is to make a copy of it in
# ~/.zsh/ directory as ~/.zsh/git-completion.zsh and then add the following
# to your ~/.zshrc file:
#
#  fpath=(~/.zsh $fpath)
#  autoload -Uz compinit && compinit

Предупреждение: в Git 2.30 (Q1 2021) автозаполнение Zsh (в contrib/) было исправлено, как упоминалось здесь его автор Фелипе Контрерас.

Подписано: Фелипе Контрерас

completion: bash: исправить регрессию псевдонима gitk

Он устарел уже более восьми лет, никогда не обновляется, и его сложно поддерживать.

Время двигаться дальше.

В Git 2.30 (первый квартал 2021 г.) есть исправление для недавней поломки.


См. фиксацию 0764964 (5 декабря 2020 г.) и совершить c5dd0c8 (30 ноября 2020 г.) от Фелипе Контрерас (felipec).
(Объединено Junio ​​C Hamano - - gitster - в совершить 7d92da3, 8 декабря 2020 г.)
Копия: SZEDER Gábor Подписано: Фелипе Контрерас Подписано: Junio ​​C Hamano

Давным-давно, когда был представлен помощник _git_complete, _gitk был заменен на __gitk_main, а заполнитель для обратной совместимости, указывающий на __git_wrap_main_gitk, был оставлен на месте.

Исправьте неправильный сценарий в конфигурации завершения. zsh хочет, чтобы здесь был путь завершения bash, а не путь к самому себе.

Когда был вызван __git_complete gitk __gitk_main, был создан помощник __git_wrap__gitk_main, который в основном состоит из __git_func_wrap __gitk_main плюс complete параметров.

К сожалению, совершает b0a4b2d257 (completion: добавлена ​​поддержка обратной совместимости, 2012-05-19 , Git v1.7.11-rc0 - merge) пропущен предыдущий экземпляр вызова до _gitk в _git_gitk

Итак, в основном у нас было __git_wrap__git_main -> __git_func_wrap __git_main -> __git_complete_command gitk - ›_git_gitk -› _gitk - ›__git_wrap__gitk_main -> __git_func_wrap __gitk_main -> __gitk_main.

Никогда не было необходимости звонить __git_func_wrap дважды. Поскольку _git_gitk всегда вызывается внутри оболочки, он может вызывать __gitk_main напрямую.

Затем в зафиксируйте 441ecdab37 (completion: bash: удалить старые оболочки совместимости, 2020- 10–27, Git v2.30.0 - слияние, указанное в пакет № 4) _gitk был удален, что вызывает следующую ошибку:

Вызовем правильную функцию: __gitk_main.

_git_gitk:9: command not found: _gitk  

completion: исправьте инструкции по установке zsh

person VonC    schedule 09.11.2020