Come posso autofold POD in Perl con vim?
Domanda
Sto cercando di modificare i file con vim e ottenere il POD ripiegato automaticamente (solo il POD, non il Perl). Non riesco a farlo funzionare. Posso ottenere stessa piegatura per lavorare perché posso evidenziare manualmente le linee e tipo zF
e pieghe correttamente.
Qualcuno può far luce su questo?
Soluzione
Si è dimenticato
:set foldmethod=syntax
:setf perl
:syntax on
:set foldenable
:syn region POD start=/^=head[123]/ end=/^=cut/ fold
Altri suggerimenti
Incolla quanto segue al end del file ~ / .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
Questo dovrebbe funzionare nella maggior parte dei casi - E 'solo un esempio veloce e sporco, ma è possibile aggiungere più anche se avete bisogno di più funzionalità. Inoltre, per rendere certo che questo sia abilitato si potrebbe desiderare di aggiungere il modeline:
# vim:fen:fdo=hor:fcl=all:fdm=expr:fde=MyFoldLevel(v:lnum):fml=1
Se non vedi il testo piegato a questo punto, provare a impostare il 'foldopen = Hor' e 'foldclose = all' che renderà la navigazione in / out di pieghe più facile. Inoltre, se avete bisogno di questo per essere applicato ad altri file o filetyps, è possibile impostare l'au (autocomando) di conseguenza. Cin cin.
Si può mettere questo nel vostro .vimrc:
au FileType perl
\ setlocal foldexpr=getline(v:lnum)=~'^=cut'?'<1':getline(v:lnum)=~'^='?'1':'=' |
\ setlocal foldmethod=expr
Basta definire le variabili perl_fold_ *, l'evidenziatore di sintassi Perl sistema si prenderà cura di tutto il resto.
In Vimrc, basta aggiungere
let perl_fold=1
let perl_fold_blocks=1
Questo è quello che sto 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