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
    • 0 Attachment
      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
    • 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 2 of 7 , Mar 1, 2010
      • 0 Attachment
        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
      • Christian Brabandt
        Hi! ... Does that work: #v+ fu! MyFL(lnum) if getline(a:lnum) =~ {$ return a1 elseif getline(a:lnum) =~ }$ return s1 elseif getline(a:lnum) =~
        Message 3 of 7 , Mar 1, 2010
        • 0 Attachment
          Hi!

          On Mo, 01 Mär 2010, fkater@... 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
        • 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 4 of 7 , Mar 1, 2010
          • 0 Attachment
            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.