февраля 18, 2009

Сворачиание текста. (Folding)

В современных Delphi IDE есть такая возможность как сворачивание участка кода при помощи {$REGION '<Name>'} ... {$ENDREGION}. Это очень удобная фича и вим ее поддерживает.

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

В простейшем случае делаем следующее
1) Переходим в line visual-mode (Shift-v).
2) Выделяем нужный участок кода (при помощи j/k)
3) Набираем zf

Сладка создана. Раскрыть ее - zo, закрыть - zc. Если набираете za, то состояние сладки меняется на противоположное. zd - удалить складку. zj/zk - переместиться до первой вкладки вниз/вверх.

Еще создать складку можно командой zf{motion}. К примеру, zf} свернет абзац.

В общем-то, вот и вся теория, остались некоторые мелочи.

Маркеры
Недостаток того, что мы только что сделали - складка не сохраняется при закрытии файла. Поэтому, перед тем, как создавать вкладки, нужно включить опцию
:set fdm=marker
Эта опция включает создание маркеров в начале и конце складок. По умолчанию маркеры имеют вид
/* {{{ */
blablabla
/* }}} */
Что для паскалиста не есть гуд. Для установки правильных комментариев нужно набрать что-нибудь из
:set commentstring={%s}
:set commentstring=(*%s*)
:set commentstring=//%s
на собственный вкус. Далее, {{{ и }}} выглядят очень неуклюже, исправляется это командой
:set foldmarker=<<<,>>>
Если вам нравится дельфи-стиль, то наберите
:set foldmarker=$REGION\ ',$ENDREGION
На самом деле, маркеры должны настраиваться из файла синтаксиса (во всяком случае, для многих языков настраиваются автоматически), и видна очередная недоработка касательно паскаля в виме.

Можно создавать вложенные друг в друга сладки.

Кроме того, можно установить способ вычисления текста, который будет написан на свернутой складке. По умолчанию - это слова в строчке, где расположен первый маркер. Чтобы установить свое выражение для вычисления функции, нужно определить опцию

:set foldtext=...

И не забывайте про :help fold.

PS
Кстати, кто знает как фолдинг делается в блоггере? (Типа как lj-cut в жж.)


Комментариев нет:

Отправить комментарий

Постоянные читатели

Обо мне

Моя фотография
Мой e-mail: vitek_03(at)mail(dot)ru