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 voir, les nombres sont formatés différemment et mal alignés. Y a-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 génial de copier et coller des sections avec ctrl-v. Des indices?
:%!column -t -s ','
. Il supprime les virgules, donc ce ne sont plus des fichiers csv techniques. Mais les arrange magnifiquement, c'est ce dont j'avais besoin.:'<,'>!column -t
column
comme décrit dans l'article, 3) puis remplacer vos délimiteurs en espaces. Un exemple de commande en mode visuel pour l'étape 1 est:'<,'>s/"\(\w\+\) \(\w\+\)"/"\1_\2"/g
Parfois, nous voulons aligner seulement deux colonnes. Dans ce cas, nous n'avons besoin d'aucun plug-in et pouvons utiliser la fonctionnalité Vim pure comme ceci:
=
.s/=/= ...spaces... /
en sélection visuelle pour cela.dw
un mouvement vertical.Exemple de cette technique démontrée ci-dessous:
Je n'ai pas besoin d'aligner les choses assez souvent pour installer un autre plugin, c'était donc ma façon préférée de l'accomplir - surtout que cela ne nécessite pas beaucoup de réflexion.
la source
:s/=/ =/
il est préférable d'utiliserCtrl + V
pour sélectionner la colonne de droite, puis de l'aligner en utilisant<<
et.
pour répéter. Trouvé ici: stackoverflow.com/a/24704379/2152384Comme le suggère sunny256, la
column
commande est un excellent moyen de le faire sur les machines Unix / Linux, mais si vous voulez le faire en pur Vim (afin qu'il puisse également être utilisé sous Windows), le moyen le plus simple est d'installer Align plugin, puis faites:La première ligne aligne les entrées sur les virgules et la seconde déplace la virgule afin qu'elle affleure la valeur précédente. Vous pourrez peut-être utiliser
AlignCtrl
pour définir un mappage personnalisé qui fait tout en une seule fois, mais je ne me souviens jamais comment l'utiliser ...Éditer
Si cela ne vous dérange pas deux espaces entre les entrées et que vous souhaitez le faire en une seule commande, vous pouvez également faire:
la source
:'<,'>Align &
:%Align! lP0 \s
(l
= aligné à gauche,P0
= 0 remplissage après le séparateur).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.
Copier / coller à partir de cette réponse:
Notez le seul espace après le 100i, et le <Esc> signifie "appuyez sur échapper" - ne tapez pas "<Esc>" littéralement.
Traduction:
la source
De plus, Tabularize est assez bon http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
la source
Nous avons maintenant aussi le fabuleux plugin EasyAlign , écrit par junegunn.
GIF de démonstration de son README:
la source
Vous pouvez utiliser le plugin csv.vim .
Cependant, cela ne fera pas exactement ce que vous avez demandé: cela ajustera correctement le contenu des cellules, alors que vos valeurs seront alignées par la virgule décimale ou par le premier chiffre.
Le plugin a de nombreuses autres commandes utiles pour travailler avec des fichiers CSV.
la source
aussi si vous avez de très longues colonnes, il peut être pratique de désactiver le wrapping par défaut
(notez que dans Debian, vous avez également une autre option pour la colonne -n qui si vous voulez diviser plusieurs délimiteurs adjacents)
la source
Je viens d'écrire tablign à cet effet. Installer avec
Ensuite, marquez simplement la table dans vim et faites
la source
Question assez ancienne, mais je me suis récemment servi d'un excellent plugin vim qui permet le formatage de table à la volée ou après le fait (selon votre cas d'utilisation):
https://github.com/dhruvasagar/vim-table-mode
la source
Voici une réponse de script Vim pure, pas de plugins, pas de macros:
Il serait peut-être plus clair de commencer par la solution de mon problème comme exemple. J'ai sélectionné les lignes de code que je voulais affecter, puis j'ai utilisé la commande suivante (rappelez-vous que le passage en mode commande à partir du mode visuel ajoute automatiquement le préfixe «'<,'>», donc cela agit sur la plage visuelle):
Sauf que je n'ai PAS réellement tapé «<0d>». Vous pouvez saisir des caractères non imprimables sur la ligne de commande en appuyant sur ctrl-v, puis sur la touche que vous souhaitez saisir. «<0d>» est ce qui est rendu sur la ligne de commande après avoir tapé «ctrl-v enter». Ici, il est analysé par la commande «normal» comme sortie du mode de recherche «/». Le curseur passe alors à «valeur» dans la ligne courante.
Ensuite, nous supprimons simplement le reste de la ligne, passons à la colonne 70 (ou ce dont vous avez besoin dans votre cas), et [P] ut ce que nous venons de supprimer. Cela signifie que nous devons déterminer la largeur de la ligne la plus large, jusqu'à notre recherche. Si vous n'avez pas mis ces informations dans votre ligne d'état, vous pouvez voir la colonne du curseur en entrant la commande de mode normal 'g ctrl-g'. Notez également que passer à une colonne qui n'existe pas nécessite le paramètre «virtualedit»!
J'ai laissé le terme de recherche pour la commande: g (lobal) vide, car nous avons utilisé un bloc visuel et voulions affecter chaque ligne, mais vous pouvez le laisser en utilisant une sélection visuelle (et le «'<,'>») et mettre un terme de recherche à la place. Ou combinez une sélection visuelle et un terme de recherche pour affiner les choses plus finement / facilement.
Voici quelque chose que j'ai appris récemment: si vous vous trompez sur une commande de mode de commande complexe, annulez avec 'u' (si cela a affecté le tampon), puis appuyez sur «q:» pour entrer dans un tampon d'historique de commande spécial qui agit un peu comme un tampon conventionnel . Modifiez n'importe quelle ligne et appuyez sur Entrée, et la commande modifiée est entrée en tant que nouvelle commande. Indispensable si vous ne voulez pas avoir à vous soucier de tout formuler parfaitement du premier coup.
la source
J'ai écrit un script python qui permet aux utilisateurs de regrouper fondamentalement tout type de texte également en dehors de vim. Je ne sais pas si cela fonctionnera pour les utilisateurs Windows ou Mac.
columnice.py l'essentiel
Utilisation dans vim.
Cela utilisera le signe égal comme délimiteur. Le délimiteur n'est cependant pas jeté.
la source
J'ai ceci dans mon .vimrc.
Cela aligne les colonnes tout en conservant la virgule, ce qui peut être nécessaire plus tard pour une lecture correcte. Par exemple, avec Python Pandas
read_csv(..., skipinitialspace=True)
, merci les gars de Pandas pour cette option intelligente, sinon dans vim%s/,\s\+/,/g
. Cela peut être plus facile si vous avezcolumn
l'option --output-separator je suppose, mon ne le fait pas et je ne sais pas pourquoi (ma page de manuel pour la colonne indique 2004, sur ubuntu 18.04, je ne suis pas sûr que ubuntu obtiendra une nouvelle version) . Quoi qu'il en soit, cela fonctionne pour moi, et commentez si vous avez des suggestions.la source