终端中的最后一个制表符(tab)没有跳转到下一行

终端中的最后一个制表符(tab)没有跳转到下一行

我遇到了一个问题。在我的例子中,这是一个打印一系列数字的 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

Lua可能覆盖该设置,但如果没有,则有可能因为它space是一个可打印字符。

进一步阅读:

相关内容