Mercurial 的 Tab 补全功能未显示分支名称

Mercurial 的 Tab 补全功能未显示分支名称

我有一台运行 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'
}

相关内容