如何限制 gitbranch --format 字符串长度

如何限制 gitbranch --format 字符串长度

我有这个~/.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

答案1

如果您无法访问column了解输出宽度限制的实现,一种方法是在awk.然而,实现逻辑——虽然很简单——会增加函数的长度gitconfig

awk -F'|' -v maxw=4 '{for (i=1;i<=NF;i++) {l=length($i); if (l>maxw) l=maxw; if (l>mw[i]) mw[i]=l; lines[NR]=$0}}
    END{for (j=1;j<=NR;j++) {n=split(lines[j],f,/\|/); for(i=1;i<=n;i++) {printf("%*s%s",mw[i],substr(f[i],1,maxw),i==n?ORS:OFS)}}}'

如您所见,该awk程序将输入拆分为|(这就是您所说的命令的实际输出git branch)。

  • 对于每一行,它都会迭代所有字段,并将mw每列的最大字段宽度存储在数组中,但仅限于变量 中指定的最大宽度maxw
  • 然后它将每行的“原始”内容(包括原始字段分隔符)存储在缓冲数组中lines
  • 在输入结束时,它迭代缓冲区lines并再次将行分割|成数组f。对于 的每个条目f,它最多maxw通过 打印字段的字符printf,其中所需的字段宽度是从mw相应列的数组中获取的。

对于您的示例(但假设实际的|-separation 而不是,您显示的),输出将是:

a    b c
x yyyy z

相关内容