The following foldexpr is giving me headaches because it doesn't work
under all circumstances:
fun! s:outlinerFoldingRule(n)
  return getline(a:n) =~ '^\s*:' ?
        \ 20 : indent(a:n) < indent(a:n+1) ?
        \ ('>'.(1+indent(a:n)/&l:tabstop)) : (indent(a:n)/&l:tabstop)
endf
fun! Outliner()
  setlocal autoindent
  setlocal formatoptions=tcqrn1jo
  setlocal comments=fb:*,fb:-,b::
  setlocal textwidth=80
  setlocal foldmethod=expr
  setlocal foldexpr=s:outlinerFoldingRule(v:lnum)
  setlocal foldlevel=2
  let &l:tabstop=4
  let &l:shiftwidth=4
  let &l:softtabstop=4
endf
Sample text (copy and paste in a new buffer):
1 Title
    1.1
        : Note 1
        : Some note
        1.1.1
            1.1.1.1
                : Note 2
                : Some note
            1.1.1.2
        1.1.2
            1.1.2.1
After :call Outliner(), za folds/unfolds all sections, except for notes.
If I give zR then everything folds/unfolds as expected. But then, if I add
a section (say, 1.1.3) then things go nuts: for example, za on 1.1.2 folds
1.1 instead of 1.1.2. In other cases, I get "No fold found" errors.
Call Outliner() again and press zR, and everything is fine again (until
the next modification). What's wrong with the code above?
Nicola
-- 
-- 
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.
Thursday, March 31, 2016
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment