Simplifying Vim folding


#1

G’day folks,

I was planning on simplifying the default folding provided when
foldmethod=syntax.

Currently pretty much everything is folded but I was planning on
reducing this to just module/class/method definitions, multi-line
comments and END data chunks, with an option to disable comment
folding.

We could, of course, make this ‘infinitely’ configurable but I see
little point. Is anyone particularly enamoured with having their
multi-line regexes folded? :wink:

Any thoughts appreciated…

Thanks,
Doug


#2

On 5/10/06, Doug K. removed_email_address@domain.invalid wrote:

We could, of course, make this ‘infinitely’ configurable but I see
little point. Is anyone particularly enamoured with having their
multi-line regexes folded? :wink:

Enamoured? No. But there are things that I really like being folded –
multi-line hash definitions (I wish it extended to multiline array
definitions).

All in all, I’m mostly happy with the state of folding in the folding.

This probably makes me unusual, but I’d much rather keep my cases and
if statements foldable. If it’s changed in the “official”
distribution, I will need to pretty much stop upgrading because method
folding is too coarse for me.

-austin


#3

folding.

This probably makes me unusual, but I’d much rather keep my cases and
if statements foldable. If it’s changed in the “official”
distribution, I will need to pretty much stop upgrading because method
folding is too coarse for me.
Me too, I like the way folding works right now, folding pretty much
everything. That way I only unfold the part of code that I’m currently
interested in. Though sometimes I do make use of zR to get the bigger
picture… :slight_smile:

I guess, if you make it configurable, it would be ok, so that we can
switch ON the ‘full folding’ mode if we wanted to…

All the best,
Alex


#4

I agree with you Doug, folding module, class & method make it easy to
see the structure of your code still. Anyway, it would be nice if there
could just be a switch so everyone can have their flavor. In the
meantime, check out Mauricio F. blog. He’s got a couple really
helpful bits for vim & ruby. This is the folding you want:

http://eigenclass.org/hiki.rb?Usable+Ruby+folding+for+Vim

-Jeff


#5

On Wed, 10 May 2006 20:07:38 +0900, you wrote:

Currently pretty much everything is folded but I was planning on
reducing this to just module/class/method definitions, multi-line

Any thoughts appreciated…

occasionaly i get frustrated with folding by syntax that most of the
ide’s do, so i use cream for vim which defaults to manual folding.
with easy access keys you can create folds or whatever lines you want.

in my regular vim installation i have folding defaulted to marker but
i find that tends to clutter up otherwise cluttered code :slight_smile:

http://home.cogeco.ca/~tsummerfelt1
telnet://ventedspleen.dyndns.org


#6

On 5/10/06, removed_email_address@domain.invalid removed_email_address@domain.invalid wrote:

i simply bit the bullet and always use marker - it’s very convenient if one
works with many many files since the folds endure when you close the file.
i’d also add folding of here-docs since, by definition, those are huge
multi-line blocks of string content that should nearly always be folded.

The standard folding for Ruby works with here-docs.

-austin


#7

On Wed, 10 May 2006, tony summerfelt wrote:

with easy access keys you can create folds or whatever lines you want.

in my regular vim installation i have folding defaulted to marker but
i find that tends to clutter up otherwise cluttered code :slight_smile:

i simply bit the bullet and always use marker - it’s very convenient if
one
works with many many files since the folds endure when you close the
file.
i’d also add folding of here-docs since, by definition, those are huge
multi-line blocks of string content that should nearly always be folded.

s =
#–{{{
<<-s
this
should
be
folded
s
#–}}}

regards.

-a


#8

On Wed, May 10, 2006 at 08:07:38PM +0900, Doug K. wrote:

We could, of course, make this ‘infinitely’ configurable but I see
little point. Is anyone particularly enamoured with having their
multi-line regexes folded? :wink:

I’ve written a plugin that achieves something similar; it’s a much
improved
version of the vimscript I’d had in my .vimrc for a long time.

It is available at http://eigenclass.org/hiki.rb?simplefold+plugin+0.4.0
There are also a few animations comparing it to fdm=syntax and
fdm=marker.

Some features:

  • folds on module/class/method/{constant,attribute} definitions
    (“top-level folds”)
    These folds are not nested, so methods inside a class are always
    visible, even when all folds are closed. This way zM gets you a
    high-level
    view of all of the file without having to open some module/class
    folds.
  • I’ve added folding on if/while/until/blocks/etc (“nestable folds”)
    (can be
    turned of, but it’s not a problem since we have zO)
  • top-level folds are enlarged to include preceding comments (good for
    RDoc’ed code)
  • the use of a specialized foldtext achieves over 60% savings in
    vertical
    space over fdm=marker at the class level.
  • it is possible to specify additional “top-level” folds with #{{{ /
    #}}} and
    additional “nestable” folds with {{{{ / }}}}.

