Ich verwende go
als einfachen Bash-Alias für git checkout branchname
. Was ich vermisse, ist die Autocomplete-Funktion, die mit dem vollständigen git checkout branchna...
Befehl funktioniert , aber nicht im Alias.
Gibt es eine Möglichkeit, Bash anzuweisen, den Autovervollständigungstreiber für einen anderen Befehl zu "erben"?
git-dir
verwenden Sie diesen .Antworten:
Wenn Sie die vom ursprünglichen Befehl verwendete Abschlussfunktion herausfinden können, können Sie sie mit dem Alias zuweisen
complete -F
.Auf meiner Ubuntu-Box
git checkout
lautet die von beispielsweise verwendete Vervollständigungsfunktion_git_checkout
(gefunden in/etc/bash_complete.d/git
).Beispiel
Vor dem Laufen
complete -F
:[me@home]$ git checkout <TAB><TAB> HEAD master origin/HEAD origin/master [me@home]$ alias go="git checkout" [me@home]$$ go <TAB><TAB> .git/ precommit_config.py README.md SvnSentinel/ .gitignore precommit.py startcommit.py tests/
Nach:
quelle
complete -F
es bei Ihnen nicht funktioniert, lesen Sie die Antwort__git_complete
unter stackoverflow.com/a/24665529/3779Nach der Verwendung
complete -F
:Das Tabulieren nach
go
kann dazu führen, dass:complete
Verwenden Sie stattdessen__git_complete
Dies ist die integrierte Funktion von Git Bash Completion für diesen Zweck.
Binden Sie nach dem Deklarieren Ihres Alias die richtige Funktion zur automatischen Vervollständigung daran:
alias g="git" __git_complete g _git alias go="git checkout" __git_complete go _git_checkout alias gp="git push" __git_complete gp _git_push
quelle
__git_complete
Funktion in meinem Bash-Completion-Paket (installiert über Homebrew mitbrew install bash-completion
) hatte, das derzeit nicht in meinem Bash-Profil enthalten ist. Musste diese Zeile zu ~ / .bash_profile hinzufügen:[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
git checkout
Alias hat wie ein Zauber funktioniert !!!__git_main
nicht sein_git
. Der Grund_git
dafür ist nur die Abwärtskompatibilität, sie ist im Grunde genommen__git_main
verpackt.In Ubuntu 16.04.3 LTS war die Datei, die ich beschaffen musste
/usr/share/bash-completion/completions/git
. Also in.bash_custom
(oder .bashrc, was auch immer):quelle
.bashrc
Lesens zu spät ist .Unter Ubuntu 18.04 (Bionic) funktioniert Folgendes. Fügen Sie so etwas wie dieser Schnipsel (mit Aliasnamen) , um Ihr bevorzugten bash - Konfigurationsdatei zum Beispiel
.bashrc
,.bash_aliases
.bash_profile
.# define aliases alias gc='git checkout' alias gp='git pull' # setup autocompletion if [ -f "/usr/share/bash-completion/completions/git" ]; then source /usr/share/bash-completion/completions/git __git_complete gc _git_checkout __git_complete gp _git_pull else echo "Error loading git completions" fi
Im Allgemeinen
__git_complete
lautet das Format der Richtlinie wie folgt:Dies kombiniert die Weisheit der vorhandenen Antworten in einer einzigen aktuellen Antwort. Vielen Dank an alle.
quelle
echo "profile"
/ hinzufügteecho "rc"
, fand ich das heraus.Um weitere hervorragende Antworten hinzuzufügen: Normalerweise haben Sie viele Git-Aliase, und es kann mühsam sein, Abschlüsse für alle manuell weiterzuleiten. Hier ist ein kleiner Trick, um dies automatisch zu tun:
if [ -f "/usr/share/bash-completion/completions/git" ]; then # Enable Git completions for aliases . /usr/share/bash-completion/completions/git for a in $(alias | sed -n 's/^alias \(g[^=]*\)=.git .*/\1/p'); do c=$(alias $a | sed 's/^[^=]*=.git \([a-z0-9\-]\+\).*/\1/' | tr '-' '_') if set | grep -q "^_git_$c *()"; then eval "__git_complete $a _git_$c" fi done fi
quelle
Unter Linux Mint hat das bei mir nicht funktioniert. Ich wurde
bash: [: 1: unary operator expected
.Ich fand, dass die folgende Antwort ziemlich gut funktioniert hat - mit dem Abschnitt zur Fehlerbehebung, den der Benutzer bereitgestellt hat, um sehr hilfreich zu sein. /superuser/436314/how-can-i-get-bash-to-perform-tab-completion-for-my-aliases
quelle
Für
macOS
die folgenden Elemente installieren bash Abschluss, laufenFügen Sie dann Folgendes hinzu
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
zu Ihrem .bashrc oder .bash_profile
quelle
Unter Ubuntu 20.04 füge ich dies hinzu
~/.bashrc
source /usr/share/bash-completion/completions/git alias g='git' __git_complete g _git alias go='git checkout' __git_complete go _git_checkout
quelle
Wie jemand anderes geantwortet hat, sollten Sie verwenden
__git_complete
, sonst schlägt das Skript fehl.alias g="git" __git_complete g __git_main alias g="gl" __git_complete gl _git_log
Aber Sie sollten nicht
_git
für den Hauptbefehl verwenden, es ist__git_main
.Leider sind viele Informationen über die Fertigstellung verborgen, aber mehr finden Sie in der README-Datei meiner Gabel: Git-Vervollständigung .
quelle
Mir ist klar, dass Sie speziell nach Bash-Aliasen fragen, aber für diejenigen, die hierher kommen und nach Autocomplete in Bash für komplexe Git-Aliase suchen , siehe hier .
Speziell:
# If you use complex aliases of form '!f() { ... }; f', you can use the null # command ':' as the first command in the function body to declare the desired # completion style. For example '!f() { : git commit ; ... }; f' will # tell the completion to use commit completion. This also works with aliases # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
quelle