我有一台运行 mercurial 1.6.3 的开发机器。bash 中的 Tab 补全功能非常适合补全命令、标签和分支名称。我已经设置了一台装有相同版本的 mercurial 的新机器(都运行 python 2.6),但当我尝试使用 Tab 补全时,只显示 hg 命令和标签 - 没有分支名称。我需要配置什么才能包含分支名称?谢谢。
答案1
我在 OSX El Capitan 和 Ubuntu 16.04 上遇到了同样的问题。
在 Ubuntu 中,我最初手动修补了/usr/share/zsh/functions/Completion/Unix/_hg
。但由于 OSX 上的系统文件受到保护,我设置了哦我的天啊这可能是比修改 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'
}