У меня есть машина для разработки под управлением Mercurial 1.6.3. Завершение табуляции в bash отлично подходит для завершения команд, тегов и имен веток. Я настроил новую машину с той же версией Mercurial (обе работают на Python 2.6), но когда я пытаюсь использовать завершение табуляции, я получаю только команды и теги hg для отображения - без имени ветки. Есть ли что-то, что мне нужно настроить, чтобы включить имена филиалов? Благодарю.
1 ответ
У меня была такая же проблема на OSX El Capitan и Ubuntu 16.04.
В Ubuntu я изначально вручную пропатчил /usr/share/zsh/functions/Completion/Unix/_hg
. Но поскольку системные файлы были защищены в OSX, я установил oh-my-zsh, что, вероятно, является лучшим решением, чем касаться системных файлов zsh. Вы можете внести эти изменения прямо в файл _hg
если не хотите использовать zsh.
После установки oh-my-zsh
я скопировал /usr/share/zsh/functions/Completion/Unix/_hg
в ~/.oh-my-zsh/custom/plugins/hg/_hg
.
Затем изменил файл _hg
заменив функцию _hg_tags()
_hg_tags() {
local expl
typeset -a hglabels
hglabels=( ${(f)"$(_hg_cmd debugnamecomplete -q 2>/dev/null)"} )
_wanted labels expl 'labels' compadd -a - hglabels
}
Чтобы загрузить zsh, измените ~/.zshrc
и добавьте hg
в раздел plugins=(... hg)
.
Вы можете изменить другие функции для использования _hg_tags. Я нашел после того, как использовать его немного _hg_cmd_merge
необходимо обновить , чтобы использовать _hg_tags
_hg_cmd_merge() {
_arguments -s -w : $_hg_global_opts \
'(--force -f)'{-f,--force}'[force a merge with outstanding changes]' \
'(--rev -r 1)'{-r,--rev}'[revision to merge]:revision:_hg_tags' \
'(--preview -P)'{-P,--preview}'[review revisions to merge (no merge is performed)]' \
':revision:_hg_tags'
}