Eu tenho visto um problema como este ao usar caracteres multi-byte (codificados por UTF-8) no prompt, mas somente quando a opção utf8
da janela tmux está desativada.
Para identificar esses caracteres, procure por qualquer forma "extravagante", símbolos especiais ou caracteres acentuados que estejam fora do repertório ASCII (ou seja, qualquer ponto de código Unicode além de U + 007F).
Para verificar se a opção utf8
está ativa, use este comando em uma janela que está com o problema:
tmux show-option -gw utf8 \; show-option -w utf8
(ou em um prompt tmux :
sem o primeiro tmux
e sem a barra invertida)
Se mostrar dois valores, o segundo é o valor ativo para essa janela. O primeiro (ou único) valor é o valor global que será usado se não houver um valor local / de janela estabelecido.
Se você estiver vendo um valor diferente daquele estabelecido pelo seu arquivo de configuração, provavelmente será necessário reiniciar o servidor (ou se as alterações feitas pelo seu arquivo de configuração forem idempotentes, então você pode source
it: tmux source ~/.tmux.conf
).
O problema surge porque (sem utf8
ativado) tmux e seu emulador de terminal externo tem uma idéia diferente de quantas colunas são usadas para exibir cada caractere multibyte. tmux espera que um caractere multibyte ocupe várias colunas (uma para cada byte), mas seu emulador externo provavelmente está configurado para reconhecê-lo como um único caractere UTF-8 e, portanto, irá renderizá-lo em uma única coluna .
O problema é especialmente visível em um prompt zsh porque zsh tem o cuidado de rastrear onde o cursor está para saber quando a linha será quebrada e o que é necessário fazer para redesenhar corretamente o prompt. Infelizmente, a incompatibilidade entre (não utf8
) tmux e o emulador externo (configurado em UTF-8) faz com que tmux relate uma posição do cursor que é várias colunas para o à direita da posição esperada (um espaço extra para cada byte extra em cada caractere multibyte no prompt).
A ativação de utf8
em tmux corrige o problema porque ambos tmux e o emulador externo reconhecerão as sequências de cada ponto de código UTF-8 multibyte como ocupando uma única coluna . Reconfigurar seu emulador externo para usar uma codificação de byte único também consertaria a discrepância, mas ao custo de não ser capaz de visualizar corretamente dados codificados em UTF-8 (embora essa visão basicamente mostre o que é tmux está "pensando" quando utf8
está desativado.