我不是这方面的高手,这里所说的一切都是基于我对 Tabularize 的理解。
Tabularize 总是在字段中拆分事物,由正则表达式描述。例如:
abc,d,e
a,b,cde
:Tab /,
使其按如下方式划分每一行:
|abc|,|d|,|e|
|a|,|b|,|cde|
然后每个字段都用空格填充,以便分隔符字段对齐 - 默认情况下,所有内容都会接收和额外的空格(我认为最后一个字段除外)。
|abc |, |d |, |e |
|a |, |b |, |cde|
导致:
abc , d , e
a , b , cde
通过添加标志,您可以控制每个字段的对齐和填充。如果您提供的标志比需要的少,它们会被重用。因此,要使所有内容都以相同的方式对齐,例如左填充 0,您可以使用单个标志,该标志将为每个字段重复。所以:
abc,d,e
a,b,cde
Tab /,/l0 <-- or c0, or r0 or whatever
abc,d,e
a ,b,cde
我的结论是,拥有一个零宽度字段(如:Tab /,\zs
)没有多大意义,可能导致它在模式之后获得第一个字符并弄乱,剪切它。
现在,对我来说:Tab /[^,]\+,
没有正常工作,产生双倍的空间:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
^^ ^^
我认为那是因为没有中间场。这种模式使字段分隔符与另一个并排存在,如下所示:
|john,||betty,||wally,||beth|
然后默认情况下,生成字段的零(在分隔符之间)也用额外的 1 个空格填充。
|john, | |betty, | |wally, ||beth| <-- for some outrageous reason the las one is cut.
john, betty, wally, beth
如何解决?
我会为分隔符打开空间,这不会导致分隔符靠近其他分隔符。如何?只需在逗号后添加一个空格。
john,betty,wally,beth
walter,george,thomas,john
herbert,bob,petty,mick`
:%s/,/, /g
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
现在您可以在空格和零填充上对齐所有内容:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
:Tab / /l0
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
我希望这有助于理解 Tabularize!