Можно ли отобразить вложенные разделы в свернутом сгибе с помощью 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.