【问题标题】:How can I autofold POD in Perl with vim?如何使用 vim 在 Perl 中自动折叠 POD?
【发布时间】:2010-10-08 14:33:06
【问题描述】:

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

有人能解释一下吗?

【问题讨论】:

    标签: perl vim folding


    【解决方案1】:

    你忘了

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

    【讨论】:

    • 它只有在我无法加载我的 .vimrc 时才有效。遗憾的是,我无法弄清楚如何调试导致冲突的原因。尽管如此,它还是更近了一步。谢谢!
    • 注释掉一半的文件。如果它有效,那么问题就出在那一半。重复。
    • @jrockway 哦!我也必须用我的插件来做到这一点。那些会很痛苦,但是,是的,我会弄清楚如何让它工作:)
    • 不要加载你的 vimrc 文件,然后在你进入 vim 之后,使用- ":debug source ~/.vimrc" 它将逐步调试你整个事情,你可以跳过你不知道的东西想要进入(如其他来源、插件等)。这是我所知道的调试 vim 脚本的最佳方式。
    【解决方案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(自动命令)。干杯。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        只需定义 perl_fold_* 变量,系统 perl 语法高亮会处理其余的。

        在.vimrc中,添加

        let perl_fold=1
        let perl_fold_blocks=1 
        

        【讨论】:

          【解决方案5】:

          这是我正在使用的,

          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
          

          【讨论】:

            猜你喜欢
            • 2011-06-14
            • 2010-09-12
            • 1970-01-01
            • 2011-03-08
            • 1970-01-01
            • 2011-06-01
            • 2010-11-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多