2013-06-19 42 views
1

我的文字例如:如何避免第二次校準受第一次校準的影響?

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

我用Tabular插件對齊文本。

當我想在第一次和一個空格'\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 

EDIT2:

這是我的例子與> = 2位:

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

適應在他的回答下面尼基塔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 
+0

您是否介意提供一些樣本,以顯示與目標輸出相比現在正在執行的操作? –

+0

@Denomales當然,完成:) – Reman

回答

1

我不熟悉的表格,並有可能做到這一點的選擇,但我會簡單地改變第二\s\s\+以匹配空白的任何金額:

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

編輯:這裏的更適當的解決方案,結合的步驟到一個:

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

第一部分是匹配到第0或第一空間中的回顧後,任何的非空白字符,然後跳過,並且下一個空間匹配(第一和第二,分別ELY)。這可以推廣到任何範圍;例如按第2個到第5個空間對齊,使用\{1,4}

編輯:如果您需要通過一組空間來對齊,那麼這個空間不會構成這個範圍,我會在lookbehind中使用邏輯或。不幸的是,這變得更加笨拙和重複。例如,要由所述第一和第三空間對齊:

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也就夠了這裏,但它的可能是明確的一個好主意。

+0

不,這不是我想要的。我只想對齊單個空格。 – Reman

+0

我不確定你的意思;我建議的輸出與您的預期輸出相匹配。 –

+0

是的,在我的簡單示例中,輸出結果與我的答案一樣,但它不會退出我的問題的解決方案。您的代碼也會將字段與多於1個空格對齊。我如何才能將字段與修正號碼對齊。的空間?但是...如果沒有更好的解決方案,我會使用你的。 :) – Reman