#9

On Fri, 12 May 2006, Mauricio F. wrote:

  • it is possible to specify additional “top-level” folds with #{{{ / #}}} and
    additional “nestable” folds with {{{{ / }}}}.

you need to use

#–{{{ / #–}}}

#–{{{{ / #–}}}}

or else the #{{{ totally horks rdoc. fyi.

-a


#10

On Fri, May 12, 2006 at 02:08:09AM +0900, removed_email_address@domain.invalid wrote:

or else the #{{{ totally horks rdoc. fyi.

I’m matching against /{{{{/ and /^\s*[#%"0-9]{0,4}\s*{{{[^{]/, so
#–{{{{ would work fine. === ===
^
don’t remember why

Would

{{{

(with extra spaces) also break rdoc? And ##{{{? While we’re at it, #%{{{
should be safe.

#–{{{ is out because… well, I didn’t want it to conflict with your
markers :slight_smile:


#11

On Fri, 12 May 2006, Mauricio F. wrote:

#–{{{{ / #–}}}}

{{{

(with extra spaces) also break rdoc? And ##{{{? While we’re at it, #%{{{
should be safe.

#–{{{ is out because… well, I didn’t want it to conflict with your
markers :slight_smile:

Mauricio F. - http://eigenclass.org - singular Ruby

boy. reading this post in vim is tough! there are a lot of folds! :wink:

dunno about the spaces - i think i arrived at #-- because that’s some
sort of
flag for rdoc to ignore comments, so any such char should work.

cheers.

-a


#12

On Thu, 11 May 2006, Austin Z. wrote:

On 5/10/06, removed_email_address@domain.invalid removed_email_address@domain.invalid wrote:

i simply bit the bullet and always use marker - it’s very convenient if one
works with many many files since the folds endure when you close the file.
i’d also add folding of here-docs since, by definition, those are huge
multi-line blocks of string content that should nearly always be folded.

The standard folding for Ruby works with here-docs.

oh i know - just saying that here-docs should be included in a ‘minimal’
folding config too imho.

cheers.

-a


#13

On Fri, May 12, 2006 at 02:37:31AM +0900, removed_email_address@domain.invalid wrote:

of flag for rdoc to ignore comments, so any such char should work.
Alright, I thought you meant that {{{ drove rdoc mad, when it’s just
that
they look bad in the docs :slight_smile: (at least that’s what it looks like after a
quick test).

rdoc/parsers/parse_rb.rb:

def remove_private_comments(comment)
comment.gsub!(/^#–.?^#++/m, ‘’)
comment.sub!(/^#–.
/m, ‘’)
end

So it seems things aren’t that bad:

  • nestable folds will do fine, since we can use e.g. #-- {{{{, also
    avoiding
    conflicts with your markers
  • no problem either with “top-level” folds: anyway, there’s no point in
    adding
    one just before a rdoc’able element (class, method…), since a fold
    would
    be created there automatically anyway.

Thanks for pointing this out, I’ll add a few words about rdoc in the
docs.


#14

On Fri, May 12, 2006 at 01:35:03AM +0900, Mauricio F. wrote:

I’ve written a plugin that achieves something similar; it’s a much improved
version of the vimscript I’d had in my .vimrc for a long time.

It is available at http://eigenclass.org/hiki.rb?simplefold+plugin+0.4.0
There are also a few animations comparing it to fdm=syntax and fdm=marker.

This looks interesting; I’ll add a note to the vim-ruby docs.

Regards,
Doug


#15

On Wed, May 10, 2006 at 08:27:32PM +0900, Austin Z. wrote:

Enamoured? No. But there are things that I really like being folded –
multi-line hash definitions (I wish it extended to multiline array
definitions).

I’ll include something in the next release but in the meantime you can
just add

syn region rubyArrayLiteral start="%(^|\s)[" end="]"
contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold

to ~/.vim/after/syntax/ruby.vim. It should work for the common cases…

All in all, I’m mostly happy with the state of folding in the folding.

Good. I was under the impression that almost everyone found the folding
excessive.

This probably makes me unusual, but I’d much rather keep my cases and
if statements foldable. If it’s changed in the “official”
distribution, I will need to pretty much stop upgrading because method
folding is too coarse for me.

I’ll make any changes configurable.

Thanks,
Doug