在终端窗口输出制表符

Axe*_*sbo 7 bash terminal clipboard

如何在终端窗口上输出制表符(ASCII hex 0x09)?

在我所有的实验中,当 Tab 字符出现在终端上时,它都会变成空格。例如

$ echo -e "xx\t\tyy"
xx              yy
Run Code Online (Sandbox Code Playgroud)

这不是要我要,因为之间的空间xx,并yy充满了14位,而不是2制表符。我试过stty tab0, stty tab1,stty tab2stty tab3,但都给出了相同的结果。

我使用的是 GNOME Terminal 2.16.0 和 Red Hat Enterprise Linux Client 5.9 版。

背景:我想在终端上用鼠标选择文本并粘贴到 Excel 中。当我从 Emacs 执行此操作时(字段之间有 0x09 选项卡),这些字段最终会出现在不同的列中。我喜欢这个,并且在从终端复制粘贴时想要相同的行为。但是,目前所有字段都在第一列中作为一个字符串结束。当我在 Emacs 中的字段之间有空格 (0x20) 时,行为与从终端复制粘贴时的行为相同。

egm*_*ont 8

Tab 不是可打印的字符。Tab 是一个控制字符,通常使光标前进(但不是在行尾),保持它跳过的字符不变。

gnome-terminal(和其他vte基于模拟器)有一个特殊的技巧,它试图保留标签以用于复制粘贴目的,但是,它仍然会在软换行符处丢失它们。其他模拟器可能也有这样的黑客,但通常他们没有。

另请参阅https://bugzilla.gnome.org/show_bug.cgi?id=769316 上的对话。


Tho*_*key 5

如果你使用

printf "xx\t\tyy"
Run Code Online (Sandbox Code Playgroud)

这应该扩展为一个真正的制表符。的行为echo对于bash一直不稳定。我bash在我的 Debian 7 上进行了测试,发现既没有echo -t也没有/bin/echo -t给出选项卡,而printf有(将输出重定向到文件以确保)。这是脚本:

#!/bin/bash
echo -t "xx\t\tyy"
echo done
/bin/echo -t "xx\t\tyy"
echo done
echo "xx\t\tyy"
echo done
/bin/echo "xx\t\tyy"
echo done
printf "xx\t\tyy"
echo done
Run Code Online (Sandbox Code Playgroud)

并输出终端:

-t xx\t\tyy
done
-t xx\t\tyy
done
xx\t\tyy
done
xx\t\tyy
done
xx              yydone
Run Code Online (Sandbox Code Playgroud)

在终端屏幕上放置字符的附加问题不同。通常,大多数终端只有可选择用于剪切/粘贴的空格(无论您是否打印选项卡)。为了那个原因 -