这是我的代码:
john,betty,wally,beth
walter,george,thomas,john
herbert,bob,petty,mick`
有没有人知道如何使用VIM的Tabular插件将其与此对齐:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick
我知道如何在Align插件中执行此操作,但无法在Tabular中找到它的工作原理。
答案 0 :(得分:14)
我不是这方面的大师,我在这里所说的一切都是基于我对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!
答案 1 :(得分:13)
Tabularize /,\zs
请参阅:help \zs
由于上一个模式不起作用,请尝试使用:
Tabularize /[^,]\+,
答案 2 :(得分:5)
以Raimondi的回答为基础,
:Tabularize /,\zs/l0r1
对我来说更有意义,它也只有一个命令: - )。
l0r1
表示左边对齐,左边距为0空格,右边距为1空格。
答案 3 :(得分:1)
另一种选择可能是欺骗并使用这些名称作为分隔符的一部分:
:Tabularize /[a-z]*,/l0l1
使用逗号查找小写的任何名称。所有内容都左对齐,并且分隔的逗号后面至少有一个空格。
答案 4 :(得分:1)
我有类似的事情。我经常需要将逗号分隔的值转换为列:
a, b a,b,c a, b, c a, b, c ab,cd,ef ab, cd,ef ab,cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
使用:s/,\s*/, /g
准备值在逗号后面添加一个空格:
a, b a, b, c a, b, c a, b, c ab, cd, ef ab, cd, ef ab, cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
正在运行:Tab /,\zs \+/10
将其转换为:
a, b a, b, c a, b, c a, b, c ab, cd, ef ab, cd, ef ab, cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
现在我只需要弄清楚如何将它们变成可行的vmap
。
答案 5 :(得分:-1)
这是怎么回事:
%s/,/,\t/g