Как мне автоматически сложить POD в Perl с помощью vim? - PullRequest
5 голосов
/ 19 февраля 2009

Я пытаюсь редактировать файлы с помощью vim и автоматически складывать POD (только POD, а не Perl). Я не могу заставить его работать. Я могу заставить себя сгибаться, чтобы работать, потому что я могу вручную выделить линии и набрать zF, и он сложится правильно.

Кто-нибудь может пролить свет на это?

Ответы [ 5 ]

10 голосов
/ 19 февраля 2009

Вы забыли

:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
2 голосов
/ 28 октября 2014

Вставьте следующее в end вашего файла ~ / .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 голосов
/ 09 апреля 2019

Это то, что я использую,

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
0 голосов
/ 29 августа 2015

Просто определите переменные perl_fold_ *, система подсветки синтаксиса perl позаботится обо всем остальном.

В .vimrc просто добавьте

let perl_fold=1
let perl_fold_blocks=1 
0 голосов
/ 16 июля 2015

Вы можете поместить это в свой .vimrc:

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