Os dois primeiros caracteres foram repetidos enquanto eu uso Tabpara concluir. Na captura de tela abaixo, cd
é repetida.
Eu tentei rxvt-unicdoe, xterm, terminator. Todos esses emuladores de terminal têm esse problema.
Zsh versão 5.0.2, arquivo de configuração on-my-zsh
zsh
line-editor
oh-my-zsh
jilen
fonte
fonte
Respostas:
Se os caracteres na linha de comando às vezes são exibidos em um deslocamento, isso geralmente ocorre porque o zsh calculou a largura incorreta para o prompt. Os sintomas são que a exibição parece boa, desde que você adicione caracteres ou mova caracteres por caractere, mas fique distorcida (com alguns caracteres aparecendo mais à direita do que deveria) quando você usa outros comandos que movem o cursor ( Homeconclusã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. Ele assume que cada personagem ocupa uma posição, a menos que seja dito o contrário.
Uma possibilidade é que seu prompt contenha seqüências de escape que não sejam 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 uma construção de chaves de porcentagem
%{…%}
. De maneira mais geral, uma sequência de escape%42{…%}
diz ao zsh para assumir que o que está dentro do aparelho tem 42 caracteres de largura.Portanto, verifique suas configurações rápidas (
PS1
,PROMPT
ou as variáveis que eles fazem referência) e certifique-se de que todas as sequências de escape (como\e[…m
para alterar atributos de texto - nota que pode estar presente através de algumas variáveis como$fg[red]
) estão no interior%{…%}
. Como você está usando o oh-my-zsh, verifique suas próprias configurações e as definições que você está usando no oh-my-zsh.O mesmo problema surge no bash. É necessário incluir seqüências de largura zero em um prompt
\[…\]
.Outra possibilidade é que o seu prompt contenha caracteres não ASCII e que o zsh (ou qualquer outro aplicativo) e o seu terminal tenham uma idéia diferente da largura deles. Isso pode acontecer se houver uma incompatibilidade entre a codificação do seu terminal e a codificada declarada no shell, e as duas codificações resultam em larguras diferentes para determinadas seqüências de bytes. Normalmente, você pode encontrar esse problema ao usar um terminal não-Unicode, mas declarando um código de idioma Unicode ou vice-versa.
Os aplicativos contam com variáveis de ambiente para conhecer o código do idioma; a configuração relevante é
LC_CTYPE
, que é determinada a partir das variáveis de ambienteLANGUAGE
,LC_ALL
,LC_CTYPE
eLANG
(a primeira delas que está definido é aplicável). O comandolocale | grep LC_CTYPE
informa sua configuração atual. Geralmente, a melhor maneira de evitar problemas de localidade é deixar o emulador de terminal definidoLC_CTYPE
, pois ele sabe qual codificação espera; mas se isso não funcionar para você, definaLC_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. Nesse caso, isso só aconteceria após a execução de um comando desse tipo, não persistentemente.
Se uma linha não for exibida corretamente, o comando
redisplay
ouclear-screen
(vinculado a Ctrl+ Lpor padrão) a corrigirá.fonte
->
que seja, eu acholocale
e deecho $PS1 | od -t x1
(e a mesma coisa com qualquer outra variável usada por$PS1
).\e{7,8}
para salvar / restaurar estados do cursor.LC_CTYPE
que consertou para mim. Eu tinha configurado paraC
, quando desmarcá-lo, tudo funcionava. Obrigado.Eu tive o mesmo problema e encontrei minha solução aqui: https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . Basta colocar o seguinte no seu
~/.zshrc
.export LC_CTYPE=en_US.UTF-8
fonte
locale
que estava usando, mas funcionou para mim. Esta resposta fornece as etapas necessárias para o Ubuntu.Eu tive esse problema no iTerm 2 no macOS. Acabei resolvendo o problema acessando Preferências -> Perfis -> Texto e assinalando "Usar larguras Unicode versão 9".
fonte
Eu tenho esse problema usando o ubuntu lts docker image (
ubuntu:latest
). Corrigi-o com as instruções fornecidas na página correspondente: https://hub.docker.com/_/ubuntufonte