FĂĽhren Sie den Befehl bei Abschluss der Tabulatortaste in zsh aus - Befehlszeile, zsh, Autocomplete, Tabulatortaste

Ich versuche, eine zsh - Funktion einzurichten, die mich mit einem optionalen Argument zum obersten git - Verzeichnis zurĂĽckbringt, um mich relativ zu diesem Verzeichnis zu bewegen.

alias gitdir="git rev-parse --show-toplevel"
cdgit() { cd $(gitdir)/$1 }

Das Problem ist, dass die Tab-Vervollständigung nicht richtig funktioniert. Sie wird automatisch aus dem Verzeichnis vervollständigt, in dem ich mich gerade befinde cdgit, aber ich möchte es zu vervollständigen $(gitdir). Wenn ich vor dem Ausführen die folgende Zeile eingebe cdgitwird die Vervollständigung korrekt funktionieren (von $(gitdir)):

compctl -W $(gitdir) -/ cdgit

Ich möchte diesen Befehl jedoch nicht jedes Mal eingeben, bevor ich ihn eingebe cdgit Nur um die Registerkarte zu vervollständigen. Gibt es eine Möglichkeit, für die ich eine Vervollständigungsfunktion erstellen kann? cdgit das wird irgendwie diesen Befehl ausführen, damit meine Vervollständigung korrekt ist?

Antworten:

2 fĂĽr Antwort â„– 1

Ich würde vorschlagen, eine Vervollständigungsfunktion für Ihre zu schreiben cdgit Funktion.

Legen Sie diese Datei mit dem Namen _cdgit in ein Verzeichnis, das sich in Ihrem befindet $fpath, z.B. /usr/share/zsh/site-functions, dann starte eine neue Shell-Instanz:

#compdef cdgit

local expl
local ret=1

[[ CURRENT -eq 2 ]] && _wanted directories expl "git toplevel directory" 
_path_files -/ -W $(git rev-parse --show-toplevel) && ret=0

return ret

Dies ist aus einer der letzten Zeilen in der entlehnt _cd Abschlussfunktion selbst, die natĂĽrlich viel komplexer ist.

Demo:

/ usr / src / linux-git / Documentation / x86> cd [TAB]
lokales Verzeichnis
i386 / x86_64 /  / usr / src / linux-git / Documentation / x86> cdgit [TAB]
Git Toplevel-Verzeichnis
Dokumentation / crypto / include /lib / scripts / usr / arch / drivers / init / mm / security / virt / block / firmware / ipc / net / sound / certs / fs / kernel / samples / tools /

Lies jetzt