34

它看起来像set tabstop=4在 VIM 中,但我不知道如何在bash中设置它

例如:

echo -e "1234567890\t321\n1\t2\n123\t1"

电流输出:

1234567890      321
1       2
123     1

我想要这样的输出:

1234567890  321
1   2
123 1

它可以在任何地方显示,就像cat somefilephp -r 'echo "\t123";'

如何在 bash 中设置标签宽度?

4

6 回答 6

72

这不是你的 shell(或 php 或 cat)的属性。管理输出的是您的终端。

使用tabs命令更改行为:

$ tabs 4

$ echo -e "a\tb"      
a   b
$ tabs 12

$ echo -e "a\tb" 
a           b

tabs在 POSIX 中指定,上面的输出是“伪造的”:它仍然是两个字母之间的制表符。)

于 2012-05-28T10:09:44.213 回答
1

tabs您可以使用该实用程序设置定期或不定期的时间间隔。无论您是在进行自己的输出、cat用于输出已经包含选项卡的文件还是使用您无法控制的程序的输出,它都可以工作。

但是,如果您要控制输出,最好使用printf而不是echo格式化字符串而不是制表符。

$ printf '%-12s%8.4f %-8s%6.2f\n' 'Some text' 23.456 'abc def' 11.22
Some text    23.4560 abc def  11.22
$ format='%*s%*.*f %*s%*.*f\n'
$ printf "$format" -12 'Some text' 8 4 23.456 -8 'abc def' 6 2 11.22
Some text    23.4560 abc def  11.22

除非您希望其他人能够使用该tabs实用程序控制您的程序的输出。

于 2012-05-28T12:38:54.817 回答
1

您可以使用 setterm 来设置它

setterm -regtabs 4

我把它放在我的 .bash_profile 中,但它与 bash 无关

于 2015-03-11T22:04:14.643 回答
1

tabs 4导致以下制表位位置。这不是你所要求的。

tab stop positions 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *

你问这个..

tab stop positions 5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,80
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *  *

使用单个数字指定选项卡会创建一个从 0 开始的隐式列表
。创建一个显式列表,例如您所要求的。提供逗号或空格分隔的制表位位置列表。
像这样:tabs 5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77

请参阅man tabstabs -v了解更多详情。

于 2020-09-07T21:26:38.167 回答
0

这对我有用。

~/.bash_profile

# Set the tab stops
if [ -f ~/.bash_tab_stops ]; then
    . ~/.bash_tab_stops
fi

~/.bash_tab_stops

tab_width=4
terminal_width=$( stty size | awk '{print $2}' )

set_tab_stops() {
    local tab_width=$1 terminal_width=$2 tab_stops=''
    for (( i=1+$tab_width; $i<$terminal_width; i+=$tab_width )); do
        tab_stops+=$i','
    done
    tabs $tab_stops
}

set_tab_stops $tab_width $terminal_width

GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
PuTTY Release 0.73 Build platform: 64-bit x86 Windows
Linux VPS 3.10.0-1127.18.2.el7.centos.plus.x86_64

于 2020-09-08T09:04:49.503 回答
0

如果您想要第一个选项卡的偏移量(例如 for git diff),您可以使用 shell 扩展来获取步进数字:

tabs {5..300..4}

在上面,5 是第一个选项卡的宽度,第二个数字是您的终端宽度,最后一个是您的常规选项卡宽度。

于 2022-02-25T08:19:22.750 回答