2

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

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

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

为什么选项卡不像空格一样突出显示?我可以通过其他方式强制吗?

4

3 回答 3

3

如果您不需要标签成为标签,您可以通过 expand(1) 预处理您的文本。

于 2009-10-26T20:20:16.080 回答
3

我找到了答案:不,不能在符合标准的终端仿真器中突出显示选项卡。Tab 在终端中并不是真正的空白;它明确是一个光标移动字符,可以前进到下一个制表位。因此,实际上我的示例说“在红色背景上打印两个空格,前进到下一个制表位,然后在红色背景上再打印两个空格”。

解决方法是 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 回答