Conclusão do Git:
Estou tendo dificuldades com os preenchimentos automáticos de nome de arquivo do git no meu sistema. Estou usando zsh(5.0.5) com git(1.9.3) no OS X (10.9.3). Ambos zshe gitforam instalados via homebrew. (A versão completa está na parte inferior da postagem.)
gitA conclusão do nome do arquivo não está inserindo espaços como eu esperava. Quando digito o nome de um arquivo com um espaço no nome, o shell insere o nome do arquivo sem espaços vazios. zshA conclusão incorporada não faz isso, mas gitsim.
Aqui está um exemplo do que estou vendo.
Eu tenho um repositório com alguns arquivos com espaços em seus nomes.
% ls -la
test
test four - latest.txt
test three.txt
test two
A barra invertida do shell escapa os nomes dos arquivos conforme o esperado quando eu uso o preenchimento de tabulação para inserir o nome do arquivo.
% echo "testing" >> test<tab>
é completado automaticamente após pressionar a guia três vezes.
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status mostra esses nomes de arquivos entre aspas (ele entende totalmente o que está acontecendo):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
mas quando tento git addcom o preenchimento automático da guia, ele fica para o lado.
% git add test<tab>
resulta nisso depois de clicar na guia três vezes:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Eu tentei regredindo isso um pouco: meus dotfiles estão em controle de versão, então eu tentei zsh 4.3.15, git 1.8.3e meus dotfiles de um ano atrás, quando estou quase certo isso funcionou. Estranhamente, essa configuração ainda estava quebrada.
Eu já reduzi-lo ao _gitarquivo de conclusão que está sendo originada 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
Se eu alterar manualmente $FPATHantes das minhas .zshrcexecuções compinit(ou simplesmente remover o /usr/local/share/zsh/site-functions/_gitlink simbólico), as conclusões voltarão zshe funcionarão conforme o esperado.
A zshconclusão sem _git:
% git add test<tab>
pressionar a guia três vezes produz resultados corretos:
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
Nota lateral: tentei remover o git-completion.bashlink e ele quebra totalmente as coisas:
% git add test<tab>
produz este flagra-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
Eu realmente quero que isso funcione corretamente: o restante das _gitconclusões foi ótimo porque elas são mais conscientes do que as zshnovas, mas eu preciso de nomes de arquivos com espaços ou outros caracteres especiais para que possam escapar adequadamente.
Versões de 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
Fiz upload dos arquivos _gite git-completion.bash: git-conclusão.bash e _git (renomeado para _git.shque o CloudApp o torne visível no navegador).
_git. As chamadas compadd -Qparecem estranhas: -Qsignifica "não citar caracteres especiais". Tente remover -Qdas compaddchamadas.
zshcomportamento padrão de resultados de substituição de comando sem divisão de palavras. De fato - a \bsfuga não é necessária - ou é inútil, dependendo de como você a vê. Defina "SH_WORD_SPLIT" zsh.sourceforge.net/FAQ/zshfaq03.html
${=$(completion)}ou o que elas retornam.