141

このデータセットはcsvファイルにあります

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917

ご覧のとおり、数値の形式が異なり、位置がずれています。結果がこれになるように、vimで列を適切にすばやく整列させる方法はありますか

1.33570301776,  3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828,  0.010352,   0.0102677,  0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804,  0.0133687,  0.010329,   0.00163437, 0.00191202, 0.0134425 
1.34538754675,  3.3689e-06,  9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657,  0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917

ctrl-v でセクションをコピー アンド ペーストすると便利です。ヒントはありますか?

4

13 に答える 13

290

ある種の UNIX (Linux など) を使用している場合は、column(1) コマンドを使用してごまかすことができます。

:%!column -t

上記は間違った文字列リテラル内の区切り文字を解析するため、前処理手順とこのファイルの区切り文字の指定が必要になる可能性があります。たとえば、次のようになります。

%!sed 's/","/\&/' | column -t -s '&'
于 2009-08-04T21:03:41.093 に答える
25

suny256が示唆しているように、このcolumnコマンドはUnix / Linuxマシンでこれを行うための優れた方法ですが、純粋なVimで(Windowsでも使用できるように)実行する場合は、Alignをインストールするのが最も簡単な方法です。プラグインしてから:

:%Align ,
:%s/\(\s\+\),\s/,\1/g

最初の行はエントリをコンマに揃え、2番目の行はコンマを移動して前の値と同じ高さにします。一度にすべてを実行するカスタムマッピングを定義するために使用できるかもしれませんがAlignCtrl、それを使用する方法を思い出せません...

編集

エントリ間の2つのスペースを気にせず、1つのコマンドでこれを実行したい場合は、次のことも実行できます。

:%Align ,\zs
于 2009-08-05T07:18:06.223 に答える
10

これは vim マクロを使用した優れた回答です: https://stackoverflow.com/a/8363786/59384 - 基本的に、マクロの記録を開始し、最初の列をフォーマットし、記録を停止してから、残りのすべての行に対してマクロを繰り返します。

その回答からコピー/貼り付け:

qa0f:w100i <Esc>19|dwjq4@a

100i の後の 1 つのスペースと、<Esc> は「プレス エスケープ」を意味することに注意してください。「<Esc>」を文字どおりに入力しないでください。

翻訳:

qa         -- record macro in hotkey a
0          -- go to beginning of line
f:         -- go to first : symbol
w          -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19|        -- go to 19th column (value 19 figured out manually)
dw         -- delete spaces until : symbol
j          -- go to next line
q          -- stop recording macro
4@a        -- run the macro 4 times (for the remaining 4 lines)
于 2014-06-05T16:42:13.553 に答える
9

また、Tabularize は非常に優れていますhttp://vimcasts.org/episodes/aligning-text-with-tabular-vim/

于 2014-01-06T16:16:05.773 に答える
3

この目的のためにtablignを書きました。でインストール

pip3 install tablign --user

次に、vimでテーブルをマークして実行します

:'<,'>:!tablign

ここに画像の説明を入力

于 2018-02-12T17:55:55.543 に答える
1

かなり古い質問ですが、最近、オンザフライまたは事後 (ユースケースの必要に応じて) でテーブルの書式設定を可能にする優れた vim プラグインを利用しました。

https://github.com/dhruvasagar/vim-table-mode

于 2015-10-05T19:27:58.043 に答える