Loading ...
Sorry, an error occurred while loading the content.
 

Re: Fold according to keyword before fold mark?

Expand Messages
  • Adam Duck
    ... 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[
    Message 1 of 7 , Mar 1, 2010
      On 01.03.2010 16:29, fkater@... 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
    • fkater@googlemail.com
      Thanks so far -- as I am not too much into vim scripting it will take a little time for me to test it. But it looks very much what I d love to see working!
      Message 2 of 7 , Mar 1, 2010
        Thanks so far -- as I am not too much into vim scripting it will take
        a little time for me to test it.
        But it looks very much what I'd love to see working!
        Thank You so far
        Felix

        On Mar 1, 6:05 pm, Christian Brabandt <cbli...@...> wrote:
        > Hi!
        >
        > On Mo, 01 M r 2010, fka...@... wrote:
        >
        > > 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.
        >
        > Does that work:
        > #v+
        > fu! MyFL(lnum)
        >     if getline(a:lnum) =~ '{$'
        >         return 'a1'
        >     elseif getline(a:lnum) =~ '}$'
        >         return 's1'
        >     elseif getline(a:lnum) =~ '^[0-9/]\+$'
        >         return '1'
        >     elseif getline(a:lnum) =~ '^$'
        >         return '0'
        >     else
        >         return '='
        >     endif
        > endfu
        >
        > set fdm=expr foldexpr=MyFL(v:lnum)
        > #v-
        >
        > regards,
        > Christian
        > --
        > :wq

        --
        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
      Your message has been successfully submitted and would be delivered to recipients shortly.