1

我的文字示例:

this is my text,this is,this is my text
this, this is my,this is my,this is text

我使用表格插件来对齐文本。

当我想在第一次和第二次出现单个空格时对齐时,'\s'我使用这些行:

Tabularize /^\(.\{-}\zs\s\)\{1}/l0
Tabularize /^\(.\{-}\zs\s\)\{2}/l0

但是我注意到第一个对齐添加空格是为了对齐,但是第二个对齐会受到这些额外空格的影响,并且不是正确的工作。

我怎样才能避免这种情况?
(我希望我说清楚了)

编辑:

这是我所期望的:

this  is   my text,this is,this is my aatext
this, this is my,this is my,this is rtext

这是结果:

this       is my text,this is,this is my aatext
this, this is my,this is my,this is rtext

编辑2:

这是我的示例,>= 2 个空格:

this  is my  text, this is,this  is my aatext
this,  this    is my, this is my,  this is rtext

改编 Nikita Kouevda 在他的回答中提出的代码:

Tabularize /\(^\(\(\S*\s\{2,}\)\{0}\|\(\S*\s\{2,}\)\{2}\)\)\@<=\S*\zs\s/l0

我期望:

this  is my  text, this is,this  is my aatext
this, this    is my, this is my, this is rtext

结果:

this  is my  text, this is,this  is my aatext
this, this                                     is my, this is my,  this is rtext
4

1 回答 1

1

我不熟悉 Tabular 并且可能有一个选项可以执行此操作,但我只需将第二个更改\s\s\+以匹配任意数量的空格:

Tabularize /^\(.\{-}\zs\s\+\)\{2}/l0

编辑:这是一个更合适的解决方案,将步骤合二为一:

Tabularize /\(^\(\S*\s\)\{,1}\)\@<=\S*\zs\s/l0

第一部分是匹配到第 0 个或第 1 个空格的后视,然后跳过任何非空白字符,并匹配下一个空格(分别为第 1 个和第 2 个)。这可以推广到任何范围;例如,要按第 2 到第 5 个空格对齐,请使用\{1,4}.

编辑:如果您需要通过一组在这个意义上不构成范围的空格对齐,我会在后视中使用逻辑 OR。不幸的是,这变得更加笨拙和重复。例如,按第一个和第三个空格对齐:

Tabularize /\(^\(\(\S*\s\)\{0}\|\(\S*\s\)\{2}\)\)\@<=\S*\zs\s/l0

为了以不同方式对齐每一列,请指定多种[lcr]#格式。请注意,每个分离和分离的列都被计算在内;例如,2 个空格对齐会导致 5 列将被格式化。为了通过第一个和第三个空格对齐,并右对齐文本的中间列:

Tabularize /\(^\(\(\S*\s\)\{0}\|\(\S*\s\)\{2}\)\)\@<=\S*\zs\s/l0l0r0l0l0

由于如果您指定的列数少于格式,则格式循环在l0l0r0这里也足够了,但明确表示可能是个好主意。

于 2013-06-19T17:17:05.913 回答