10

これは私のコードです:

john,betty,wally,beth 
walter,george,thomas,john
herbert,bob,petty,mick`

VIMの表形式プラグインを使用してこれに合わせる方法を知っている人はいますか?

john,    betty,  wally,  beth
walter,  george, thomas, john
herbert, bob,    petty,  mick

Align Pluginでこれを行う方法は知っていますが、Tabularでどのように機能するかを知ることができません。

4

6 に答える 6

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 /[^,]\+,は適切に機能せず、2倍のスペースが生成されました。

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を理解するのに役立つことを願っています!

于 2011-03-26T02:52:43.493 に答える
13
Tabularize /,\zs

見る:help \zs

前のパターンは機能しないので、これを試してください:

Tabularize /[^,]\+,
于 2011-03-25T18:54:17.503 に答える
6

ライモンディの答えに基づいて、

:Tabularize /,\zs/l0r1

私にはもっと理にかなっており、それはたった1つのコマンドでもあります:-)。

l0r1、左のパディングに0スペース、右のパディングに1スペースで左揃えを意味します。

于 2013-07-08T21:47:45.977 に答える
1

別のオプションは、名前をカンニングして区切り文字の一部として使用することです。

:Tabularize /[a-z]*,/l0l1

カンマ付きの小文字の名前を検索します。すべてが左揃えになり、区切られたコンマの後に少なくとも1つのスペースが続きます。

于 2012-03-30T08:53:25.473 に答える
1

似たようなことをしています。定期的にカンマ区切りの値を列に変換する必要があります。

a、b
a、b、c
a、b、c
a、b、c
ab、cd、ef
ab、cd、ef
あいうえお
あいうえお

ジョン、ベティデイビス、ウォリー、ベス
ウォルター、ジョージ、トーマス、ジョン
ハーバート、ボブ、ペティ、ミック

値を:s/,\s*/, /g準備して、コンマの後に1つのスペースを追加します。

a、b
a、b、c
a、b、c
a、b、c
ab、cd、ef
ab、cd、ef
あいうえお
あいうえお

ジョン、ベティデイビス、ウォリー、ベス
ウォルター、ジョージ、トーマス、ジョン
ハーバート、ボブ、ペティ、ミック

実行:Tab /,\zs \+/10すると、それらは次のようになります。

a、b
a、b、c
a、b、c
a、b、c
ab、cd、ef
ab、cd、ef
あいうえお
あいうえお

ジョン、ベティデイビス、ウォリー、ベス
ウォルター、ジョージ、トーマス、ジョン
ハーバート、ボブ、ペティ、ミック

今、私はそれらを機能するものに変える方法を理解する必要がありますvmap

于 2013-02-11T21:15:02.253 に答える
-1

そしてこれはどうですか:

%s/,/,\t/g
于 2011-03-25T19:18:57.990 に答える