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