Wednesday, November 21, 2012

Re: Auto folding ONLY on blocks starting from column 1

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