使用终端序列,我可以在终端模拟器中为文本着色:
$ echo -e '\e[37;41m--this is white on red--\e[0m'
这很有效。
下面打印一个红色矩形,即空格字符有红色背景和空前景:
$ echo -e '\e[37;41m \e[0m '
但下面会打印两个由标签分隔的红色矩形:
$ echo -e '\e[37;41m \t \e[0m '
也就是说,制表符没有收到红色背景突出显示。它采用默认的终端背景颜色。
为什么标签没有突出显示为空格?我可以用其他方式强迫这个吗?
答案 0 :(得分:3)
如果您不需要选项卡作为选项卡,则可以通过展开(1)预处理文本。
答案 1 :(得分:3)
我找到了答案:不,标签不能在符合标准的终端模拟器中突出显示。 Tab在终端中不是真正的空白;它显式是一个光标移动字符,前进到下一个制表位。因此,实际上我的例子说“在红色背景上打印两个空格,向前移动到下一个制表位,然后在红色背景上再打印两个空格”。
解决方法是ankon建议在打印前将标签转换为空格。
答案 2 :(得分: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/"
}
希望这也有助于其他人。