Folding is useful to hide away parts of the document. A visual representation of the folding structure as a tree would be useful for understanding the document structure at a glance.
1 Answer
You can use :set foldcolumn=<number>
to display a <number>
-wide column that tries to visualize fold levels. It would look something like this, by default (with a marker fold method, using {{{
and }}}
):
- {{{ Top Level Fold
|- {{{ Nested Fold
||- {{{ Deepest Fold
||| }}}
|| }}}
|- {{{ Another Nested Fold
|| }}}
| }}}
However, this consumes quite a lot of horizontal real-estate. Another method would be to write a custom foldtext()
implementation which reads the fold level with foldlevel()
and formats accordingly. This will waste less horizontal space, but won't really be as helpful for visually understanding the tree since you can't see the folds underneath a collapsed fold. For example, your .vimrc
:
set foldtext=CustomFoldText()
function! CustomFoldText()
let line = getline(v:foldstart) . "..."
return repeat("--| ", v:foldlevel) . line
endfunction
There are plugins that provide on-demand visualizations of the fold hierarchy, such as folddigest.vim, as well. They work, essentially, by parsing the fold level of every line, building up an appropriate data structure, and dumping a visualization of the data structure to a new buffer. You could probably adapt the technique to your own needs.
You may also want to look at plugins that provide "indent guides," such as this one. I've never personally used them, and I hear they cause some people performance issues since they generally involve generating lots of custom match highlights via matchadd()
, but your mileage may vary.