Tuesday, November 20, 2012

Re: Auto folding ONLY on blocks starting from column 1

Ben,


On 2012-11-21 07:20, Ben Fritz wrote:
> On Tuesday, November 20, 2012 1:48:55 PM UTC-6, Philip Rhoades wrote:
>>
>> On Nov 20, 2012; 8:01am, Ben Fritz wrote:
>> > On Monday, November 19, 2012 2:31:49 PM UTC-6, Philip Rhoades
>> wrote:
>>
>> >> I have been playing around with folding options in .vimrc but
>> can't
>> >>
>> >> work out how to do what I want which is:
>> >>
>> >> - Fold all blocks between the first line of the block and the
>> "end"
>> >>
>> >> line but ONLY only for those blocks whose first line starts at
>> >> column 1.
>> >>
>> >> Is this possible?
>> >>
>> >
>> > What do you mean by "block"? How do you know where it starts and
>> > ends? This should be fairly easy to do with a foldexpr.
>>
>>
>> Sorry, silly of me - I should have said when editing Ruby blocks eg:
>>
>> if (..)
>> .
>> .
>> end
>>
>> or
>>
>> tst = proc{ tarr
>> .
>> .
>> }
>>
>>
>
> First, it looks like this will fold more than you want, but just in
> case it
> is acceptable to you, have you tried the Ruby syntax folding?


Yes, I did look at that and yes it was too much.


> See :help ruby.vim for the options on Ruby syntax. Near the end are
> the
> folding options ruby_fold and ruby_no_comment_fold.
>
> If all you want is the specific blocks you mention, and if you're not
> too
> worried about being precisely correct, you could make a foldexpr
> which
> depends on not only the beginning of the match but also the end being
> in the
> first column. Something like:
>
> 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?

Thanks!

Phil.
--
Philip Rhoades

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

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