it-swarm.com.de

Wie kann man "git" nach "g" umbenennen, damit die Regeln für die Bash-Vervollständigung erhalten bleiben?

Wenn ich das mache:

alias g='git'

Ich verliere alle Vervollständigungsregeln (d. H. Zweige und Fernbedienungen werden nicht mehr automatisch vervollständigt, wenn ich nach der Eingabe die Tabulatortaste drücke, z. B. g Push o).

25

Fügen Sie die folgenden Zeilen zu Ihrem /etc/bash_completion.d/git hinzu, wenn Sie aus ~/.bashrc kopieren und ändern möchten:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
21
enzotib

Die letzte Bash-Vervollständigung im Upstream wurde verschoben und ein wenig umbenannt. Es schneit:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Verwenden Sie dies in neueren Versionen von Ubuntu (z. B. 14.04, auch Fedora 22+), wenn Sie auf Folgendes stoßen:

completion: function `_git' not found

während des Abschlusses.

18
lzap

In ~/.bashrc:

alias g='git'
source /usr/share/bash-completion/completions/git
complete -o default -o nospace -F _git g

Via http://29a.ch/2013/8/9/fixing-bash-autocomplete-on-ubuntu-13-04

7
hnasarat

Rufen Sie zunächst den ursprünglichen Abschlussbefehl auf. Beispiel:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Fügen Sie nun diese zu Ihrem Startskript hinzu (z. B. ~/.bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

Die _completion_loader -Zeile ist möglicherweise nicht erforderlich. In einigen Situationen wird die Vervollständigungsfunktion jedoch erst dynamisch geladen, nachdem Sie den Befehl eingegeben und das erste Mal TAB gedrückt haben. Wenn Sie also den ursprünglichen Befehl nicht verwendet haben und den Alias ​​+ TAB versuchen, wird möglicherweise die Fehlermeldung "bash: completion: function not found" angezeigt.

2
wisbucky

Die aktualisierte Methode (vollständig würde bei mir nicht funktionieren):

  1. cd - Wechseln Sie in Ihr Home-Verzeichnis
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Füge source ~/git-completion.bash zu deiner .bashrc-Datei hinzu (wenn du diese Datei nicht in deinem Home-Ordner hast, sucht bash automatisch danach)
  4. Fügen Sie Ihrer .bashrc-Datei alias g='git' hinzu.
  5. Starten Sie eine neue Sitzung oder geben Sie Ihre Änderungen mit source ~/.bashrc ein.
1
Elijah Lynn

Der Vollständigkeit halber möchte ich eine Antwort mit der ~/.bash-completion -Datei hinzufügen, die am Ende des Bash-Completion-Skripts abgerufen wird:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete Gd _git_diff
_xfunc git __git_complete gb _git_branch

Dann habe ich in meinem ~/.bashrc nur die Aliase. Ich versuchte zu:

  • vermeiden Sie es, mein ~/.bashrc mit Bash-Completion-Zeug zu belasten (bewahren Sie Zeug dort auf, wo es hingehört) ✓
  • vermeiden Sie es, die gesamte Git-Vervollständigung in meine Shell zu übernehmen

Leider liefert der _xfunc die Git-Vervollständigung trotzdem. Ich werde diese Antwort aktualisieren, sobald ich herausgefunden habe, wie es richtig gemacht wird (ich habe auch auf dem Lunchpad gefragt hier ).

0
kub1x