Os primeiros caracteres do comando repetidos no visor ao completar

20

Os dois primeiros caracteres foram repetidos enquanto eu uso o Tab para completar. Na captura de tela abaixo, cd é repetido.

Eutenteiorxvt-unicdoe,xterm,terminator.Todosessesemuladoresdeterminaltêmesseproblema.

Zshversão5.0.2,arquivodeconfiguração on-my-zsh

    
por jilen 15.09.2013 / 17:48

3 respostas

29

Se os caracteres em sua linha de comando às vezes são exibidos em um deslocamento, isso geralmente ocorre porque o zsh calculou a largura errada para o prompt. Os sintomas são que a exibição parece bem contanto que você esteja adicionando caracteres ou movendo caractere por caractere, mas se torna truncado (com alguns caracteres aparecendo mais à direita do que deveriam) quando você usa outros comandos que movem o cursor ( Início , conclusão, etc.) ou quando o comando se sobrepõe a uma segunda linha.

O Zsh precisa saber a largura do prompt para saber onde os caracteres do comando são colocados. Assume que cada personagem ocupa uma posição, a menos que seja dito o contrário.

Uma possibilidade é que o seu prompt contenha seqüências de escape que não estão adequadamente delimitadas. Seqüências de escape que alteram a cor ou outros aspectos de formatação do texto, ou que alteram o título da janela ou outros efeitos, têm largura zero. Eles precisam ser incluídos em um percentual de chaves construtivas %{…%} . Mais geralmente, uma seqüência de escape como %42{…%} diz ao zsh para assumir que o que está dentro das chaves é de 42 caracteres de largura.

Portanto, verifique suas configurações de prompt ( PS1 , PROMPT ou as variáveis que eles referenciam) e certifique-se de que todas as seqüências de escape (como \e[…m alterem os atributos de texto - observe que pode estar presente variável como $fg[red] ) estão dentro de %{…%} . Como você está usando oh-my-zsh, verifique suas próprias configurações e as definições que você está usando em oh-my-zsh.

O mesmo problema surge no bash. Sequências de largura zero em um prompt precisam ser colocadas em \[…\] .

Outra possibilidade é que o seu prompt contenha caracteres não-ASCII e que zsh (ou qualquer outro aplicativo) e seu terminal tenham uma ideia diferente de como eles são largos. Isso pode acontecer se houver uma incompatibilidade entre a codificação do seu terminal e a codificação declarada no shell, e as duas codificações resultarem em larguras diferentes para determinadas seqüências de bytes. Normalmente, você pode encontrar esse problema ao usar um terminal não-Unicode, mas declarando uma localidade Unicode ou vice-versa.

Os aplicativos dependem de variáveis de ambiente para conhecer a localidade; a configuração relevante é LC_CTYPE , que é determinada a partir das variáveis de ambiente LANGUAGE , LC_ALL , LC_CTYPE e LANG (a primeira delas definida é aplicável). O comando locale | grep LC_CTYPE informa sua configuração atual. Geralmente, a melhor maneira de evitar problemas de localidade é deixar o emulador de terminal definido como LC_CTYPE , pois ele sabe qual codificação ele espera; mas se isso não funcionar para você, certifique-se de definir LC_CTYPE .

Os mesmos sintomas podem ocorrer quando o comando anterior exibiu alguma saída que não terminou em uma nova linha, para que o prompt seja exibido no meio da linha, mas o shell não percebe isso. Neste caso, isso só aconteceria depois de executar tal comando, não persistentemente.

Se uma linha não for exibida corretamente, o comando redisplay ou clear-screen (ligado a Ctrl + L por padrão) irá corrigir isso.

    
por 16.09.2013 / 14:57
9

Eu tive o mesmo problema e encontrei minha solução aqui: link . Basta colocar o seguinte no seu ~/.zshrc .

export LC_CTYPE=en_US.UTF-8

    
por 10.08.2016 / 00:27
0

Eu tive esse problema no iTerm 2 no macOS. Acabei resolvendo isso indo para Preferências - > Perfis - > Texto e assinalando "Usar Larguras da Versão 9 do Unicode".

    
por 06.03.2018 / 18:19