1

私のテキストの例:

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

Tabularプラグインを使用してテキストを整列させます。

単一のスペースの 1 番目と 2 番目の発生に合わせたい場合は、'\s'次の行を使用します。

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

しかし、最初の配置は配置するためにスペースを追加しますが、2番目の配置は追加されたこれらの余分なスペースの影響を受け、適切な仕事をしないことに気付きました.

どうすればこれを回避できますか?
(私は自分自身を明確にしたことを願っています)

編集:

これは私が期待したものです:

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に慣れていないので、これを行うオプションがあるかもしれませんが、任意の量の空白に一致させるために2番目\sを単に変更します:\s\+

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

編集:手順を1つにまとめた、より適切な解決策を次に示します。

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

最初の部分は、0 番目または 1 番目のスペースまで一致する後読みであり、空白以外の文字はすべてスキップされ、次のスペースが一致します (それぞれ 1 番目と 2 番目)。これは任意の範囲に一般化できます。たとえば、2 番目から 5 番目のスペースで揃えるには、 を使用します\{1,4}

編集:その意味で範囲を構成しない一連のスペースで整列する必要がある場合は、後読みで論理 OR を使用します。残念ながら、これはより不器用で反復的になります。たとえば、1 番目と 3 番目のスペースで揃えるには:

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

各列を異なる方法で配置するには、複数の[lcr]#形式を指定します。すべての分離および分離された列がカウントされることに注意してください。たとえば、スペースを 2 つ並べると、5 つの列が書式設定されます。1 番目と 3 番目のスペースで揃えて、テキストの中央の列を右揃えにするには:

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

列数よりも少ない数を指定するとフォーマットが循環するため、l0l0r0ここでも十分ですが、明示的に指定することをお勧めします。

于 2013-06-19T17:17:05.913 に答える