git conclusão com zsh: nomes de arquivos com espaços não estão sendo escapados corretamente

20

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.)

    
por cbowns 28.05.2014 / 02:02

1 resposta

5

Esse bug é mencionado na lista de e-mails .

A correção é editar o arquivo git-completion.zsh e remover a opção -Q de compadd , em __gitcomp_file .

--- i/contrib/completion/git-completion.zsh
+++ w/contrib/completion/git-completion.zsh
@@ -90,7 +90,7 @@ __gitcomp_file ()

    local IFS=$'\n'
    compset -P '*[=:]'
-   compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
+   compadd -p "${2-}" -f -- ${=1} && _ret=0
 }

 __git_zsh_bash_func ()

Este arquivo é instalado a partir do diretório contrib/completion e seu caminho pode variar com o gerenciador de pacotes. Se você instalou com o homebrew no macOS, ele está localizado em /usr/local/Cellar/git/2.10.2/share/zsh/site-functions .

    
por 19.11.2016 / 14:52