Как я могу легко создавать и поддерживать таблицы?

28

Вот (часть) таблица, которую я использую в некоторой документации:

+---------------+------------------------+---------------------------------------+
| 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           |
+---------------+------------------------+---------------------------------------+

Проблема в том, что это очень неудобно для редактирования; если я изменю одну вещь, мне нужно (вручную) перестроить все, что является PITA

Есть ли более простые способы справиться с этим? Меня не интересует точный макет как таковой, но я хотел бы сохранить перенос 3-го столбца ...

Мартин Турной
источник
1
Кроме того, если это reStructuredText, вы можете рассмотреть его list-table(недавно я преобразовал много таблиц в это, потому что таблицы ascii трудно поддерживать и плохо
различаются

Ответы:

35

Я являюсь автором плагина vim-table-mode . Я потратил довольно много времени на создание и улучшение этого, особенно с обратной связью сообщества, и это точно соответствует этому варианту использования.

Короткий быстрый старт: вы входите в «табличный режим» с помощью :TableModeEnableкоманды, затем вы можете просто набрать:

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

А vim-table-mode автоматически позаботится о выравнивании для вас на лету, так что он будет выглядеть так:

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

При последующем редактировании таблицы vim-table-mode также позаботится о выравнивании за вас.

Вы можете выйти из «режима таблицы» с помощью :TableModeDisable.


Его суть в том, чтобы легко создавать таблицы, которые будут автоматически форматироваться при вводе. Он предлагает множество отображений для перемещения и манипулирования таблицами (особенно полезно <Leader>tdcудалить весь столбец). Все, что вам нужно сделать, это включить табличный режим, и он включится, и вы можете просто печатать, не беспокоясь о форматировании.

У него гораздо больше возможностей, чем показано здесь, например, возможность выравнивания столбцов по правому краю с небольшим указанием на заголовок. У этого также есть аккуратный механизм формул электронной таблицы, который позволяет определять формулы и выполнять вычисления как обычная электронная таблица.

Он создан, чтобы быть чрезвычайно гибким и настраиваемым, поэтому вы можете изменять несколько аспектов создаваемых таблиц и границ.

Я также создал несколько скринкастов, пытаясь продемонстрировать его силу. Этот скринкаст самый последний , но обратите внимание, что с тех пор было много улучшений.

Дхрува Сагар
источник
5
Благодарность; Я немного отредактировал ваш ответ, чтобы добавить некоторую практическую информацию об использовании (она читалась немного как рекламный ролик ранее) ... Одна вещь, которую я не смог сделать с vim-table-mode, - это перенос 3-го столбца как в примере на мой вопрос ... это возможно?
Мартин Турной
@Carpetsmoker спасибо за редактирование. Ну, вы можете обернуть его вручную, нет способа сделать это автоматически.
Дхрува Сагар
6

Если вы можете использовать sedи column, решение командной строки, которое будет близко, будет:

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

Вы можете комбинировать это с визуальным выбором '<,'>или с номерами строк.

Минусы:

  • Использует sedи column. Вим случайно. Эти sedкоманды , вероятно , могут быть изменены на VIM :substituteкоманд, но columnимеют решающее значение.
  • Разделители строк ( ---...-) дополняются, но у меня есть подозрения на его надежность.
  • Я не знаю, насколько это портативно $'\x01'.

Источники:

Мур
источник
Незначительные глюки в стороне (которые, вероятно, можно исправить), это выглядит многообещающе ... Единственное, чего я не могу сделать, так это обтекания 3-го столбца: - /
Martin Tournoij
5

Если вы не хотите устанавливать какие-либо плагины и хотите редактировать таблицы, сохраняя выравнивание:

- использовать встроенный режим VREPLACE , активированный с помощью gR.

(Убедитесь, что у вас установлена ​​последняя версия vim, и проверьте, скомпилирована ли она с +vreplaceфункцией, набрав vim --versionна терминале)

введите описание изображения здесь (моя строка состояния настроена так, чтобы показывать ЗАМЕНА для режимов ЗАМЕНА и ВИДА)

Если вы хотите узнать больше о режимах REPLACE и VREPLACE , проверьте эту статью .

rossijonas
источник
3

Я создал инструмент командной строки tablign для этой цели; это работает изнутри vim. Просто установите с

[sudo -H] pip3 install tablign

отметить таблицу в vim и вызвать

:'<,'>:!tablign

(vim заполняет первые несколько символов для вас, если вы пометили таблицу.)

Это не может сделать фиксированную ширину столбца, но это может быть добавлено, если возникнет такая необходимость.

введите описание изображения здесь

Нико Шлёмер
источник