Выравнивание колонок в vim

Бывает, что сталкиваешься с такой вот табличкой:

Выравнивание в vim

Есть разные утилиты для выравнивания таблиц. Но обычно можно обойтись и без них — ведь наш файл и так открыт в vim, который умеет почти всё. Процесс выравнивания можно посмотреть на gif-анимации или mp4-видео.

Идея такая:

Поставить между столбцами достаточно пробелов, чтобы самый левый элемент из второго столбца был правее самого правого элемента из первого столбца. В рассматриваемом *.tex формате столбцы разделены знаком &, поэтому и используется замена вида :%s/&/          &/g. Количество пробелов зависит от длины ячеек таблицы.

Выделить пустой столбец в режиме блочного выделения по Ctrl + V. Затем сдвинуть всё правее выделения влево <. Повторить необходимое количество раз, нажав точку .. Так на видео и анимации выравнивается первый столбец. Это не самый быстрый вариант, а показан он для того, чтобы было понятнее, что происходит.

После выделения пустого столбца вместо <……. можно сделать 20<. Так выравниваются остальные столбцы на видео и анимации.

Около 5 лет назад я стал изучать vim, узнав, что он умеет работать со столбцами. До сих пор это одна из моих любимых и часто используемых способностей vim. Vim восхищает!
Выравнивание в column
Линуксовая утилита column поставляется в стандартном комплекте большинства дистрибутивов. Например, команда
column -t filename

выровняет колонки, используя пробел в качестве разделителя между столбцами. В нашем случае разделителем является амперсанд &. С помощью флага -s утилите column можно указать разделитель:
column -t -s ‘&’ filename

Получится качественное выравнивание, но сам знак разделителя исчезнет. Я не нашёл, как заставить column сохранять разделитель, поэтому решил сделать так:

добавить перед разделителем какой-либо символ, ни разу не встречающийся в таблице,
указать этот символ как разделитель для использования column.

Осуществить такое можно, например, с помощью потокового редактора sed. В качестве разделителя укажем #:
sed ‘s:&:#&:g’ filename | column -t -s ‘#’

Чтобы сделать это прямо из vim, можно воспользоваться синтаксисом :read !command, сокращённо :r!command:
:r!sed ‘s:&:#&:g’ % | column -t -s ‘#’

Чтобы vim не ругался, символ # пришлось предварить обратным слэшем. Однако, такая команда будет выравнивать весь файл, что не всегда желательно. Чтобы указать, какой диапазон строк надо выровнять, можно опять-таки использовать sed. Допустим, нам нужны строки только с 10 по 13. Тогда:
:r!sed -n 10,13p % | sed ‘s:&:#&:g’ | column -t -s ‘#’

PS
Для записи mp4-видео использовал программу peek. Очень проста и удобна в использовании. Она позволяет писать и gif, но у меня в анимации получались небольшие зависания, поэтому пользовался менее удобной консольной утилитой byzanz. Для показа нажимаемых клавиш использовал screenkey.
Если у вас есть предложения, как сделать этот процесс ещё короче, обязательно дайте знать в комментариях.