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)
在Raimondi的回答基础上,
:Tabularize /,\zs/l0r1
Run Code Online (Sandbox Code Playgroud)
对我来说更有意义,它也只是一个命令:-).
这l0r1意味着左边填充中的0空格左边对齐,右边填充中有1个空格.