143 votes

reformater dans vim pour une belle mise en page de colonne

J'ai cet ensemble de données dans un fichier 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
 

Comme vous pouvez le constater, les nombres sont formatés différemment et mal alignés. Existe-t-il un moyen dans vim d’aligner rapidement les colonnes correctement, de sorte que le résultat soit le suivant?

 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
 

Ce serait bien de copier et coller des sections avec ctrl-v. Des allusions?

295voto

sunny256 Points 3262

Si vous êtes sous UNIX (Linux, etc.), vous pouvez tricher et le filtrer à l'aide de la commande column (1):

 :%!column -t
 

25voto

DrAl Points 29528

Comme sunny256 suggéré, l' column de commande est un excellent moyen de le faire sur Unix/Linux, mais si vous voulez le faire dans le plus pur Vim (de sorte qu'il peut être utilisé dans Windows), le plus simple est d'installer l' Aligner plugin et ensuite il faut faire:

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

La première ligne permet d'aligner les entrées sur les virgules et le second se déplace la virgule de sorte qu'il soit de niveau avec la valeur précédente. Vous pouvez être en mesure d'utiliser AlignCtrl de définir une cartographie personnalisés qui ne l'ensemble du lot d'un seul coup, mais je ne me souviens jamais comment l'utiliser...

Modifier

Si vous n'avez pas l'esprit de deux espaces entre les entrées et vous souhaitez le faire en une seule commande, vous pouvez également le faire:

:%Align ,\zs

11voto

zcrar70 Points 1381

C'est une excellente réponse à l'aide de vim macros: http://stackoverflow.com/a/8363786/59384 - en fait, vous commencez l'enregistrement d'une macro, le format de la première colonne, arrêter l'enregistrement, puis répétez la macro pour toutes les lignes restantes.

Copié/collé de cette réponse:

qa0f:w100i <Esc>19|dwjq4@a

Note le seul espace après la 100i, et les moyens "appuyez sur echap"--ne tapez pas "" littéralement.

Traduction:

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)

9voto

slf Points 15327

4voto

Amos Folarin Points 353

aussi si vous avez de très longues colonnes, il peut être utile de désactiver le wrapping par défaut

: mettre maintenant
:%! colonne-t

(notez dans debian que vous avez également une option supplémentaire pour la colonne -n, qui vous permet de scinder plusieurs délimiteurs adjacents)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X