(→Alternatives: move disclaimer to beginning of section) |
|||
Line 19: | Line 19: | ||
==Alternatives== |
==Alternatives== |
||
+ | It is easier for most users to use the built-in procedure outlined above, but it is also possible to work around any issues you have with the built-in folding, using a plugin or directly writing and using a <tt>'foldexpr'</tt>. |
||
+ | |||
===Plugin: SimpleFold=== |
===Plugin: SimpleFold=== |
||
If you are able to install scripts, the {{script|id=1868|text=SimpleFold script}} is very nice and supports Perl, among other languages. |
If you are able to install scripts, the {{script|id=1868|text=SimpleFold script}} is very nice and supports Perl, among other languages. |
||
Line 37: | Line 39: | ||
===foldexpr workaround=== |
===foldexpr workaround=== |
||
− | ''It is better to use the built-in procedure outlined above, but the following old information may be helpful for some users.'' |
||
− | |||
Add this to your [[vimrc]] to automatically fold Perl functions. You may also like to modify the script for similar languages that define a subroutine with "sub ...". |
Add this to your [[vimrc]] to automatically fold Perl functions. You may also like to modify the script for similar languages that define a subroutine with "sub ...". |
||
<pre> |
<pre> |
Revision as of 13:30, 4 November 2010
created 2003 · complexity intermediate · author Mina Naguib · version 7.0
The $VIMRUNTIME/syntax/perl.vim file provided with Vim has a configurable option that allows folding in Perl programs. To enable folding in files with "perl" filetype, put the following line in your vimrc (see :help perl.vim for more details):
let perl_fold = 1
The Vim 7.2 perl.vim has some bugs. A patch is available.
Alternatives
It is easier for most users to use the built-in procedure outlined above, but it is also possible to work around any issues you have with the built-in folding, using a plugin or directly writing and using a 'foldexpr'.
Plugin: SimpleFold
If you are able to install scripts, the SimpleFold script is very nice and supports Perl, among other languages.
Version 0.5 of this plugin does not support a lot of fold cases for Perl properly, however. Nevertheless, a simple patch can fix it.
About the only thing that doesn’t work is lines which both close and open a block, e.g.:
if (something) { stuff } elsif (somethingelse) { #this doesn’t work otherstuff }
This doesn't appear simple to fix, so you're better off just adding a line break and refolding (by default it calculates and sets folds with <leader>f ).
foldexpr workaround
Add this to your vimrc to automatically fold Perl functions. You may also like to modify the script for similar languages that define a subroutine with "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" else return "=" endif endwhile else return "=" endif endfunction setlocal foldexpr=GetPerlFold() setlocal foldmethod=expr
See also
- Folding presents an overview of how to use folding
References
Comments
When let perl_fold = 1 is used, the fold method (:set fdm?) will be "syntax", and you will not be able to use manual or marker folds. If wanted, you can change the fold method, for example, :set foldmethod=manual.
In other words, if you want vim to autofold perl subroutines, use let perl_fold = 1 in your .vimrc. This should automatically set foldmethod=syntax when you load a perl file, but if not, you can manually set foldmethod=syntax or put this command in a file in $HOME/.vim/after/syntax called perl.vim (create this directory and file if it does not yet exist).