
問題が発生しました。私の場合は、一連の数字を出力する Lua プログラムでした。Lua はタブを区切り文字として使用し、80 列のターミナルで出力は次のようになりました。
1 2 3 4 5 6 7 8 9 10 1
1 12
数字 11 が切り捨てられ、最初の 1 が列 79 にあり、2 番目の 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
ルア5月その設定を上書きしますが、上書きされない場合は、space印刷可能な文字であるため、その可能性があります。
参考文献:
- ラッピングの説明が変ですね、もっと詳しく教えてください。(xterm FAQ)
- ラッピングの例(vtテスト)