質問

端末シーケンスを使用して、端末エミュレータでテキストに色を付けることができます:

$ echo -e '\e[37;41m--this is white on red--\e[0m'

これは機能します。

次の例は、赤い長方形を印刷します。つまり、スペース文字は赤い背景と空の前景を持ちます。

$ echo -e '\e[37;41m     \e[0m '

ただし、次の例では、タブで区切られた2つの赤い長方形が印刷されます。

$ echo -e '\e[37;41m  \t  \e[0m '

つまり、タブ文字は赤い背景の強調表示を受け取りません。デフォルトの端末背景色を使用します。

タブがスペースのように強調表示されないのはなぜですか?これを別の方法で強制できますか?

役に立ちましたか?

解決 2

答えは見つかりました:いいえ、標準に準拠した端末エミュレーターでタブを強調表示することはできません。ターミナルのタブは実際には空白ではありません。次のタブストップに進むためのカーソル移動文字です。したがって、実際には、私の例では「赤い背景に2つのスペースを印刷し、次のタブストップに進んでから、赤い背景にさらに2つのスペースを印刷する」と書かれています。

回避策は、印刷前にタブをスペースに変換するankonの提案です。

他のヒント

タブをタブにする必要がない場合は、expand(1)を使用してテキストを前処理できます。

素敵な解決策を見つけるのは難しいため(このページは最初の検索結果でした)...これは.bashrcファイルにあります( http://pastebin.com/Pn1fkkJq に変更を加えます):

catt() { # Highlight whitespace on the terminal -- rolfwr
    local C=`printf '\033[0;36m'` R=`printf '\033[0m'`
    #cat "$@" | sed -e "s/      /${C}▹▹▹▹▹▹▹▹$R/g" -e "s/ /${C}·$R/g" -e "s/$/${C}⁋$R/"
    #cat "$@" | sed -e "s/ /${C}·$R/g" -e "s/\t/${C} ▹▹ $R/g" -e "s/$/${C}⁋$R/"
    cat "$@" | sed -e "s/ /${C}·$R/g" | expand | sed -e "s/ \( *\)/${C}▹\1$R/g" -e "s/$/${C}⁋$R/"
    #cat "$@" | sed -e "s/ /${C}.$R/g" | expand | sed -e "s/ \( *\)/${C}>\1$R/g" -e "s/$/${C}P$R/"
}

これが他の誰かにも役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top