Можно ли отобразить вложенные разделы в свернутом сгибе с помощью vim?

Когда в vim сворачивается сгиб, все вложенные заголовки скрываются, так что вы не можете видеть, что внутри. Мне любопытно, если кто-нибудь знает, возможно ли это или есть решение для foldtext функция (или с помощью другого метода), которая может отображать сечения внутри сгиба, когда сгиб сворачивается.

Я ищу что-то, что будет отображать складки, как это:

+ --   2000 TopSection1                                    " Fold Level 1
+ ---   500 TopSection1 : ChildSection1                    " Fold Level 2
+ ----   50 TopSection1 : ChildSection1 : BottomSection1   " Fold Level 3
+ ---   100 TopSection1 : ChildSection2 : BottomSection1   " Fold Level 2
+ --    500 TopSection2                                    " Fold Level 1
+ ---    25 TopSection2 : ChildSection1                    " Fold Level 2

Я копался, но не нашел способ сделать эту работу (или, если это возможно). Какие-либо предложения?

3 ответа

Следующая команда получает все строки сгиба без текста тела между:

:g/{{{/

Это работает для этого примера ниже, который содержит несколько вложенных сгибов с foldmethod = marker и меткой по умолчанию ({{{) mark:

Text 1/*{{{*/
some text here
subtext 1.1/*{{{*/
some text here
subsubtext 1.1.1/*{{{*/
some text here/*}}}*/
subsubtext 1.1.2/*{{{*/
some text here/*}}}*//*}}}*/
subtext 1.2/*{{{*/
some text here
subsubtext 1.2.1/*{{{*/
some text here/*}}}*/
subsubtext 1.2.2/*{{{*/
some text here/*}}}*//*}}}*//*}}}*/
Text 2/*{{{*/
some text here
subtext 2.1/*{{{*/
some text here
subsubtext 2.1.1/*{{{*/
some text here/*}}}*/
subsubtext 2.1.2/*{{{*/
some text here/*}}}*//*}}}*/
subtext 2.2/*{{{*/
some text here
subsubtext 2.2.1/*{{{*/
some text here/*}}}*/
subsubtext 2.2.2/*{{{*/
some text here/*}}}*//*}}}*//*}}}*/

После того, как вы запустите команду: g / {{{/, вы получите это:

Text 1/*{{{*/
subtext 1.1/*{{{*/
subsubtext 1.1.1/*{{{*/
subsubtext 1.1.2/*{{{*/
subtext 1.2/*{{{*/
subsubtext 1.2.1/*{{{*/
subsubtext 1.2.2/*{{{*/
Text 2/*{{{*/
subtext 2.1/*{{{*/
subsubtext 2.1.1/*{{{*/
subsubtext 2.1.2/*{{{*/
subtext 2.2/*{{{*/
subsubtext 2.2.1/*{{{*/
subsubtext 2.2.2/*{{{*/

Если вы хотите перенаправить результат в новый буфер, вы можете запустить:

:let @a='' | execute 'g/{{{/y A' | new | setlocal bt=nofile | put! a

Он дергает шаблон {{{для регистрации "a", открывает новый буфер и вставляет рег. Затем вам может понадобиться расширить результат с помощью zR если по умолчанию используется "сгиб коллапса".

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

Я использую обычные команды zr и zm, чтобы открыть и закрыть другой уровень сворачивания. Я согласен, что zr также будет показывать текст между уровнем сворачивания и подуровнем; следовательно, он не полностью отвечает на ваш вопрос. Похоже, что лучшим способом было бы использовать синтаксис foldmethod=, а затем отфильтровать все строки сгиба с помощью глобальной команды (g), основанной на регулярном выражении синтаксиса foldmethod.

Другие вопросы по тегам