如何在 bash 中设置 4 个空格制表符
Posted
技术标签:
【中文标题】如何在 bash 中设置 4 个空格制表符【英文标题】:How to set 4 space tab in bash 【发布时间】:2012-06-02 16:56:13 【问题描述】:在 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 中设置标签宽度?
【问题讨论】:
似乎你无法改变它(这是我找到的答案)。您可以改为使用空格,但我想您知道 :p 【参考方案1】:这对我有用。
~/.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
【讨论】:
【参考方案2】: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 tabs
和tabs -v
了解更多详情。
【讨论】:
【参考方案3】:你可以使用 setterm 来设置这个
setterm -regtabs 4
我将它放在我的 .bash_profile 中,但它与 bash 无关
【讨论】:
setterm: terminal screen-256color 不支持 --regtabs 我也得到了类似的结果:setterm: terminal xterm does not support --regtabs
【参考方案4】:
您可以使用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
实用程序控制您的程序的输出。
【讨论】:
【参考方案5】:这不是你的 shell(或 php 或 cat)的属性。管理输出的是您的终端。
使用tabs
命令更改行为:
$ tabs 4
$ echo -e "a\tb"
a b
$ tabs 12
$ echo -e "a\tb"
a b
(tabs
是在 POSIX 中指定的,上面的输出是“伪造的”:它仍然是两个字母之间的制表符。)
【讨论】:
注意:=tabs= 在 Unix 中指定(带有 XSI 选项的 POSIX),而不是 POSIX。符合 POSIX 但不符合 Unix 的系统不需要实现 =tabs= 命令。 补充:寻呼机“less”不受影响,所以使用“less -x4”;对于“git diff”,使用“git config --global core.pager 'less -x4'” 它不会影响 macOS 终端 ssh Linux 上的 vi 编辑器 @neckTwi: vi 有自己的设置以上是关于如何在 bash 中设置 4 个空格制表符的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio Code 中设置 Cobol 制表符/缩进
在 TextWrangler 中自动将制表符转换为 4 个空格?
如何在基于 MacOS 的 Github Action 运行器中设置 Bash 4 和其他 GNU 工具?