.png)
Я переключился назши найдите это лучше, чемБаш, но у меня проблема со-мой-зш's (далее "ОМЗ") функция автозаполнения.
Когда я печатаю git chec
, OMZ дополняет это до git check
; вБашон будет завершен до git checkout
. У меня также есть проблема с удаленными ветвями: ori
завершено до oriG
, и orig
до origin
, вБашон будет завершенorigin/
У меня такая же проблема с другимимерзавецтакие команды как checkout
.
Я думаю, что проблема в том,псевдонимыдобавлено плагином. Я ими не пользуюсь, так как не хочу к ним привыкать, но они у меня ломают автодополнение.
Есть ли способ получитьБашавтодополнение (я знаю, что в bash нет встроенного автодополнения) взш? Или способ взломать плагин OMZ, чтобы он не ломался при каждом обновлении.
решение1
Завершение и то, откуда оно берется, может быть довольно запутанным. Возьмем в качестве примера систему Ubuntu 14.04:
$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git
Пакет zsh-common
поставляет функции завершения git. С другой стороны, git
пакет также поставляется с файлами завершения для bash и zsh:
$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk
Который содержит такие файлы, как
$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.
Пакет git даже предоставляет приглашение git aware, которое можно включить, и все это без всяких дополнительных расширений, таких как oh-my-zsh.
Подводя итог, можно сказать, что завершение подкоманды git может осуществляться из вашей оболочки (zsh):
https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git
из гита
https://github.com/git/git/tree/master/contrib/completion
или с помощью плагинов, таких как oh-my-zsh.
Возвращаясь к вашему вопросу: старое поведение завершения git chec
, которое вы описываете, на самом деле глючное. chec
все еще неоднозначно, и правильный скрипт завершения не должен завершать его до checkout
, поскольку есть несколько подкоманд, которые начинаются с chec
. Если вы хотите такое поведение, выясните, какой из множества скриптов завершения вы использовали раньше, отключите плагин git oh-my-zsh и продолжайте использовать старый скрипт завершения.
В качестве альтернативы я бы рекомендовал создать псевдоним и привыкнуть к нему. Вы можете использовать
git config --global alias.co checkout
чтобы создать git co
свой новый git checkout
- плагин oh-my-zsh знает об этих псевдонимах и все равно заполнит имена веток и тегов в дальнейшем!