如何限制 git branch –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
如果您無法訪問
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