%20n%C3%A3o%20salta%20para%20a%20pr%C3%B3xima%20linha%20no%20terminal.png)
Eu me deparei com um problema. No meu caso era um programa Lua imprimindo uma série de números. Lua usa tabulações como separadores, e a saída ficou assim no meu terminal de 80 colunas:
1 2 3 4 5 6 7 8 9 10 1
1 12
Observe como o número 11 está truncado, com o primeiro 1 na coluna 79 e o segundo 1 na coluna 0 da próxima linha. Eu esperava que o número 11 completo aparecesse na próxima linha.
Não é específico de Lua e é facilmente reproduzível com esta linha:
printf '1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12'
Eu li esta pergunta e a resposta aceita:Por que existem 11 tabs em um console de 80 colunas?o que me fez entenderpor queisso está acontecendo. A questão é: existe uma maneira de substituir esse comportamento, para fazer a última guia pular para a coluna 0 na próxima linha, em vez de para a última coluna da linha atual?
Responder1
Não, você não pode fazer isso funcionar automaticamente, ou seja, sem filtrar a saída do seu programa para interpretar a guia na margem direita como quebra automática. Isso ocorre porque o empacotamento estilo VT100 atinge a margem direita enãoembrulhe a menos que você escreva umimprimívelpersonagem. As guias não podem ser impressas.
A maioria dos terminais está configurada para usar soft tabs (já expandidas para espaços). Você pode verificar suas stty
configurações para ver se é assim. A saída é obscura, mas tab0
significa que ele tenta usar guias, mas tab3
diz que não.
Para ver a configuração:
stty -a
Para desativar as guias rígidas:
stty -tabs
Luapoderiasubstitua essa configuração, mas se isso não acontecer, é uma possibilidade, pois spaceé um caractere imprimível.
Leitura adicional:
- Essa descrição de embrulho é estranha, diga mais?(FAQ xterm)
- Exemplos de embrulho(vtteste)