Я столкнулся с проблемой. В моем случае это была программа Lua, печатающая ряд чисел. Lua использует вкладки в качестве разделителей, и вывод получился таким образом в моем терминале из 80 столбцов:

1       2       3       4       5       6       7       8       9       10      1
1      12

Обратите внимание, как число 11 усекается, с первым 1 в столбце 79 и вторым 1 в столбце 0 следующего списка. Я ожидал, что полное число 11 появится в следующей строке.

Это не специфично для Lua, и его легко воспроизвести с помощью одной строки:

printf '1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12'

Я прочитал этот вопрос и принял ответ: почему на 80-колоночной консоли есть 11 табов? что заставило меня понять, почему это происходит. Вопрос в том, есть ли способ переопределить это поведение, чтобы последняя вкладка переместилась к столбцу 0 в следующей строке, а не к последнему столбцу в текущей строке?

1 ответ1

2

Нет, вы не можете заставить это работать автоматически, то есть, не фильтруя вывод из вашей программы, чтобы интерпретировать вкладку с правого поля как перенос. Это связано с тем, что перенос в стиле VT100 поднимается до правого поля и не будет переноситься, пока вы не напишите печатный символ. Вкладки не для печати.

Большинство терминалов настроены на использование программных вкладок (уже расширенных до пробелов). Вы можете проверить настройки stty , чтобы увидеть, так ли это. Вывод неясен, но tab0 означает, что он пытается использовать вкладки, а tab3 говорит, что нет.

Чтобы увидеть настройки:

stty -a

Чтобы отключить жесткие вкладки:

stty -tabs

Lua может переопределить эту настройку, но если это не так, это возможно, поскольку пробел является печатным символом.

Дальнейшее чтение:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .