J’ai cet dataset 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 voir, les numéros sont formatés différemment et mal alignés. Y at-il un moyen dans vim d’aligner rapidement les colonnes correctement, de sorte que le résultat est 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 indices?
Si vous utilisez un système UNIX (Linux, etc.), vous pouvez le sortingcher et le filtrer via la commande column (1):
:%!column -t
Parfois, nous voulons seulement aligner deux colonnes. Dans ce cas, nous n’avons pas besoin de plug-ins et pouvons utiliser les fonctionnalités de Vim telles que:
=
. s/=/= ...spaces... /
dans la sélection visuelle pour cela. dw
et vertical. Exemple de cette technique démontré ci-dessous:
Je ne me trouve pas obligé d’aligner les choses assez souvent pour installer un autre plugin, donc c’était ma façon préférée d’y parvenir – surtout que cela ne nécessite pas beaucoup de reflection.
Comme le suggère sunny256, la commande column
est un excellent moyen de le faire sur les machines Unix / Linux, mais si vous voulez le faire dans Vim pur (pour pouvoir l’utiliser également dans Windows), le plus simple est d’installer le Aligner le plugin et ensuite faire:
:%Align , :%s/\(\s\+\),\s/,\1/g
La première ligne aligne les entrées sur les virgules et la seconde déplace la virgule pour qu’elle soit alignée sur la valeur précédente. Vous pouvez peut-être utiliser AlignCtrl
pour définir un mappage personnalisé qui fait tout en une fois, mais je ne me souviens plus comment l’utiliser …
modifier
Si cela ne vous dérange pas deux espaces entre les entrées et que vous voulez le faire en une seule commande, vous pouvez également faire:
:%Align ,\zs
C’est une excellente réponse en utilisant les macros vim: https://stackoverflow.com/a/8363786/59384 – en gros, vous commencez à enregistrer une macro, formatez la première colonne, arrêtez l’enregistrement puis répétez la macro pour toutes les lignes restantes.
Copié / collé à partir de cette réponse:
qa0f:w100i 19|dwjq4@a
Notez l’espace après le 100i, et les moyens “appuyez sur échapper” – 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 -- 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)
En outre, Tabularize est assez bon http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
également si vous avez de très longues colonnes, il peut être pratique de désactiver l’emballage par défaut
: définir maintenant :%! column -t
(note dans debian vous avez aussi une autre option pour la colonne -n si vous voulez diviser plusieurs délimiteurs adjacents)
Vous pouvez utiliser le plug- in csv.vim .
:%ArrangeColumn
Cependant, cela ne correspond pas exactement à ce que vous avez demandé: vous pouvez ajuster le contenu des cellules, alors que vos valeurs sont alignées par le point décimal ou par le premier chiffre.
Le plugin a beaucoup d’autres commandes utiles pour travailler avec des fichiers CSV.
Nous avons maintenant aussi le fabuleux plugin EasyAlign , écrit par junegunn.
GIF de démonstration de son README:
Assez vieille question, mais je me suis récemment servi d’un excellent plugin vim qui permet le formatage des tables à la volée ou après coup (comme votre cas d’utilisation l’exige):
Je viens d’écrire un tableau à cet effet. Installer avec
[sudo -H] pip3 install tablign
Ensuite, marquez simplement la table dans vim et faites
:'<,'>:!tablign
J’ai écrit un script python qui permet aux utilisateurs de regrouper de manière simple tout type de texte, même en dehors de vim. Vous ne savez pas si cela fonctionnera pour les utilisateurs Windows ou Mac.
columnice.py l’essentiel
Utilisation en vim.
:'<,'>!columnice =
Cela utilisera le signe égal comme délimiteur. Le séparateur n’est pas jeté si.