在VIM中看起来像set tabstop=4
,但我不知道如何在 bash中设置
例如:
echo -e "1234567890\t321\n1\t2\n123\t1"
当前输出:
1234567890 321
1 2
123 1
我想要这样的输出:
1234567890 321
1 2
123 1
它可以在任何地方显示,就像cat somefile
或php -r 'echo "\t123";'
如何在bash中设置标签宽度?
答案 0 :(得分:52)
这不是你的shell(或php或cat)的属性。这是管理输出的终端。
使用tabs
命令更改行为:
$ tabs 4
$ echo -e "a\tb"
a b
$ tabs 12
$ echo -e "a\tb"
a b
(tabs
在POSIX中指定,上面的输出是“伪造的”:它仍然是两个字母之间的制表符。)
答案 1 :(得分: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
实用程序控制程序的输出。
答案 2 :(得分:0)
您可以使用setterm设置此
setterm -regtabs 4
我把它放在我的.bash_profile中,但它不是专门与bash相关的
答案 3 :(得分:0)
(0, 0, { values }) link to a new record that needs to be created with the given values dictionary
(1, ID, { values }) update the linked record with id = ID (write *values* on it)
(2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
(3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
(4, ID) link to existing record with id = ID (adds a relationship)
(5) unlink all (like using (3,ID) for all linked records)
(6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)
将导致以下制表位位置。这不是您所要的。
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
* * * * * * * * * * * * * * * * * * * *
用单个数字指定制表符会创建一个从0开始的隐式列表。
创建明确的列表,例如您要的内容。提供制表符停止位置的逗号或空格分隔列表。
像这样: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
* * * * * * * * * * * * * * * * * * * *
有关更多详细信息,请参见tabs 5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77
和man tabs
。
答案 4 :(得分: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