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 zsh
e git
sono stati installati tramite homebrew. (L'output della versione completa è in fondo al post.)
git
Il 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. zsh
Il completamento incorporato non lo fa, ma lo git
fa.
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 add
completare 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.3
e 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 _git
file 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 $FPATH
prima delle mie .zshrc
corse compinit
(o semplicemente rimuovo il /usr/local/share/zsh/site-functions/_git
link simbolico), i completamenti tornano indietro zsh
e funzionano come previsto.
Il zsh
completamento 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.bash
collegamento 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 _git
completamenti sono stati fantastici perché sono più consapevoli dei repository rispetto a zsh
quelli, 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 _git
e git-completion.bash
: git-completamento.bash e _git (rinominato in _git.sh
modo che CloudApp lo renda visualizzabile nel browser.)
_git
. Le chiamate compadd -Q
sembrano strane: -Q
significa "non citare caratteri speciali". Prova a rimuovere -Q
dalle compadd
chiamate.
zsh
comportamento predefinito di risultati di sostituzione dei comandi non frazionanti. In effetti - la \bs
fuga 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.