如何使用vim在Perl中自动填充POD?

问题描述 投票:5回答:5

我正在尝试用vim编辑文件并自动折叠POD(只是POD,而不是Perl)。我无法让它发挥作用。我可以折叠自己工作,因为我可以手动突出显示线条并键入zF并正确折叠。

任何人都可以阐明这一点吗?

perl vim folding
5个回答
10
投票

你忘了

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

2
投票

将以下内容粘贴到〜/ .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 = all',这样可以更轻松地导入/缩小折叠。此外,如果您需要将其应用于其他文件或文件类型,则可以相应地设置au(自动命令)。干杯。


0
投票

你可以把它放在.vimrc中:

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

0
投票

只需定义perl_fold_ *变量,系统perl语法高亮显示器将负责其余部分。

在.vimrc中,只需添加即可

let perl_fold=1
let perl_fold_blocks=1 

0
投票

这就是我正在使用的,

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
© www.soinside.com 2019 - 2024. All rights reserved.