Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Any smart Perl editors?

by stevieb (Canon)
on Jun 08, 2019 at 15:06 UTC ( [id://11101133]=note: print w/replies, xml ) Need Help??


in reply to Re: Any smart Perl editors?
in thread Any smart Perl editors?

If I'm on any computer that I can't get my IDE on, I use Vim as well. Here's a handy little bit of code for one's .vimrc file that allows for folding/unfolding of Perl subs:

function GetPerlFold() if getline(v:lnum) =~ '^\s*sub\s' return ">1" elseif getline(v:lnum) =~ '\}\s*$' let my_perlnum = v:lnum let my_perlmax = line("$") while (1) let my_perlnum = my_perlnum + 1 if my_perlnum > my_perlmax return "<1" endif let my_perldata = getline(my_perlnum) if my_perldata =~ '^\s*\(\#.*\)\?$' " do nothing elseif my_perldata =~ '^\s*sub\s' return "<1" else return "=" endif endwhile else return "=" endif endfunction setlocal foldexpr=GetPerlFold() setlocal foldmethod=expr

Here's a screenshot of what things look like if the above code snip is added into the config file (all subs are folded by default when opening a Perl file).

I keep a copy of my most basic vim config file in my Github for easy retrieval while I'm on systems I don't have control over.

Update: While in Vim's normal mode, zo will open/expand the folded sub, and zc will close it again.

Replies are listed 'Best First'.
Re^3: Any smart Perl editors?
by Theodore (Friar) on Jun 10, 2019 at 14:35 UTC
    Very nice! Here is a slightly changed version adapted to my own coding style (using '};' instead of '}' and pod documentation before each sub):
    function GetPerlFold() if getline(v:lnum) =~ '^\s*sub\s' return ">1" elseif getline(v:lnum) =~ '\};*\s*$' let my_perlnum = v:lnum let my_perlmax = line("$") while (1) let my_perlnum = my_perlnum + 1 if my_perlnum > my_perlmax return "<1" endif let my_perldata = getline(my_perlnum) if my_perldata =~ '^\s*\(\#.*\)\?$' " do nothing elseif my_perldata =~ '^\s*sub\s' return "<1" elseif my_perldata =~ '^\s*=head.\s*' return "<1" else return "=" endif endwhile else return "=" endif endfunction setlocal foldexpr=GetPerlFold() setlocal foldmethod=expr
    This will let the pod lines between subs out of the folds. The original version will fold the pod lines with the previous sub.

      Very nice!

      I've always put my POD at the bottom of the file (after a 1; and an __END__), so I just create a dummy sub as my last one, and the all the POD is folded as you said.

      For me, that makes it easy to go directly to the bottom of my code, instead of automatically going to the bottom of the POD.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11101133]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (4)
As of 2024-03-29 10:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found