Achèvement de Git:
Je rencontre des difficultés avec la saisie semi-automatique de git sur mon système. J'utilise zsh(5.0.5) avec git(1.9.3) sur OS X (10.9.3). Les deux zshet gitont été installés via homebrew. (La sortie de la version complète se trouve au bas de l'article.)
gitL'achèvement du nom de fichier n'insère pas d'espaces comme je m'y attendais. Lorsque je tape le nom d'un fichier avec un espace dans le nom, le shell insère le nom de fichier sans espaces échappés. zshL'achèvement intégré ne fait pas cela, mais c'est gitle cas.
Voici un exemple de ce que je vois.
J'ai un référentiel avec quelques fichiers avec des espaces dans leurs noms.
% ls -la
test
test four - latest.txt
test three.txt
test two
La barre oblique inverse du shell échappe aux noms de fichiers comme prévu lorsque j'utilise la complétion de tabulation pour insérer le nom de fichier.
% echo "testing" >> test<tab>
se termine automatiquement après avoir appuyé trois fois sur l'onglet.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status affiche ces noms de fichiers entre guillemets (il comprend parfaitement ce qui se passe):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
mais quand j'essaye git addavec la saisie semi-automatique de tabulation, elle va latéralement.
% git add test<tab>
entraîne ceci après avoir appuyé trois fois sur l'onglet:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
J'ai essayé un peu ce régresser: mes dotfiles sont dans le contrôle de version, donc je l' ai essayé zsh 4.3.15, git 1.8.3et mes dotfiles d'il y a un an, quand je suis presque certain cela a fonctionné. Bizarrement, cette configuration était encore cassée.
Je l' ai réduit au _gitfichier d'achèvement provenant de /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
Si je change manuellement $FPATHavant mes .zshrccourses compinit(ou que je supprime simplement le /usr/local/share/zsh/site-functions/_gitlien symbolique), les achèvements se replient zshet fonctionnent comme prévu.
L' zshachèvement sans _git:
% git add test<tab>
appuyer trois fois sur l'onglet produit des résultats corrects:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Note latérale: J'ai essayé de supprimer le git-completion.bashlien, et cela casse totalement les choses:
% git add test<tab>
produit cette 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
Je veux vraiment que cela fonctionne correctement: le reste des _gitfinitions était génial car elles sont plus sensibles aux repo que zshcelles, mais j'ai besoin de noms de fichiers avec des espaces ou d'autres caractères spéciaux pour être correctement échappés.
Versions du logiciel:
% 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
J'ai téléchargé les fichiers _gitet git-completion.bash: git-complétement.bash et _git (renommés pour _git.shque CloudApp le rende visible dans le navigateur.)
_git. L'appel à compadd -Qparaître bizarre: -Qsignifie «ne citez pas de caractères spéciaux». Essayez de supprimer -Qdes compaddappels.
zshcomportement par défaut de ne pas séparer les résultats de substitution de commandes. En fait - l' \bsévasion n'est pas nécessaire - ou est futile, selon la façon dont vous la regardez. Définissez "SH_WORD_SPLIT" zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}ou quoi qu'elles reviennent.