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: [email protected]
--
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