Branch names not showing in Mercurial's tab completion
У меня есть машина для разработки под управлением 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'
}