Completamento Git:
Sto riscontrando difficoltà con il completamento automatico del nome file di git sul mio sistema. Sto usando zsh(5.0.5) con git(1.9.3) su OS X (10.9.3). Entrambi zshe gitsono stati installati tramite homebrew. (L'output della versione completa è in fondo al post.)
gitIl completamento del nome file non sta inserendo spazi come mi aspetto. Quando scrivo il nome di un file con uno spazio nel nome, la shell inserisce il nome del file senza spazi di escape. zshIl completamento incorporato non lo fa, ma lo gitfa.
Ecco un esempio di quello che sto vedendo.
Ho un repository con alcuni file con spazi nei loro nomi.
% ls -la
test
test four - latest.txt
test three.txt
test two
La barra rovesciata della shell sfugge ai nomi dei file come previsto quando uso il completamento della scheda per inserire il nome del file.
% echo "testing" >> test<tab>
si completa automaticamente dopo aver colpito la scheda tre volte.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status mostra questi nomi di file tra virgolette (capisce perfettamente cosa succede):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
ma quando provo a git addcompletare automaticamente la scheda, va di lato.
% git add test<tab>
risulta in questo dopo aver colpito la scheda tre volte:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Ho provato a regredire questo un po ': i miei dotfile sono in controllo di versione, così ho provato zsh 4.3.15, git 1.8.3e le mie dotfile da un anno fa, quando sono quasi certo questo ha funzionato. Stranamente, questa configurazione era ancora rotta.
Io ho ristretto la scelta per il _gitfile di completamento che si sta provenienti da /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
Se cambio manualmente $FPATHprima delle mie .zshrccorse compinit(o semplicemente rimuovo il /usr/local/share/zsh/site-functions/_gitlink simbolico), i completamenti tornano indietro zshe funzionano come previsto.
Il zshcompletamento senza _git:
% git add test<tab>
colpire la scheda tre volte produce risultati corretti:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Nota a margine: ho provato a rimuovere il git-completion.bashcollegamento e si rompe completamente le cose:
% git add test<tab>
produce questo fallimento:
% 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
Voglio davvero farlo funzionare correttamente: il resto dei _gitcompletamenti sono stati fantastici perché sono più consapevoli dei repository rispetto a zshquelli, ma ho bisogno di nomi di file con spazi o altri caratteri speciali per essere correttamente salvati.
Versioni del software:
% 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
Ho caricato i file _gite git-completion.bash: git-completamento.bash e _git (rinominato in _git.shmodo che CloudApp lo renda visualizzabile nel browser.)
_git. Le chiamate compadd -Qsembrano strane: -Qsignifica "non citare caratteri speciali". Prova a rimuovere -Qdalle compaddchiamate.
zshcomportamento predefinito di risultati di sostituzione dei comandi non frazionanti. In effetti - la \bsfuga non è necessaria - o è inutile, a seconda di come la vedi. Impostare "SH_WORD_SPLIT" zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}tale che vengano restituite come o qualsiasi altra cosa.