Monday, March 1, 2010

Re: Fold according to keyword before fold mark?

On 01.03.2010 16:29, fkater@googlemail.com wrote:
>> Have you checked vimoutliner?
>>
>> http://www.vimoutliner.org/
>>
> Very impressive -- it folds/unfolds to a given fold depth, however,
> the main aspect I am looking for is not covered by VimOutliner.
>
> I look for a way to fold/unfold ALL folds belonging to the same "type"
> of fold (indicated e.g. by a leading keyword before the fold mark), so
> see only those folds of interest.
>
> Felix
>
>
I think I have the thing you're looking for. I think it's from a vimtip
or something:

#v+

"
" Causes all comment folds to be opened and closed using z[ and z]
" respectively.
"
" Causes all block folds to be opened and closed using z{ and z}
respectively.
"

function FoldOnlyMatching(re, op)
mark Z
keepjumps normal gg
let s:lastline = -1
while s:lastline != line('.')
if match(getline(line('.')), a:re) != -1
exec 'normal ' . a:op
endif
let s:lastline = line('.')
keepjumps normal zj
endwhile
keepjumps normal 'Z
unlet s:lastline
endfunction

nnoremap <silent> z[ :call FoldOnlyMatching('/[*][*]', 'zo')<CR>
nnoremap <silent> z] :call FoldOnlyMatching('/[*][*]', 'zc')<CR>
nnoremap <silent> z{ :call FoldOnlyMatching('[ \t]*{', 'zo')<CR>
nnoremap <silent> z} :call FoldOnlyMatching('[ \t]*{', 'zc')<CR>

#v-

I've never tried ":call FoldOnlyMatching('Task1{', 'zo')<CR>" or so, but
it should work.

cu, Adam.

--
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

No comments:

Post a Comment