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 zsh
e git
foram instalados via homebrew. (A saída da versão completa está na parte inferior do post.)
A conclusão do nome do arquivo
git
não está inserindo espaços como eu esperava. Quando eu digito o nome de um arquivo com um espaço no nome, o shell insere o nome do arquivo sem espaços vazados. A conclusão integrada do zsh
não faz isso, mas git
's faz.
Veja 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 escapa dos nomes dos arquivos conforme o esperado quando uso o término da tabulação para inserir o nome do arquivo.
% echo "testing" >> test<tab>
autocomplete-se a isso depois de 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 (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 add
com o preenchimento automático de guias, ele fica de lado.
% git add test<tab>
resulta disso depois de clicar três vezes na guia:
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
Eu tentei regredir isso um pouco: meus dotfiles estão no controle de versão, então eu tentei zsh 4.3.15
, git 1.8.3
e meus dotfiles de um ano atrás, quando estou quase certo de que isso funcionou. Estranhamente, essa configuração ainda estava quebrada.
Eu tenho reduzi-o ao arquivo de preenchimento com _git
que está sendo originado 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 $FPATH
antes de meu .zshrc
executar compinit
(ou simplesmente remover o link simbólico /usr/local/share/zsh/site-functions/_git
), as conclusões retornarão para zsh
e funcionarão como esperado.
A conclusão de zsh
sem _git
:
% git add test<tab>
bater na 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: tentei remover o link git-completion.bash
e ele simplesmente interrompe totalmente as coisas:
% git add test<tab>
produz essa brecha:
% 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 dos _git
completions foram ótimos porque são mais compatíveis com repo do que os zsh
, mas eu preciso de nomes de arquivos com espaços ou outros caracteres especiais para escapar corretamente.
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
Enviei os arquivos _git
e git-completion.bash
: git-completion.bash e _git (renomeado para _git.sh
, então o CloudApp o tornará visível no navegador.)