我如何与VIM的Tabular插件对齐?

Rem*_*man 10 vim alignment tabular

这是我的代码:

john,betty,wally,beth 
walter,george,thomas,john
herbert,bob,petty,mick`
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何使用VIM的Tabular插件将其与此对齐:

john,    betty,  wally,  beth
walter,  george, thomas, john
herbert, bob,    petty,  mick
Run Code Online (Sandbox Code Playgroud)

我知道如何在Align插件中执行此操作,但无法在Tabular中找到它的工作原理.

sid*_*yll 14

我不是这方面的大师,我在这里所说的一切都是基于对Tabularize的理解.

Tabularize总是将字段中的东西分开,由正则表达式描述.例如:

abc,d,e
a,b,cde

:Tab /,
Run Code Online (Sandbox Code Playgroud)

使它按如下方式划分每一行:

|abc|,|d|,|e|
|a|,|b|,|cde|
Run Code Online (Sandbox Code Playgroud)

然后用空格填充每个字段,以便分隔符字段对齐 - 默认情况下所有接收和额外空间(我认为最后一个字段除外).

|abc |, |d |, |e  |
|a   |, |b |, |cde|
Run Code Online (Sandbox Code Playgroud)

导致:

abc , d , e
a   , b , cde
Run Code Online (Sandbox Code Playgroud)

通过添加标志,您可以控制每个字段的对齐和填充.如果提供的标志少于所需的标记,则会重复使用它们.因此,为了使所有内容以相同的方式对齐,例如左边填充0,您可以使用将为每个字段重复的单个标记.所以:

abc,d,e
a,b,cde

Tab /,/l0 <-- or c0, or r0 or whatever

abc,d,e
a  ,b,cde
Run Code Online (Sandbox Code Playgroud)

我得到的结论是,我有一个零宽度字段(如:Tab /,\zs)没有多大意义,可能导致它获得模式之后的第一个字符并弄乱,切割它.

现在,对我来说:Tab /[^,]\+,没有正常工作,产生了双倍的空间:

john,     betty,   wally,  beth
walter,   george,  thomas, john
herbert,  bob,     petty,  mick`
        ^^       ^^
Run Code Online (Sandbox Code Playgroud)

我认为这是因为没有中间领域.这个模式使一个字段分隔符与另一个并排,如下所示:

|john,||betty,||wally,||beth|
Run Code Online (Sandbox Code Playgroud)

然后,默认情况下,还会使用额外的1个空格填充生成字段的零(在分隔符之间).

|john, | |betty, | |wally, ||beth| <-- for some outrageous reason the las one is cut.

john,  betty,  wally, beth
Run Code Online (Sandbox Code Playgroud)

怎么解决?

我会为分隔符打开空间,这不会导致分隔符靠近其他分隔符.怎么样?只需在逗号后添加空格即可.

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`
Run Code Online (Sandbox Code Playgroud)

现在,您可以在空格和零填充上对齐所有内容:

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`
Run Code Online (Sandbox Code Playgroud)

我希望这有助于理解Tabularize!


Rai*_*ndi 13

Tabularize /,\zs
Run Code Online (Sandbox Code Playgroud)

看到 :help \zs

由于上一个模式不起作用,请尝试使用:

Tabularize /[^,]\+,
Run Code Online (Sandbox Code Playgroud)


hob*_*es3 6

在Raimondi的回答基础上,

:Tabularize /,\zs/l0r1
Run Code Online (Sandbox Code Playgroud)

对我来说更有意义,它也只是一个命令:-).

l0r1意味着左边填充中的0空格左边对齐,右边填充中有1个空格.