5

我正在尝试使用 vim 编辑文件并自动折叠 POD(只是 POD,而不是 Perl)。我无法让它工作。我可以让折叠本身工作,因为我可以手动突出显示线条和类型zF并且它可以正确折叠。

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

4

5 回答 5

10

你忘了

:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
于 2009-02-19T16:01:22.123 回答
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(自动命令)。干杯。

于 2014-10-27T22:20:55.077 回答
0

你可以把它放在你的 .vimrc 中:

au FileType perl
    \ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
    \ setlocal foldmethod=expr
于 2015-07-16T16:17:05.640 回答
0

只需定义 perl_fold_* 变量,系统 perl 语法高亮器将处理其余部分。

在 .vimrc 中,只需添加

let perl_fold=1
let perl_fold_blocks=1 
于 2015-08-29T10:21:33.757 回答
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
于 2019-04-09T19:02:14.503 回答