Zweigstellennamen werden in Mercurial nicht vollständig angezeigt

526
sa125

Ich habe eine Entwicklungsmaschine, auf der mercurial 1.6.3 läuft. Die Tab-Vervollständigung in Bash eignet sich hervorragend für das Vervollständigen von Befehlen, Tags und Verzweigungsnamen. Ich habe eine neue Maschine mit der gleichen mercurial-Version eingerichtet (beide laufen mit Python 2.6), aber wenn ich versuche, die Tabulatorvervollständigung zu verwenden, bekomme ich nur die hg-Befehle und -Tags zum Anzeigen - kein Verzweigungsname. Gibt es etwas, das ich konfigurieren muss, damit auch Zweignamen enthalten sind? Vielen Dank.

2

1 Antwort auf die Frage

2
mattyboy

Ich hatte das gleiche Problem mit OSX El Capitan und Ubuntu 16.04.

In Ubuntu habe ich ursprünglich manuell gepatcht /usr/share/zsh/functions/Completion/Unix/_hg. Da Systemdateien jedoch unter OSX geschützt waren, habe ich oh-my-zsh eingerichtet, was wahrscheinlich eine bessere Lösung ist als das Berühren von zsh-Systemdateien. Sie können diese Änderungen direkt an der _hgDatei vornehmen, wenn Sie zsh nicht verwenden möchten.

Nach der Installation von oh-my-zshI kopiert /usr/share/zsh/functions/Completion/Unix/_hgzu ~/.oh-my-zsh/custom/plugins/hg/_hg.

Dann wurde die _hgDatei geändert und die Funktion _hg_tags () durch ersetzt

_hg_tags() { local expl typeset -a hglabels hglabels=( ${(f)"$(_hg_cmd debugnamecomplete -q 2>/dev/null)"} ) _wanted labels expl 'labels' compadd -a - hglabels } 

Damit zsh geladen werden kann, ändern Sie es ~/.zshrcund fügen Sie hges dem plugins=(... hg)Abschnitt hinzu.

Möglicherweise möchten Sie andere Funktionen ändern, um _hg_tags zu verwenden. Ich fand heraus, dass nach der Verwendung etwas _hg_cmd_mergeaktualisiert werden musste _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' }