Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Выравнивание по ширине

Привет, коллеги. Мы уже обсуждали форматирование текста в Вим, включая и выравнивание: по левому краю, по правому, по центру. Четвертый вид выравнивания — по ширине — остался за кадром. Дело в том, что здесь надо менять текст в строке, подставлять пробелы — и встроенных средств для этого в Вим нет. Однако есть плагин, идущий в поставке: иными словами, он у вас уже есть. Включите его: :packadd justify Можно включить его в .vimrc и тогда он всегда будет под рукой. Плагин определяет функцию Justify, которая выравнивает строку, на которой вызвана через call, по ширине, добавляя пробелы. Команда call может принимать диапазон: так можно выровнять много строк сразу. Функция может получать аргументы. Первый определяет ширину текста; если он опущен, то используется опция textwidth, а если она нуль, то берется значение 80. Еще допускается значение 'tw' или пустая строка: это означает использование опции и нужно, чтобы задать второй аргумент. Второй аргумент задает максимальное число пробелов,

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

Однако есть плагин, идущий в поставке: иными словами, он у вас уже есть. Включите его:

:packadd justify

Можно включить его в .vimrc и тогда он всегда будет под рукой.

Выровнял кусок текста. В кадр попало сокрытие текста: Вим заменил некоторые команды ТеХ на соответствующие Юникодные символы.
Выровнял кусок текста. В кадр попало сокрытие текста: Вим заменил некоторые команды ТеХ на соответствующие Юникодные символы.

Плагин определяет функцию Justify, которая выравнивает строку, на которой вызвана через call, по ширине, добавляя пробелы.

Команда call может принимать диапазон: так можно выровнять много строк сразу.

Функция может получать аргументы. Первый определяет ширину текста; если он опущен, то используется опция textwidth, а если она нуль, то берется значение 80. Еще допускается значение 'tw' или пустая строка: это означает использование опции и нужно, чтобы задать второй аргумент.

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

Третий аргумент определяет отступы. По умолчанию отступы сохраняются. То же при отрицательном значении параметра или если дана пустая строка. Положительное значение предписывает сделать соответствующий отступ. Значение 0, соответствующее выравниванию по левому краю, надо задавать как текст (в кавычках).

Можно задавать "единицу измерения", sw или ts (это значения опций shiftwidth или tabstop). Как текст, конечно. Например, так:

call Justify('', '', '5sw')

Здесь '' — это две одиночные кавычки, а не одна двойная.

Вызов функции не так удобен, как хотелось бы, поэтому определена команда :Justify. Она может принимать диапазон строк и аргументы (они передаются функции без изменения). Вот определение, прекрасный пример к заметке про :команды, которая недавно вышла:

command! -range -nargs=* Justify <line1>,<line2>call Justify(<f-args>)

Просто пишите :Justify или :Justify 100 или :Justify '' 4

И диапазон можно задавать.

Но есть и дальнейшие упрощения: привязка _j. В нормальном режиме вызывается Justify для всего текста с ограничением в 4 пробела:

nmap _j :%call Justify('tw',4)<CR>

Для выделения, естественно, выравниваются выделенные строки (есть своя привязка).

Есть еще привязка ,gq, которая форматирует строки и "отжимает" лишние пробелы, готовя текст для выравнивания. Применяется ко всему тексту или к выделению. Помните, что нажимать эти три символа надо быстро. Если делать паузы, то привязка не сработает.

Вы можете посмотреть код и документацию в файле
$VIMRUNTIME/dist/opt/justify/plugin/justify.vim

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022