Git-Vervollständigung:
Ich habe Probleme mit der automatischen Vervollständigung der Dateinamen von Git auf meinem System. Ich verwende zsh(5.0.5) mit git(1.9.3) unter OS X (10.9.3). Beide zshund gitwurden über Homebrew installiert. (Die Ausgabe der Vollversion befindet sich am Ende des Beitrags.)
gitBeim Vervollständigen des Dateinamens werden keine Leerzeichen wie erwartet eingefügt. Wenn ich den Namen einer Datei mit einem Leerzeichen im Namen eingebe, fügt die Shell den Dateinamen ein, ohne dass Leerzeichen maskiert werden. zshDie eingebaute Vervollständigung macht das nicht, aber sie gitmacht es.
Hier ist ein Beispiel für das, was ich sehe.
Ich habe ein Repository mit ein paar Dateien mit Leerzeichen im Namen.
% ls -la
test
test four - latest.txt
test three.txt
test two
Der Shell-Backslash verschwindet erwartungsgemäß aus den Dateinamen, wenn ich den Dateinamen mithilfe der Tabulatorvervollständigung einfüge.
% echo "testing" >> test<tab>
wird nach dreimaligem Drücken der Tabulatortaste automatisch vervollständigt.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status zeigt diese Dateinamen in Anführungszeichen (es versteht völlig, was los ist):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
Aber wenn ich versuche, git addmit Tab Autocompletion, geht es seitwärts.
% git add test<tab>
Das führt zu folgendem Ergebnis, nachdem Sie dreimal auf die Registerkarte geklickt haben:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Ich habe diese ein wenig versucht , regredieren: meine dotfiles sind in der Versionskontrolle, so dass ich versucht habe zsh 4.3.15, git 1.8.3und meine dotfiles von vor einem Jahr, als ich fast sicher bin , das funktionieren. Seltsamerweise war dieses Setup immer noch kaputt.
Ich habe es auf die _gitVervollständigungsdatei eingegrenzt, von der bezogen wird /usr/local/share/zsh/site-functions:
% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/local/Cellar/zsh/5.0.5/share/zsh/functions
% ls -l /usr/local/share/zsh/site-functions
_git@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/_git
_hg@ -> ../../../Cellar/mercurial/3.0/share/zsh/site-functions/_hg
_j@ -> ../../../Cellar/autojump/21.7.1/share/zsh/site-functions/_j
git-completion.bash@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/git-completion.bash
go@ -> ../../../Cellar/go/HEAD/share/zsh/site-functions/go
Wenn ich manuell ändere, $FPATHbevor meine .zshrcLäufe ausgeführt werden compinit(oder einfach die /usr/local/share/zsh/site-functions/_gitsymbolische Verknüpfung entferne ), werden die Vervollständigungen wiederhergestellt zshund funktionieren wie erwartet.
Die zshFertigstellung ohne _git:
% git add test<tab>
Dreimaliges Drücken der Tabulatortaste führt zu korrekten Ergebnissen:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Randnotiz: Ich habe versucht, den git-completion.bashLink zu entfernen , und es bringt die Dinge einfach total zum Erliegen:
% git add test<tab>
produziert diese Busted-Ness:
% git add test__git_zsh_bash_func:9: command not found: __git_aliased_command
git add test
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Ich möchte wirklich , dass dies richtig funktioniert: Der Rest der _gitVervollständigungen war großartig, weil sie reposicherer sind als zshdiejenigen, aber ich benötige Dateinamen mit Leerzeichen oder anderen Sonderzeichen, um richtig zu flüchten.
Softwareversionen:
% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)
% git --version
git version 1.9.3
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.3
BuildVersion: 13D65
Ich habe die Dateien _gitund hochgeladen git-completion.bash: git-completion.bash und _git (umbenannt in, _git.shdamit CloudApp sie im Browser anzeigen kann.)
_git. Die Aufrufe, compadd -Qseltsam auszusehen: -Qbedeutet "keine Sonderzeichen zitieren". Versuchen Sie, -Qaus den compaddAnrufen zu entfernen .
zshdas Standardverhalten zurückzuführen ist, bei dem die Ergebnisse der Befehlssubstitution nicht wortspaltend sind. In der Tat - die \bsFlucht ist nicht notwendig - oder vergeblich, je nachdem, wie Sie es betrachten. "SH_WORD_SPLIT" Stellen
${=$(completion)}dass sie wie oder wie auch immer ausgegeben werden, wenn sie zurückkehren.