%20%D0%BD%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4%D0%B8%D1%82%20%D0%BD%D0%B0%20%D1%81%D0%BB%D0%B5%D0%B4%D1%83%D1%8E%D1%89%D1%83%D1%8E%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%B2%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D0%B5.png)
Я столкнулся с проблемой. В моем случае это была программа 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
Нет, вы не можете сделать это автоматически, т.е. без фильтрации вывода вашей программы, чтобы интерпретировать табуляцию на правом поле как перенос. Это потому, что перенос в стиле VT100 доходит до правого поля и будетнетоберните, если вы не напишитепечатныйсимвол. Табуляция не печатается.
Большинство терминалов настроены на использование мягких табуляций (уже расширены до пробелов). Вы можете проверить свои stty
настройки, чтобы увидеть, так ли это. Вывод неясный, но tab0
означает, что он пытается использовать табуляцию, в то время как tab3
говорит, что этого не происходит.
Чтобы увидеть настройку:
stty -a
Чтобы отключить жесткие вкладки:
stty -tabs
Луаможетпереопределить эту настройку, но если этого не произошло, то это возможно, поскольку spaceявляется печатным символом.
Дальнейшее чтение:
- Это описание упаковки странное, можете сказать еще?(часто задаваемые вопросы по xterm)
- Примеры упаковки(vttest)