ターミナルでタブ文字を強調表示できますか?
-
06-07-2019 - |
質問
端末シーケンスを使用して、端末エミュレータでテキストに色を付けることができます:
$ 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/"
}
これが他の誰かにも役立つことを願っています。
所属していません StackOverflow