如何使用 vim 在 Perl 中自动折叠 POD?

发布于 2024-07-13 11:34:26 字数 121 浏览 13 评论 0原文

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

谁能阐明这一点?

I'm trying to edit files with vim and get the POD automatically folded (just the POD, not the Perl). I can't get it to work. I can get folding itself to work because I can manually highlight the lines and type zF and it folds properly.

Can anyone shed light on this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

有深☉意 2024-07-20 11:34:26

你忘了

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

You forgot

:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
别在捏我脸啦 2024-07-20 11:34:26

将以下内容粘贴到 ~/.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(自动命令)。 干杯。

Paste the following at the end of your ~/.vimrc file:

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

This should work in most cases -- It's just a quick and dirty example, but you can add more too it if you need more functionality. Also, to make certain that this is enabled you might want to add the modeline:

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

If you dont see folded text at this point, try setting the 'foldopen=hor' and 'foldclose=all' which will make navigation into/out of folds easier. Also, if you need this to be applied to other files or filetyps, you can set up the au (autocommand) accordingly. Cheers.

木森分化 2024-07-20 11:34:26

您可以将其放入 .vimrc 中:

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

You can put this in your .vimrc:

au FileType perl
    \ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
    \ setlocal foldmethod=expr
本王不退位尔等都是臣 2024-07-20 11:34:26

只需定义 perl_fold_* 变量,系统 perl 语法荧光笔将处理其余的事情。

在.vimrc中,只需添加

let perl_fold=1
let perl_fold_blocks=1 

Just define perl_fold_* variables, the system perl syntax highlighter will take care of the rest.

In .vimrc, just add

let perl_fold=1
let perl_fold_blocks=1 
離殇 2024-07-20 11:34:26

这就是我正在使用的

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

This is what I'm using,

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文