ターミナルの次の行にジャンプしない最後のタブ(タブ)文字


0

問題が発生しました。私の場合、一連の数字を出力するLuaプログラムでした。Luaはタブをセパレーターとして使用し、出力は80桁のターミナルで次のようになりました。

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

番号11がどのように切り捨てられるかに注意してください。最初の1は列79で、次の1は次の列の列0です。代わりに、次の行に完全な番号11が表示されると予想していました。

これはLua固有ではなく、この1行で簡単に再現できます。

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

私はこの質問と受け入れられた答えを読みました:80カラムのコンソールに11のタブストップがあるのはなぜですか?なぜそれが起こっているの理解できました。問題は、その動作をオーバーライドして、最後のタブを現在の行の最後の列ではなく次の行の列0にジャンプさせる方法があるかどうかです。

回答:


2

いいえ、これを自動的に機能させることはできません。つまり、プログラムからの出力をフィルタリングして、右マージンのタブを折り返しとして解釈することはできません。VT100スタイルのラッピングが右マージンまで取得し、されますので、それはありませんあなたが書いていない限りラップ印刷可能な文字を。タブは印刷できません。

ほとんどの端末は、ソフトタブを使用するようにセットアップされています(すでにスペースに拡張されています)。stty設定が正しいかどうかを確認できます。出力は不明瞭ですが、tab0タブを使用しようとしますが、使用tab3しないと表示されます。

設定を確認するには:

stty -a

ハードタブを無効にするには:

stty -tabs

Lua その設定をオーバーライドできますが、そうでない場合spaceは印刷可能な文字である可能性があります。

参考文献:


しかし、その規則に明示的に違反する非VT100スタイルの端末タイプや端末プログラムはありませんか?ルールはかなり役に立たず、混乱し、過去と結びついているように聞こえます。
ペドロジメノ

それがあなたが読むことを意図している部分です(「さらに読む」)。あなたが引用したq / aは私には役に立たない。
トーマスディッキー

私はそれを読みましたが、質問には答えません。xvt、rxvt、mrxvt、konsole、pterm、lxterminal、xfce4-terminal、screen、およびxtermを試しました。上記のprintf行を入力するとき、それらはすべて同じ動作をしました。問題は、そうでないものがあるか、その点でVT100互換ではない端末タイプまたは端末プログラムがあるかどうかです。
ペドロジメノ

スペース(90など)とアスタリスクを使用して長い行を印刷します。ラップする必要があります。タブで同じことをしません。
トーマスディッキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.