Como posso autofold POD em Perl com o vim?
Pergunta
Eu estou tentando editar arquivos com o vim e obter o POD dobrado automaticamente (apenas o POD, não o Perl). Eu não posso fazê-lo funcionar. Eu posso conseguir dobrar-se ao trabalho, porque posso destacar manualmente as linhas e tipo zF
e ela se dobra corretamente.
Alguém pode lançar luz sobre isso?
Solução
Você esqueceu
:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
Outras dicas
Cole o seguinte no final do seu arquivo ~ / .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
Isso deve funcionar na maioria dos casos - É apenas um exemplo rápido e sujo, mas você pode adicionar mais também que se você precisar de mais funcionalidade. Além disso, a certeza de que este está habilitado, você pode querer adicionar o modeline:
# vim:fen:fdo=hor:fcl=all:fdm=expr:fde=MyFoldLevel(v:lnum):fml=1
Se você não vê dobrado texto neste momento, tente definir o 'foldopen = hor' e 'foldclose = all', que irá tornar a navegação em / out de dobras mais fácil. Além disso, se você precisa disso para ser aplicado a outros arquivos ou filetyps, você pode configurar o au (autocommand) em conformidade. Felicidades.
Você pode colocar isso no seu .vimrc:
au FileType perl
\ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
\ setlocal foldmethod=expr
Apenas definir perl_fold_ variáveis ??*, o sistema perl sintaxe marcador vai cuidar do resto.
Em .vimrc, basta adicionar
let perl_fold=1
let perl_fold_blocks=1
Isto é o que eu estou usando,
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