пятница, 11 января 2008 г.

Фолдинг в vim

Не всегда удобно работать с цельным текстом (особенно если это какой-нибудь xml). Иногда удобно "свернуть" некоторые подробности текста (например, тело функции или цикл), что бы остальное смотрелось нагляднее. Как и у многих IDE, такая фича есть в vim'е. Называется она фолдинг (folding) и выглядит примерно так:

Для настройки фолдинга нужно как минимум разрешить его и указать метод определения границ сворачиваемого текста.

Метод indent означает, что границы будут определяться автоматически. Помимо этого метода есть еще:

  • manual - фолдинг выполняется только командами с явным указанием блоков текста;
  • expr - блоки разбиваются в зависимости от значения параметра foldexpr;
  • syntax - для определения блоков используется Syntax highlighting;
  • diff - работает только когда включена опция diff и автоматически определяет блоки, которые не изменялись;
  • marker - блоки вычисляются по существующим маркерам.

Для того, что бы отображать колонку с плюсами/минусами и иерархию блоков нужно установить опцию FOLDCOLUMN. Ее значения изменяются от 2 до 14. Если вложенность больше, чем значение этой опции - в колонке добавляются дополнительные цифры, указывающие уровень.

Когда блок свернут, возле плюса выводиться текст, значение которого задается параметром FOLDTEXT:

Параметр FOLDLEVEL позволяет автоматически сворачивать блоки на различных уровнях вложенности. Если этот параметр равен 0, то по умолчанию все блоки будут свернуты, если 1 - то будут свернуты все уровни кроме самого верхнего и т.д.

Осталось рассмотреть основные команды:
  • zo - открыть фолдер;
  • zO - открыть фолд рекурсивно;
  • zc - закрыть фолд;
  • zC - закрыть фолд рекурсивно;
  • za - если фолд открыт - закрыть, и наобород;
  • zA - то же, что и za, только рекурсивно;
  • zr - уменьшить уровень закрытых фолдов (FOLDLEVEL+=1);
  • zR - открыть все фолды;
  • zm - увеличить уровень закрытых фолдов (FOLDLEVEL-=1)
  • zM - закрыть все фолды.

Более подробное описание пожно получить у самого вима:

7 комментариев:

Yuri Volkov комментирует...

О, пасибочки, а то у меня все руки не доходили по фолдингу мануал почитать :-)

sash_ko комментирует...

Почитать навернно все же придется, потому что в самом простом случае (foldmethod=indent) фолды определяются не самым лучшим образом ;)

Анонимный комментирует...

А плагина точно не нада в .vmrc подключать? а то у меня не получилось почемуто.

sash_ko комментирует...

плагин точно не надо полключать, это фича вима, достаточно двух строчек:

:set foldenable
:set foldmethod=indent


у меня даже под виндой работает. попробуйте ввести это в командной строке.

ps: может вы прописали в .vmrc вместо .vimrc? :)

thekostya комментирует...

для perl что бы работал
set foldmethod=syntax
нужно также вставить
let perl_fold=1

NeonXP комментирует...

Спасибо. Давно хотел узнать, какие же там комбинации для фолдинга, да всё руки не доходили.
Сейчас на радостях даже прописал

" F3 - раскрыть/свернуть блок кода
nmap za
vmap zai
imap zai

в свой .vimrc

NeonXP комментирует...
Этот комментарий был удален автором.