1

以下の表を 3 列目に並べ替えられないのはなぜですか?

列 1 は次のように並べ替えられ:sort /.*\%1v/ます。

Audi       ***     ****      **
BMW        *****   ***       *****
Mercedes   ****    *****     ***
Opel       ***     ***       *

列 2 も次のようにソートされ:sort /.*\%2v/ます。

BMW        *****   ***       *****
Mercedes   ****    *****     ***
Opel       ***     ***       *
Audi       ***     ****      **

しかし、列 3 は次のように並べ替えられません:sort /.*\%3v/

BMW        *****   ***       *****
Audi       ***     ****      **
Opel       ***     ***       *
Mercedes   ****    *****     ***

私は何を間違っていますか?

4

2 に答える 2

3

あなたは誤解にだまされています:\%vアトムは文字列を指定します (ただし、それらを一致として消費しません)。空白で区切られたテキスト/新聞や表の「列」と呼ばれるものに基づいて並べ替えたいと思います。

つまり、最初の例では、文字 B、A、O、および M で並べ替えます。2 番目は M、u、p、e であり、 's ではありません*(ロケールによっては、大文字が小文字の前に並べ替えられます)。

がある場合:set rulerは、現在の列が右下隅に表示されます。あなたの例では、3番目のテキスト列は位置20から始まるので、使用する必要があります

:%sort /.*\%20v/

3 番目のテキスト列で並べ替えます。

Vim の場合、仮想列とは画面の列を意味し、1 文字 (単一幅) が占める数によって測定されます。columnもあります。これは、文字の表現のバイト数を意味します (やや直感的ではありません)。この区別は、非 ASCII、非印刷可能、および<Tab>文字にとって重要です。

于 2013-09-21T19:58:47.027 に答える
2

あなたが間違っているのは、

**
*****
***
*

「仮想列」として。

「仮想列」は、単一セル幅の列です。

最初のスニペットでは、次の列が一致します。

\%1v  \%2v  \%3v

A     u     d
B     M     W
M     e     r
O     p     e

したがって、行はアスタリスクの数ではなくアルファベット順に並べられます。

アスタリスクの数で並べ替える次のコマンドを試しましたが、信頼できないようです。

:%sort /.*\%12c.*\%16c/
:%sort /.*\%20c.*\%24c/
:%sort /.*\%30c.*\%34c/
于 2013-09-21T20:12:58.093 に答える