【问题标题】:Can one highlight tab characters in the terminal?可以在终端中突出显示制表符吗?
【发布时间】:2010-12-10 06:30:18
【问题描述】:

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

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

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

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

【问题讨论】:

  • 哪个终端?

标签: unix terminal terminal-emulator terminal-color


【解决方案1】:

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

【讨论】:

  • 这是一个很好的建议,我很可能最终会这样做。
【解决方案2】:

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

解决方法是 ankon 建议在打印之前将制表符转换为空格。

【讨论】:

  • 它适用于 Mac OS X 终端(我使用的是 10.8)。它使用当前背景颜色为选项卡着色。您是否参考了说明不应该这样做的文档?
【解决方案3】:

因为我很难找到一个好的解决方案(而且这个页面是第一个搜索结果)...这是我在 .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/"
}

希望这对其他人也有帮助。

【讨论】:

  • 谁知道呢,这是个好主意 :-) 虽然执行起来可能有点混乱,但我更喜欢:hl-nonprinting () { local C=$(printf '\033[0;36m') R=$(printf '\033[0m'); sed -e "s/\t/${C}▹&$R/g" -e "s/$/${C}⁋$R/";} -- 这给了我$ echo -e 'foo\tbar fie' | hl-nonprinting foo▹ bar fie⁋
猜你喜欢
  • 2016-04-21
  • 2013-12-22
  • 2011-05-03
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多