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

Re: Auto folding ONLY on blocks starting from column 1

Expand Messages
  • Ben Fritz
    ... Sure, you can get the previous line with getline(v:lnum-1) or the next line with getline(v:lnum+1). Or you could mess with the foldtext option to adjust
    Message 1 of 7 , Nov 20, 2012
    • 0 Attachment
      On Tuesday, November 20, 2012 4:31:27 PM UTC-6, Philip Rhoades wrote:
      >
      > > fun! MyFoldBlocks()
      >
      > > if getline(v:lnum)=~'\v^(if|(\S&.*\{)|SomeOtherBlockBeginning)'
      >
      > > return ">1"
      >
      > > elseif getline(v:lnum)=~'\v^(end|\}|SomeOtherBlockEnding)'
      >
      > > return "<1"
      >
      > > else
      >
      > > return "="
      >
      > > endif
      >
      > > endfun
      >
      > > setl foldexpr=MyFoldBlocks() fdm=expr
      >
      >
      >
      >
      > This nearly does what I want but I want the first (and maybe the last
      >
      > line?) of the block visible eg:
      >
      >
      >
      > if ..)
      >
      > folded
      >
      > end
      >
      >
      >
      > since the actual blocks can get quite large and I just want to see the
      >
      > overall logic. I guess that means doing something with lnum?
      >
      >
      >

      Sure, you can get the previous line with getline(v:lnum-1) or the next line with getline(v:lnum+1).

      Or you could mess with the 'foldtext' option to adjust what gets displayed when you fold stuff away.

      --
      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
    • Philip Rhoades
      Ben, ... It took me a while to work out how to use foldtext (I have found this problem in the past - the Vim docs are good but are like man pages - short on
      Message 2 of 7 , Nov 21, 2012
      • 0 Attachment
        Ben,


        On 2012-11-21 13:40, Ben Fritz wrote:
        > On Tuesday, November 20, 2012 4:31:27 PM UTC-6, Philip Rhoades wrote:
        >>
        >> > fun! MyFoldBlocks()
        >> > if getline(v:lnum)=~'\v^(if|(\S&.*\{)|SomeOtherBlockBeginning)'
        >> > return ">1"
        >> > elseif getline(v:lnum)=~'\v^(end|\}|SomeOtherBlockEnding)'
        >> > return "<1"
        >> > else
        >> > return "="
        >> > endif
        >> > endfun
        >>
        >> > setl foldexpr=MyFoldBlocks() fdm=expr
        >>
        >>
        >> This nearly does what I want but I want the first (and maybe the
        >> last
        >> line?) of the block visible eg:
        >>
        >> if (..)
        >> folded
        >> end
        >>
        >> since the actual blocks can get quite large and I just want to see
        >> the
        >> overall logic. I guess that means doing something with lnum?
        >
        >
        > Sure, you can get the previous line with getline(v:lnum-1) or the
        > next line with getline(v:lnum+1).
        >
        > Or you could mess with the 'foldtext' option to adjust what gets
        > displayed when you fold stuff away.


        It took me a while to work out how to use foldtext (I have found this
        problem in the past - the Vim docs are good but are like "man" pages -
        short on examples). So I now have:

        fun! MyFoldBlocks()
        if getline(v:lnum)=~'\v^(class|for|if|while|([a-z0-9][a-b0-9\
        _].*\{))' "inc escaped space + tab
        return ">1"
        elseif getline(v:lnum)=~'\v^(end|\}|SomeOtherBlockEnding)'
        return "<1"
        else
        return "="
        endif
        endfun

        set foldtext=getline(v:foldstart)
        setl foldexpr=MyFoldBlocks() fdm=expr

        - my change to prevent folding on comments with '#' in col 1 worked but
        is not so elegant?

        I didn't have much success with getline(v:lnum+1) but
        foldtextresult({lnum}) also looks like it might offer some
        possibilities?

        Anyway, everything is working exactly how I want it to now so thanks
        very much!

        Regards,

        Phil.
        --
        Philip Rhoades

        GPO Box 3411
        Sydney NSW 2001
        Australia
        E-mail: phil@...

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