我试图用vim编辑文件,并得到POD自动折叠(只是POD,不是Perl的)。我无法得到它的工作。我可以折叠本身工作,因为我可以手动突出线和类型zF和它折叠正常。

可以任何人揭示该光?

有帮助吗?

解决方案

您忘记

:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold

其他提示

粘贴在端以下你的〜/ .vimrc文件的:

fu! MyFoldSettings()
  set foldmethod=expr
  set foldexpression=MyFoldLevel(v:lnum)
  set foldenable
  set foldminlines=1
endf      

fu! MyFoldLevel(lev)
    let mytext = getline(a:lev)
    let result="="
    if mytext =~ '^=item'
        let result=">3"
    elsei mytext =~ '^=back'
        let result="<2"
    elsei mytext =~ '^=over'
        let result=">2"
    elsei mytext =~ '^=cut'
        let result="<1"
    elsei mytext =~ '^=\w\+'
        let result='>1'
    en    
    return result
endf

augroup MyFoldSettings_AutoCommands
   au!
   au BufReadPost {*.pl,*.pod,*.pm} MyFoldSettings()
augroup END

这在大多数情况下工作 - 这只是一个快速和肮脏的例子,但是如果你需要更多的功能,你可以添加更多的过它。另外,要做出一定的启用该选项,你可能要添加的模式行:

# vim:fen:fdo=hor:fcl=all:fdm=expr:fde=MyFoldLevel(v:lnum):fml=1

如果你不看到折叠文本在这一点上,尝试设置“foldopen = HOR”和把“foldclose =所有”,这将使导航进入/退出的折叠更容易。另外,如果你需要这个被应用到其他文件或filetyps,您可以相应地设置了AU(自动命令)。欢呼声。

您可以把你的.vimrc文件:

au FileType perl
    \ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
    \ setlocal foldmethod=expr

只要定义perl_fold_ *变量,系统的perl语法荧光笔将其余的工作。

在的.vimrc,只需添加

let perl_fold=1
let perl_fold_blocks=1 

这是我使用的是什么,

set syntax                                                                                                                                                               

augroup perl_folding                                                                                                                                                     
    au!                                                                                                                                                                  
    autocmd FileType perl setlocal foldmethod=syntax                                                                                                                     
    autocmd FileType perl setlocal foldlevel=1                                                                                                                           
    autocmd FileType perl let perl_fold = 1                                                                                                                              
    autocmd FileType perl let perl_fold_blocks = 1                                                                                                                       
    autocmd FileType perl setlocal foldenable                                                                                                                            
    au BufRead,BufNewFile *.pm set filetype=perl                                                                                                                         
augroup END
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top