2

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

$ 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 '

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

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

4

3 に答える 3

3

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

于 2009-10-26T20:20:16.080 に答える
3

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

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

于 2009-10-28T21:10:05.977 に答える
0

良い解決策を見つけるのが難しかったので(そしてこのページは最初の検索結果でした)...これは私が.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/"
}

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

于 2012-08-13T23:49:09.940 に答える