最後一個製表符(製表符)字元不會跳到終端機中的下一行

最後一個製表符(製表符)字元不會跳到終端機中的下一行

我遇到了問題。就我而言,它是一個列印一系列數字的 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是可列印字元。

延伸閱讀:

相關內容