Привет, коллеги. Иногда приходится работать со списками, в которых есть несколько уровней вложенности. Планы, классификации, оглавления, код на Питоне и т.п. Вроде такого:
1. Глава 1.
1.1 Параграф 1
1.1.1 Вот
1.1.2 И вот
1.2 Параграф 2
2. Глава 2.
2.1 Еще параграф
2.2.1 Тут что-то
2.2.2 И тут
2.2 И еще один параграф
Что нам нужно от Вима? Чтобы сворачивал пункты по вложенности и расставлял отступы. Он это умеет; вот это и обсудим.
Начнем с отступов. Выставим
:set autoindent
и Вим будет сохранять отступ на новой строке. Если надо увеличить или уменьшить отступ, используйте >> и <<.
Теперь выставим метод фолдинга (сворачивания строк текста) по отступам:
:set foldmethod=indent
Зададим отступ:
:set shiftwidth=4
Теперь каждые 4 пробела сдвигают вложенность на один уровень. Команда
:set foldlevel=n
задает уровень вложенности, выше которого все фолды закрываются. Задайте foldlevel=0 и все пункты, кроме верхних, закроются.
Можете задать колонку слева, в которой будут видны открытые и закрытые фолды:
:set foldcolumn=1
Далее можно открыть/закрыть новый уровень, задав foldlevel, либо открывать/закрывать отдельные фолды: щелкая мышкой по + или - в колонке слева, или командами:
- zo открывает фолд,
- zc закрывает фолд,
- zO открывает фолд и все вложенные,
- zC закрывает фолд и все вложенные.
- za и zA открывают закрытое и закрывают открытое, одиночный фолд или вместе с вложенными.
Можно менять foldlevel командами zm (уменьшает на 1), zM (уменьшает до нуля, закрыв все фолды), zr (увеличит на 1), zR (увеличит до максимума, открыв все фолды).
Учитывая, что обычно терминал позволяет переходить по ссылкам в тексте, можно делать очень полезные для себя штуки. Можно и вообще книгу писать, только соблюдая отступы (а Вим их поможет соблюдать). А ведь можно же всю эту красоту в HTML сконвертировать, с сохранением открываемых фолдов, что вообще классно.
Да, в ТеХе фолдинг по синтаксису отлично работает, там такие тонкости ни к чему, но есть много задач, где эта техника может и пригодиться.
Все указанные команды можно записать в файл и вызывать его через :source когда надо, заодно и привязать z-команды к удобным клавишам.
Удачи, коллеги.