begin end folding problem

24 views
Skip to first unread message

Ni Va

unread,
Jun 15, 2017, 4:29:32 PM6/15/17
to vim_use
Hi,


I'have got file content which is alike that:


BEGIN


SECTION


SECTION


SECTION


END


Would like to fold starting at SECTION line, ending at :
- line before second to last SECTION
- for the last SECTION, ending at line before END tag.

How can I do that ?
Thank you

John Passaro

unread,
Jun 15, 2017, 6:29:14 PM6/15/17
to vim...@googlegroups.com
If the text is literally as you describe:

:set foldmethod=manual or :set foldmethod=marker

gg  " go to beginning of file
3/SECTION  " takes you to the third SECTION
:1,-2fold       " creates a fold from first line to end of previous section
:.,$fold         " creates a fold from here to the end of the file

If you use foldmethod=manual, you'll have to use :session when exiting vim, otherwise the folds will be lost next time you open the file.

If you use foldmethod=marker, the markers will be stored directly in the text, which may or may not be acceptable for you depending on the nature of your document. This can be useful if you have a way to hide them from your audience (e.g. comment them out), or if your audience is willing to ignore them.

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Ben Fritz

unread,
Jun 16, 2017, 10:09:24 AM6/16/17
to vim_use

Using 'foldexpr' you can start a new fold at a given level by returning ">1", ">2", etc. See :help 'foldexpr' and :help fold-expr.

So your foldexpr function would return ">1" or similar for any line containing "SECTION" (probably using getline() to get the line text). Once you reach END, return 0. On other lines you can probably return "=".

Reply all
Reply to author
Forward
0 new messages