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

Рубрика "Секреты Вим". Фолдинг по меткам в тексте

Привет, коллеги. Продолжаем обсуждать тонкости фолдинга. Помимо ручного, есть еще фолдинг по синтаксису, отступам и прочему, в том числе и по указанному вами выражению (ваши правила), а сегодня обсудим метки в тексте. Вы можете поместить в текст указания Виму свернуть данный блок строк в фолд. Либо Вим это может сделать за вас. Если речь про язык программирования, то эти метки могут спрятаться в комментариях. Если это текст, то сложнее, но их всегда можно убрать одной командой, когда понадобится. Когда это удобно? Если у вас нет почему-то фолдинга по синтаксису, или если вы работаете с обычным текстом и хотите скрыть какие-то абзацы: тогда просто маркируете "от сих" "до сих" и Вим сделат остальное за вас. Итак, выставляем foldmethod=marker Метки обычно имеют вид {{{ и }}} и, соответственно, открывают из закрывают фолд. Есть два стиля: "скобочный", когда указанные тройки скобок работают как открывающая и закрывающая скобки, и с прямым указанием уровня фолда. Первый способ просто начин

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

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

Когда это удобно? Если у вас нет почему-то фолдинга по синтаксису, или если вы работаете с обычным текстом и хотите скрыть какие-то абзацы: тогда просто маркируете "от сих" "до сих" и Вим сделат остальное за вас.

Итак, выставляем foldmethod=marker

Метки обычно имеют вид {{{ и }}} и, соответственно, открывают из закрывают фолд. Есть два стиля: "скобочный", когда указанные тройки скобок работают как открывающая и закрывающая скобки, и с прямым указанием уровня фолда.

Первый способ просто начинает фолд от {{{ и заканчивает на парной }}}. Вложенные фолды имеют уровень выше, потому что они вложенные: так и должно быть.

Открывать и закрывать фолды можно как обычно: zo и zc. Команды zO и zC открывают и закрывают все фолды насквозь, включая и вложенные.

Второй способ: прямо указать уровень фолда: {{{1 и }}}1. При этом действуют логичные правила: если стоит {{{ с тем же или меньшим номером, начинается новый фолд указанного уровня. Если с большим номером, образуется вложенный фолд.

Закрывающая скобка }}} нужна только для закрытия последнего фолда, если вы не до конца файла все разметили. Она может иметь номер, а может и не иметь: в этом случае она понижает уровень на единицу. А если номер указать, то до соответствующего уровня всё и закончится.

Метки с номерами удобны в больших фолдах, например, главах книги. Вы можете просто ставить {{{1 у глав, {{{2 у параграфов, {{{3 у пунктов, и всё будет работать, и не надо следить за закрывающими скобками.

Например, сделайте команду
:%s\\chapter.*\zs/ %{{{1
и у вас все главы красиво свернутся. Аналогичную операцию можно проделать с section и так далее, свернув диссертацию в компактное содержание.

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

Вим использует опцию commentstring, которая описывает, как устроены комментарии. Используется она только для фолдинга и по умолчанию содержит /*%s*/. Символ %s заменяется на метку, а остальное - комментарий. По умолчанию, как видим, это Си.

Поменяем для ТеХ: set commentstring=\%%s

Есть недостаток: пробелы между концом строки и началом метки не ставятся. Вручную поставьте, несложно.

Создал вручную фолд от plank's до planking's в стиле ТеХ: с комментариями от % до конца строки.
Создал вручную фолд от plank's до planking's в стиле ТеХ: с комментариями от % до конца строки.

Аналогично метки удаляются при удалении фолда. Напомню, что создается фолд командой zf (после нее движение или перед ней выделите текст), а удаляются командой zd, и удаление фолда не удаляет текст в нем: это чисто косметическое действие.

Вы можете изменить текст метки, указав открывающую и закрывающую через запятую в опции foldmarker. По умолчанию там {{{,}}}. Это текст, не регулярное выражение. Менять его не рекомендуется, чтобы не ломать совместимость, но если вы ни с кем не меняетесь файлами, то можете. Это бывает надо, если вы получили файл из другого редактора, который тоже так умеет.

Отличная вещица, коллеги!

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