可以在终端中突出显示制表符吗?
Posted
技术标签:
【中文标题】可以在终端中突出显示制表符吗?【英文标题】: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 '
也就是说,制表符不接受红色背景突出显示。它采用默认的终端背景颜色。
为什么选项卡不像空格一样突出显示?我可以通过其他方式强制吗?
【问题讨论】:
哪个终端? 【参考方案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/$/$CP$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⁋
以上是关于可以在终端中突出显示制表符吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 matplotlib 图中,我可以突出显示特定的 x 值范围吗?
我可以使用 maphilight 插件在两个不同的地图上突出显示具有相同类别的区域吗?