Comment créer et gérer facilement des tableaux?

28

Voici (une partie de) un tableau que j'utilise dans certains documents:

+---------------+------------------------+---------------------------------------+
| TASK NAME     | WHEN                   | DESCRIPTION                           |
+---------------+------------------------+---------------------------------------+
| db:seed       | On every update        | Data required for the application to  |
|               |                        | run; you should always be able to     |
|               |                        | safely execute this multiple times    |
|               |                        | for an update.                        |
| db:truncate   | Manually (dangerous!)  | TRUNCATE all tables but postal_codes  |
| postal_codes  | Once                   | Load the postal_codes table           |
+---------------+------------------------+---------------------------------------+

Le problème est que c'est très difficile à modifier; si je change une chose, je dois (manuellement) tout réaligner, ce qui est un PITA

Existe-t-il des moyens plus simples de gérer cela? Je ne m'inquiète pas de la disposition ci-dessus exacte en tant que telle, mais je voudrais garder l'habillage de la 3ème colonne ...

Martin Tournoij
la source
1
Un côté, si c'est reStructuredText, vous pourriez envisager de chercher list-table(récemment, j'ai converti de nombreuses tables en cela, car les tables ascii sont difficiles à maintenir et
diffèrent

Réponses:

35

Je suis l'auteur du plugin vim-table-mode . J'ai passé beaucoup de temps à construire et à améliorer cela, en particulier avec les commentaires de la communauté et cela correspond exactement à ce cas d'utilisation.

Un petit quickstart: Vous entrez en 'mode table' avec la :TableModeEnablecommande, vous pouvez alors simplement taper:

||
| MOVIE | QUOTE|
||
| Blade Runner | Like tears in the rain |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
||

Et vim-table-mode se chargera automatiquement de l'alignement pour vous à la volée, de sorte qu'il ressemblera à:

|-----------------------------------------+-------------------------------------------|
| MOVIE                                   | QUOTE                                     |
|-----------------------------------------+-------------------------------------------|
| Blade Runner                            | Like tears in the rain                    |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
|-----------------------------------------+-------------------------------------------|

Lors de l'édition ultérieure du tableau, vim-table-mode se chargera également de l'alignement pour vous.

Vous pouvez quitter le «mode table» avec :TableModeDisable.


Son cœur est de créer facilement des tableaux qui seront automatiquement formatés au fur et à mesure que vous tapez. Il propose de nombreux mappages pour se déplacer et manipuler des tableaux (un particulièrement utile consiste <Leader>tdcà supprimer une colonne entière). Tout ce que vous avez à faire est d'activer le mode tableau et ceux-ci démarrent et vous pouvez simplement taper sans vous soucier du formatage.

Il a beaucoup plus de fonctionnalités que celles affichées ici, comme la possibilité d'aligner à droite les colonnes avec un petit indice sur l'en-tête. Il dispose également d'un moteur de formule de feuille de calcul soigné qui permet de définir des formules et d'effectuer des calculs comme le ferait une feuille de calcul ordinaire.

Il est conçu pour être extrêmement flexible et configurable afin que vous puissiez modifier plusieurs aspects des tables et bordures qui sont créées.

J'ai également créé quelques screencasts essayant de montrer ses pouvoirs. Ce screencast est le plus récent , mais veuillez noter qu'il y a eu de nombreuses améliorations depuis.

Dhruva Sagar
la source
5
Merci; J'ai un peu modifié votre réponse pour ajouter des informations pratiques sur l'utilisation (elle se lisait un peu comme une annonce auparavant) ... Une chose que je n'ai pas pu faire avec vim-table-mode est l'habillage de la 3ème colonne comme dans l'exemple de ma question ... Est-ce possible?
Martin Tournoij
@Carpetsmoker merci pour la modification. Eh bien, vous pouvez l'envelopper manuellement, il n'y a aucun moyen de le faire automatiquement.
Dhruva Sagar
6

Si vous pouvez utiliser sedet column, une solution de ligne de commande qui se rapproche serait:

!sed 's/[- ]*\([+|]\)/'$'\x01''\1/g' | column -ts $'\x01' | sed '/^[-+ ]*$/s/ /-/g'

Vous pouvez combiner cela avec une sélection visuelle et / '<,'>ou avec des numéros de ligne.

Les inconvénients:

  • Utilise sedet column. Vim est accessoire. Les sedcommandes peuvent probablement être changées en :substitutecommandes vim , mais elles columnsont cruciales.
  • Les séparateurs de lignes ( ---...-) sont rembourrés, mais j'ai des doutes sur sa fiabilité.
  • Je ne sais pas comment portable $'\x01'.

Sources:

muru
la source
Mis à part les petits défauts (qui peuvent probablement être corrigés), cela semble prometteur ... La seule chose que je ne peux pas faire est cependant le bouclage de la 3ème colonne: - /
Martin Tournoij
5

Si vous ne souhaitez pas installer de plugins et que vous souhaitez éditer des tableaux en conservant l'alignement:

- utilisez le mode VREPLACE intégré , activé par gR.

(Assurez-vous que vous disposez de la dernière version de vim, et vérifiez si elle est compilée avec la +vreplacefonctionnalité, en tapant vim --versionsur le terminal)

entrez la description de l'image ici (ma ligne d'état est définie pour afficher REMPLACER pour les modes REMPLACER et VREPLACE)

Si vous souhaitez en savoir plus sur les modes REPLACE et VREPLACE , consultez cet article .

Rossijonas
la source
3

J'ai créé le tableau d' outils de ligne de commande à cet effet; cela fonctionne également depuis vim. Installez simplement avec

[sudo -H] pip3 install tablign

marquer la table dans vim et appeler

:'<,'>:!tablign

(vim remplit les premiers caractères pour vous si vous avez marqué le tableau.)

Il ne peut pas encore faire de largeur de colonne fixe, mais cela pourrait être ajouté si besoin est.

entrez la description de l'image ici

Nico Schlömer
la source