Ich habeeine benutzerdefinierte Zsh-Funktiong
:
function g() {
# Handle arguments [...]
}
Darin behandle ich kurze Argumente, die Git-Befehle ausführen. Zum Beispiel:
g ls # Executes git ls-files ...
g g # Executes git grep ...
Ich muss in der Lage sein, die Autovervollständigungsregeln auf die Git-Regeln für die kurzen Argumente einzustellen, bin mir aber nicht sicher, wie das geht.
Beispielsweise muss ich g ls <TAB>
die Regeln mit der Tabulatortaste vervollständigen, um git ls-files <TAB>
die Argumente für Folgendes zu erhalten git ls-files
:
$ g ls --<TAB>
--abbrev -- set minimum SHA1 display-length
--cached -- show cached files in output
--deleted -- show deleted files in output
# Etc...
Dies ist nicht einfach eine Einstellung g
für die automatische Vervollständigung, git
da ich meine benutzerdefinierten Kurzbefehle den Git-Befehlen zuordne.
Antwort1
Ich /usr/share/zsh/functions/Completion/Unix/_git
habe einige Tipps für solche Aliase gefunden und schließlich die folgenden Funktionen für die Aliase definiert:
_git-ls () {
# Just return the _git-ls-files autocomplete function
_git-ls-files
}
Dann habe ich einen geraden Weg gemacht compdef g=git
. Das Autovervollständigungssystem erkennt, dass Sie beispielsweise laufen, g ls
und verwendet die _git-ls
Autovervollständigungsfunktion.
Vielen Dank an user67060, der mich in die richtige Richtung gelenkt hat.
Antwort2
Ich musste etwas sehr Ähnliches tun, also sollte dies Ihr Problem in etwa lösen.
_g () {
case "${words[2]}" in
ls) words[1,2]=(git ls-files);;
g) words[1,2]=(git grep);;
*) return 1;;
esac
_git # Delegate to completion
}
compdef _g g
Beachten Sie, dass Sie die $CURRENT
Variable anpassen müssen, wenn Sie die Anzahl der Argumente ändern.
Antwort3
Ich würde Folgendes tun:
_tg () {
local _ret=1
local cur cword prev
cur=${words[CURRENT]}
prev=${words[CURRENT-1]}
cmd=${words[2]}
let cword=CURRENT-1
case "$cmd" in
ls)
emulate ksh -c _git_ls_files
;;
g)
emulate ksh -c _git_grep
;;
esac
let _ret && _default && _ret=0
return _ret
}
compdef _tg tg
Allerdings wird hier die Vervollständigung von Git und nicht die von zsh verwendet:
https://git.kernel.org/cgit/git/git.git/tree/contrib/completion/git-completion.zsh