使用终端序列,我可以在终端模拟器中为文本着色:

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

也就是说,制表符没有收到红色背景突出显示。它采用默认的终端背景颜色。

为什么标签没有突出显示为空格?我可以用其他方式强迫这个吗?

有帮助吗?

解决方案 2

我找到了答案:不,标签不能在符合标准的终端模拟器中突出显示。 Tab在终端中不是真正的空白;它显式是一个光标移动字符,前进到下一个制表位。所以,实际上我的例子说“在红色背景上打印两个空格,向前移动到下一个制表位,然后在红色背景上再打印两个空格”。

解决方法是ankon建议在打印前将标签转换为空格。

其他提示

如果您不需要选项卡作为选项卡,则可以通过展开(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