当我进入时,vim
我可以使用以下命令更改选项卡大小:
:set ts=4
是否也可以设置cat
命令输出的制表符大小?
答案1
第一个命令在这里模仿您在 中看到的格式vim
。它基于每 4 列的制表符停止 (ts) 设置,智能地将制表符扩展到同等数量的空格。
printf "ab\tcd\tde\n" |expand -t4
输出
ab cd de
为了保持选项卡作为选项卡并有选项卡停止位置设置为每 4 列,那么您必须更改环境使用 tab-char 的方式(就像 vim 使用命令一样:set ts=4
)
例如,在终端中,您可以设置选项卡停止使用此命令变为 4;
tabs 4; printf "ab\tcd\tde\n"
输出
ab cd de
答案2
只需使用以下代码:
tabs -n
其中 n 是您希望制表符对应的空格数。为了不必每次启动 shell 时都执行此操作,只需编辑.bash_profile
in~/
并将以上行添加到文件末尾即可。
有关 tabs 命令的更多信息,请参阅:
man tabs
答案3
;中没有制表符或制表符停止位的概念cat
。该程序只是将输入汇集到输出,并将制表符视为任何其他字符。如果输出设备恰好是终端,则选项卡将根据终端配置提供的任何行为进行处理。
实现 POSIX.1 的系统有一个名为 的命令,tabs(1)
该命令将调整终端如何显示选项卡的概念。取决于特定的选项卡布局并不被认为是一个好主意,因为有人可能会将您的文件发送到其他设备,例如无法执行您预期操作的打印机。
当您调整ts
in vim
(或 plain vi
)时,您所做的只是调整编辑器在显示时解释制表符的方式。它与文件中的最终内容无关。
答案4
要扩展已经给出的答案,expand
还可以获取制表位位置列表。如果各个列的内容长度变化很大,这非常有用。
今天,当我想让输出openssl ciphers
更具可读性时,我遇到了这个要求:
$ openssl ciphers -v 'HIGH'|tr -s ' ' '\t'|expand -t31,41,57,70,90
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
...
ECDH-ECDSA-AES128-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA1
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1
使用 onlyexpand -t31
会将输出的宽度从大约 100 个字符扩大到超过 160 个字符。