我有这个~/.gitconfig
别名:
b = "!r() { count=10; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:bold green)%(committerdate:relative)|%(color:yellow)%(refname:short)|%(color:red)%(objectname:short)%(color:reset)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -c 10 -ts '|'; }; r"
我对这个函数的问题是它根据最长的行格式化字符串,即如果我有一个包含以下值的表(这不是来自的输出git branch --format
,只是一个说明column
行为的示例):
a, b, c
x, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, z
然后它看起来像
a, b , c
x, yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy, z
这是一个很好的行为column
,但是我想修剪字符串长度,因此,例如,没有一列会超过 4:
a, b , c
x, yyyy, z
我设法添加了一个管道awk
来做类似的事情(使用 25 个字符):
b = "!r() { count=10; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:bold green)%(committerdate:relative)|%(color:yellow)%(refname:short)|%(color:red)%(objectname:short)%(color:reset)|%(color: blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -c 10 -ts '|' | awk '{for(i=1;i<NF;i++){$i=substr($i,1,25)}; print $0}'; }; r"
但它把桌子弄乱了:(
它*
在当前分支的开头也有不正常的行为。
我怎样才能解决这个问题?
- 我尝试安装一个较新的版本,
column
该版本应该有一个-c
控制宽度的选项,但我不能:((从这里下载然后尝试./configure && make install
。没有按预期工作)。 - 试图用
\
换行符格式化函数 - 没有用。函数必须gitconfig
看起来那么难看吗?
$ git --version
git version 2.34.1
如果您无法访问
column
了解输出宽度限制的实现,一种方法是在awk
. 但是,实现逻辑 - 虽然直截了当 - 会增加gitconfig
函数的长度:如您所见,该
awk
程序将输入拆分为|
(这是您所说的git branch
命令的实际输出)。mw
每列的最大字段宽度存储在数组中,但限制为变量中指定的最大宽度maxw
。lines
中。lines
缓冲区并再次将行拆分|
为数组f
。对于 的每个条目f
,它通过 打印最多maxw
字段的字符printf
,其中所需的字段宽度取自mw
相应列的数组。对于您的示例(但假设实际
|
-separation 而不是,
您显示的),输出将是: